Terrayform kullanarak Azure Kubernetes hizmeti ile bir Kubernetes kümesi oluşturma
Azure Kubernetes hizmeti (AKS) , barındırılan Kubernetes ortamınızı yönetir. AKS, kapsayıcı düzenleme uzmanlığı olmadan Kapsayıcılı uygulamaları dağıtmanıza ve yönetmenize olanak tanır. AKS Ayrıca, uygulamanızı çevrimdışı duruma getirmeden birçok yaygın bakım işlemi yapmanızı sağlar. Bu işlemler, kaynakları isteğe bağlı olarak sağlamayı, yükseltmeyi ve ölçeklendirmeyi içerir.
Bu makalede şunları öğreneceksiniz:
- HCL (HashiCorp Language) ile Kubernetes kümesi tanımlama
- Terraform ve AKS ile Kubernetes kümesi oluşturma
- kubectl aracıyla bir Kubernetes kümesinin kullanılabilirlik durumunu test etme
1. ortamınızı yapılandırın
- Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Teroyform 'U Yapılandır: Henüz yapmadıysanız, aşağıdaki seçeneklerden birini kullanarak Terrayform 'u yapılandırın:
- Azure hizmet sorumlusu: hizmet sorumlusu yoksa hizmet sorumlusu oluşturun. ,, Ve değerlerini unutmayın
appIddisplayNamepasswordtenant.
2. SSH anahtar çifti oluşturma
Bu makaledeki örnek, kullanıcıyı VM 'ye doğrulamak için bir SSH anahtar çifti kullanır.
Ortamınıza bağlı olarak aşağıdaki makalelerden birini kullanarak bir SSH anahtar çifti oluşturun:
3. dizin yapısını oluşturma
İlk adım, bu alıştırmadaki Terraform yapılandırma dosyalarınızı barındıracak olan dizini oluşturmaktır.
Terrayform komutlarını çalıştırabileceğiniz bir komut satırı istemi açın.
terraform-aks-k8sadlı bir dizin oluşturun.Dizinleri yeni dizinle değiştirin:
4. Azure sağlayıcısını bildirme
Bir Terrayform yapılandırma dosyası, sağlayıcının belirtimine göre başlatılır. Azure 'u kullanırken, bloğunda Azure sağlayıcısını (azurerd) belirtirsiniz .
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "<resource_group_name>"
location = "<location>"
}
# Your Terraform code goes here...
Anahtar noktaları:
versionÖzniteliği isteğe bağlı olsa da HashiCorp, sağlayıcının belirli bir sürümüne sabitlenmesini öneriyor.- Azure sağlayıcısı 1. x kullanıyorsanız,
featuresbloğa izin verilmez. - Azure sağlayıcısı 2. x kullanıyorsanız,
featuresblok gereklidir. - Azurerm_resource_group kaynak bildiriminin iki bağımsız değişkeni vardır: ve . Yer tutucuları ortamınız için uygun değerlere ayarlayın.
- Kaynak grubu için Yerel adlandırılmış değeri , kaynak grubuna başvururken nasıl yapılır ve makale makaleleri boyunca kullanılır. Bu değer, kaynak grubu adından bağımsızdır ve yalnızca kodunuzdaki değişken adına başvurur. Bu değeri kaynak grubu tanımında değiştirirseniz, ona başvuran kodda de değiştirin.
5. bir Kubernetes kümesi tanımlayın
Kubernetes kümesinin kaynaklarını tanımlayan Terraform yapılandırma dosyasını oluşturun.
k8s.tfadlı bir dosya oluşturun.Aşağıdaki kodu yeni dosyaya ekleyin:
resource "azurerm_resource_group" "k8s" { name = var.resource_group_name location = var.location } resource "random_id" "log_analytics_workspace_name_suffix" { byte_length = 8 } resource "azurerm_log_analytics_workspace" "test" { # The WorkSpace name has to be unique across the whole of azure, not just the current subscription/tenant. name = "${var.log_analytics_workspace_name}-${random_id.log_analytics_workspace_name_suffix.dec}" location = var.log_analytics_workspace_location resource_group_name = azurerm_resource_group.k8s.name sku = var.log_analytics_workspace_sku } resource "azurerm_log_analytics_solution" "test" { solution_name = "ContainerInsights" location = azurerm_log_analytics_workspace.test.location resource_group_name = azurerm_resource_group.k8s.name workspace_resource_id = azurerm_log_analytics_workspace.test.id workspace_name = azurerm_log_analytics_workspace.test.name plan { publisher = "Microsoft" product = "OMSGallery/ContainerInsights" } } resource "azurerm_kubernetes_cluster" "k8s" { name = var.cluster_name location = azurerm_resource_group.k8s.location resource_group_name = azurerm_resource_group.k8s.name dns_prefix = var.dns_prefix linux_profile { admin_username = "ubuntu" ssh_key { key_data = file(var.ssh_public_key) } } default_node_pool { name = "agentpool" node_count = var.agent_count vm_size = "Standard_D2_v2" } service_principal { client_id = var.client_id client_secret = var.client_secret } addon_profile { oms_agent { enabled = true log_analytics_workspace_id = azurerm_log_analytics_workspace.test.id } } network_profile { load_balancer_sku = "Standard" network_plugin = "kubenet" } tags = { Environment = "Development" } }Yukarıdaki kod, kümenin, konumun ve kaynak grubu adının adını ayarlar. Tam etki alanı adı (FQDN) için önek de ayarlanır. FQDN, kümeye erişmek için kullanılır.
linux_profileKayıt, SSH kullanarak çalışan düğümlerinde oturum açmayı etkinleştiren ayarları yapılandırmanıza olanak tanır.AKS ile yalnızca çalışan düğümleri için ödeme yaparsınız.
default_node_poolKayıt, bu çalışan düğümlerinin ayrıntılarını yapılandırır. ,default_node_pool recordOluşturulacak çalışan düğümlerinin sayısını ve çalışan düğümlerinin türünü içerir. Daha sonra kümede ölçeği büyütme veya küçültme yapmanız gerekiyorsa,countbu kayıttaki değeri değiştirirsiniz.
6. değişkenleri bildirin
variables.tfProje değişkenlerini içerecek şekilde adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:variable "client_id" {} variable "client_secret" {} variable "agent_count" { default = 3 } variable "ssh_public_key" { default = "~/.ssh/id_rsa.pub" } variable "dns_prefix" { default = "k8stest" } variable cluster_name { default = "k8stest" } variable resource_group_name { default = "azure-k8stest" } variable location { default = "Central US" } variable log_analytics_workspace_name { default = "testLogAnalyticsWorkspaceName" } # refer https://azure.microsoft.com/global-infrastructure/services/?products=monitor for log analytics available regions variable log_analytics_workspace_location { default = "eastus" } # refer https://azure.microsoft.com/pricing/details/monitor/ for log analytics pricing variable log_analytics_workspace_sku { default = "PerGB2018" }
7. bir Terrayform çıkış dosyası oluşturma
Terraform çıkışları, Terraform bir plan uyguladığında kullanıcı için vurgulanabilecek değerleri tanımlamanızı sağlar. Bu değerler komutuyla sorgulanabilir. Bu bölümde kubectl ile kümeye erişmenizi sağlayan bir çıkış dosyası oluşturacaksınız.
output.tfadlı bir dosya oluşturun.Aşağıdaki kodu yeni dosyaya ekleyin:
output "client_key" { value = azurerm_kubernetes_cluster.k8s.kube_config.0.client_key } output "client_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config.0.client_certificate } output "cluster_ca_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config.0.cluster_ca_certificate } output "cluster_username" { value = azurerm_kubernetes_cluster.k8s.kube_config.0.username } output "cluster_password" { value = azurerm_kubernetes_cluster.k8s.kube_config.0.password } output "kube_config" { value = azurerm_kubernetes_cluster.k8s.kube_config_raw sensitive = true } output "host" { value = azurerm_kubernetes_cluster.k8s.kube_config.0.host }
8. Terrayform durumunu depolamak için Azure Storage 'ı ayarlama
Terraform, durumu terraform.tfstate dosyasıyla yerel olarak izler. Bu model tek kişilik bir ortamda iyi çalışır. Çok kişili bir ortamda, durumu izlemek için Azure depolama kullanılır.
Bu bölümde, aşağıdaki görevlerin nasıl yapılacağını göreceksiniz:
- Depolama hesabı bilgilerini alma (hesap adı ve hesap anahtarı)
- Terrayform durum bilgilerinin depolanacağı bir depolama kapsayıcısı oluşturun.
Azure portalda sol taraftaki menüden Tüm hizmetler'i seçin.
Depolama hesapları'nı seçin.
Depolama hesapları sekmesinde Terraform durum bilgilerinin depolanacağı depolama hesabının adını seçin. Örneğin Cloud Shell'i ilk açtığınızda oluşturulmuş olan depolama hesabını kullanabilirsiniz. Cloud Shell tarafından oluşturulan depolama hesabı genellikle
csile başlar ve sonrasında rastgele sayı ve harf dizesi bulunur. Seçtiğiniz depolama hesabını bir yere göz atın. Bu değer daha sonra gereklidir.Depolama hesabı sekmesinde Erişim anahtarları'nı seçin.

key1anahtar değerini not edin. (Anahtarın sağ tarafındaki simgeyi seçtiğinizde değer panoya kopyalanır.)

Azure depolama hesabınızda bir kapsayıcı oluşturun. Yer tutucuları ortamınız için uygun değerlerle değiştirin.
az storage container create -n tfstate --account-name <YourAzureStorageAccountName> --account-key <YourAzureStorageAccountKey>
9. Kubernetes kümesi oluşturma
Bu bölümde, terraform init önceki bölümlerde oluşturduğunuz yapılandırma dosyalarında tanımlanan kaynakları oluşturmak için komutunu nasıl kullanacağınızı görürsünüz.
Cloud Shell ' de Terrayform ' u başlatın. Yer tutucuları ortamınız için uygun değerlerle değiştirin.
terraform init -backend-config="storage_account_name=<YourAzureStorageAccountName>" -backend-config="container_name=tfstate" -backend-config="access_key=<YourStorageAccountAccessKey>" -backend-config="key=codelab.microsoft.tfstate"terraform initKomut, arka uç ve sağlayıcı eklentisinin başlatılma başarısını görüntüler:
Hizmet sorumlusu kimlik bilgilerini dışarı aktarma Yer tutucuları hizmet sorumlınızdan uygun değerlerle değiştirin.
export TF_VAR_client_id=<service-principal-appid> export TF_VAR_client_secret=<service-principal-password>terraform plankomutunu çalıştırarak altyapı öğelerini tanımlayan Terraform planını oluşturun.terraform plan -out out.planterraform plankomutu,terraform applykomutunu çalıştırdığınızda oluşturularak kaynakları gösterir:
Kubernetes kümesini oluşturma planını uygulamak için
terraform applykomutunu çalıştırın. Bir Kubernetes kümesi oluşturma işlemi birkaç dakika sürebilir ve Cloud Shell oturum zaman aşımına uğramaz. Cloud Shell oturum zaman aşımına uğrarsa, işlemi tamamlamanıza olanak tanımak için "Cloud Shell zaman aşımından kurtarma" bölümündeki adımları izleyebilirsiniz.terraform apply out.planterraform applykomutu, yapılandırma dosyalarınızda tanımlı kaynakların oluşturulmasının sonuçlarını gösterir:
Azure portal yeni Kubernetes kümeniz için oluşturulan kaynakları görmek için, sol taraftaki menüden tüm kaynaklar ' ı seçin.

10. Cloud Shell zaman aşımından kurtarma
Cloud Shell oturumu zaman aşımına uğrarsa, kurtarmak için aşağıdaki adımları gerçekleştirebilirsiniz:
Cloud Shell oturumu başlatın.
Terraform yapılandırma dosyalarınızı içeren dizine geçin.
cd /clouddrive/terraform-aks-k8sŞu komutu çalıştırın:
export KUBECONFIG=./azurek8s
11. Kubernetes kümesini test etme
Yeni oluşturulan kümeyi doğrulamak için Kubernetes araçlarını kullanabilirsiniz.
Terraform durumundaki Kubernetes yapılandırmasını alın ve kubectl tarafından okunabilecek bir dosyaya kaydedin.
echo "$(terraform output kube_config)" > ./azurek8sÖnceki komutun bir EOT ASCII karakteri eklememediğinden emin olun
cat ./azurek8s<< EOTBaşında veEOTsonunda görüyorsanız, bu dosyaları kaldırmak için dosyanın içeriğini düzenleyin. Bu gereklidir, aksi takdirde şu iletiyi alabilirsiniz:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this contextkubectl aracının doğru yapılandırmayı alabilmesi için bir ortam değişkeni ayarlayın.
export KUBECONFIG=./azurek8sKümenin durumunu doğrulayın.
kubectl get nodesÇalışan düğümlerinin ayrıntılarını görmeniz ve bu düğümlerin durumunun aşağıdaki görüntüde olduğu gibi Ready (Hazır) olması gerekir:

12. sistem durumunu ve günlükleri izleme
AKS kümesi oluşturulduğunda hem küme düğümleri hem de pod'lar için sistem durumu ölçümlerini yakalamak için izleme özellikleri etkinleştirilmiştir. Bu sistem durumu ölçümleri Azure portaldan kullanılabilir. Küme durumu izleme hakkında daha fazla bilgi için bkz. Azure Kubernetes Hizmeti durumunu izleme.
Azure 'da Terrampaform sorunlarını giderme
Azure 'da Terrampaform kullanırken karşılaşılan yaygın sorunları giderme