Hızlı Başlangıç: Terraform kullanarak AKS kümesi için Azure Linux Container Host dağıtma
Azure Linux Container Host kümesini dağıtmak için Terraform kullanarak Azure Linux Container Host ile çalışmaya başlayın. Önkoşulları yükledikten sonra Terraform kodunu uygular, Terraform'u başlatır ve bir Terraform yürütme planı oluşturup uygularsınız.
Terraform , bulut altyapısının tanımlanmasını, önizlemesini ve dağıtımını sağlar. Terraform ile HCL söz dizimiyle yapılandırma dosyaları oluşturursunuz. HCL söz dizimi, bulut altyapınızı oluşturan bulut sağlayıcısını ve öğelerini belirtmenize olanak tanır. Yapılandırma dosyalarınızı oluşturduktan sonra, altyapı değişikliklerinizin dağıtılmadan önce önizlemesini görüntülemenizi sağlayan bir yürütme planı oluşturursunuz. Değişiklikleri doğruladıktan sonra, altyapıyı dağıtmak için yürütme planını uygularsınız.
Not
Bu makaledeki örnek kod, Microsoft Terraform GitHub deposunda bulunur.
Önkoşullar
-
Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
Terraform'ı henüz yapılandırmadıysanız, bunu aşağıdaki seçeneklerden birini kullanarak yapabilirsiniz:
Azure hizmet sorumlunuz yoksa bir hizmet sorumlusu oluşturun. , ,
display_name
password
vetenant
değerlerini notappId
edin.Kubernetes komut satırı aracına
kubectl
ihtiyacınız vardır. Sahip değilseniz kubectl dosyasını indirin.
SSH anahtar çifti oluşturma
AKS düğümlerine erişmek için komutunu kullanarak oluşturduğunuz bir SSH anahtar çifti (genel ve özel) kullanarak ssh-keygen
bağlanırsınız. Varsayılan olarak, bu dosyalar ~/.ssh dizininde oluşturulur. komutu çalıştırılırsa ssh-keygen
, belirtilen konumda zaten var olan aynı ada sahip tüm SSH anahtar çiftlerinin üzerine yazılır.
Cloud Shell'i https://shell.azure.com tarayıcınızda açmak için adresine gidin.
ssh-keygen
komutunu çalıştırın. Aşağıdaki örnek, RSA şifrelemesini ve 4096 bit uzunluğunu kullanarak bir SSH anahtar çifti oluşturur:ssh-keygen -t rsa -b 4096
SSH anahtarları oluşturma hakkında daha fazla bilgi için bkz . Azure'da kimlik doğrulaması için SSH anahtarları oluşturma ve yönetme.
Terraform kodunu uygulama
Örnek Terraform kodunu test etmek ve geçerli dizin yapmak için bir dizin oluşturun.
adlı
providers.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
adlı
main.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:# Generate random resource group name resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_id" "log_analytics_workspace_name_suffix" { byte_length = 8 } resource "azurerm_log_analytics_workspace" "test" { location = var.log_analytics_workspace_location # 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}" resource_group_name = azurerm_resource_group.rg.name sku = var.log_analytics_workspace_sku } resource "azurerm_log_analytics_solution" "test" { location = azurerm_log_analytics_workspace.test.location resource_group_name = azurerm_resource_group.rg.name solution_name = "ContainerInsights" workspace_name = azurerm_log_analytics_workspace.test.name workspace_resource_id = azurerm_log_analytics_workspace.test.id plan { product = "OMSGallery/ContainerInsights" publisher = "Microsoft" } } resource "azurerm_kubernetes_cluster" "k8s" { location = azurerm_resource_group.rg.location name = var.cluster_name resource_group_name = azurerm_resource_group.rg.name dns_prefix = var.dns_prefix tags = { Environment = "Development" } default_node_pool { name = "azurelinuxpool" vm_size = "Standard_D2_v2" node_count = var.agent_count os_sku = "AzureLinux" } linux_profile { admin_username = "azurelinux" ssh_key { key_data = file(var.ssh_public_key) } } network_profile { network_plugin = "kubenet" load_balancer_sku = "standard" } service_principal { client_id = var.aks_service_principal_app_id client_secret = var.aks_service_principal_client_secret } }
Benzer şekilde, Azure Linux'ı
os_sku
azurerm_kubernetes_cluster_node_pool olarak belirtebilirsiniz.adlı
variables.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:variable "agent_count" { default = 3 } # The following two variable declarations are placeholder references. # Set the values for these variable in terraform.tfvars variable "aks_service_principal_app_id" { default = "" } variable "aks_service_principal_client_secret" { default = "" } variable "cluster_name" { default = "k8stest" } variable "dns_prefix" { default = "k8stest" } # Refer to https://azure.microsoft.com/global-infrastructure/services/?products=monitor for available Log Analytics regions. variable "log_analytics_workspace_location" { default = "eastus" } variable "log_analytics_workspace_name" { default = "testLogAnalyticsWorkspaceName" } # Refer to https://azure.microsoft.com/pricing/details/monitor/ for Log Analytics pricing variable "log_analytics_workspace_sku" { default = "PerGB2018" } variable "resource_group_location" { default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "ssh_public_key" { default = "~/.ssh/id_rsa.pub" }
adlı
outputs.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:output "client_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_certificate sensitive = true } output "client_key" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_key sensitive = true } output "cluster_ca_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].cluster_ca_certificate sensitive = true } output "cluster_password" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].password sensitive = true } output "cluster_username" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].username sensitive = true } output "host" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].host sensitive = true } output "kube_config" { value = azurerm_kubernetes_cluster.k8s.kube_config_raw sensitive = true } output "resource_group_name" { value = azurerm_resource_group.rg.name }
adlı
terraform.tfvars
bir dosya oluşturun ve aşağıdaki kodu ekleyin:aks_service_principal_app_id = "<service_principal_app_id>" aks_service_principal_client_secret = "<service_principal_password>"
Terraform'u başlatma ve yürütme planı oluşturma
Terraform'ı başlatın ve komutunu kullanarak
terraform init
Azure kaynaklarınızı yönetmek için gereken Azure modüllerini indirin.terraform init
komutunu kullanarak
terraform plan
bir Terraform yürütme planı oluşturun.terraform plan -out main.tfplan
komutu
terraform plan
bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar.İsteğe bağlı
-out
parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin-out
kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.Yürütme planlarını ve güvenliği kalıcı hale getirmek hakkında daha fazla bilgi edinmek için güvenlik uyarılarına bakın.
Komutunu kullanarak
terraform apply
Terraform yürütme planını uygulayın.terraform apply main.tfplan
Yukarıdaki komut,
terraform apply
daha önce komutunu çalıştırdığınızıterraform plan -out main.tfplan
varsayar. parametresi için-out
farklı bir dosya adı belirttiyseniz, çağrısındaterraform apply
aynı dosya adını kullanın. parametresini-out
kullanmadıysanız, parametresiz olarak çağırınterraform apply
.
Sonuçları doğrulama
Aşağıdaki
echo
komutu kullanarak kaynak grubu adını alın.echo "$(terraform output resource_group_name)"
Azure portala gidin.
Azure hizmetleri'nin altında Kaynak grupları'nı seçin ve bu tanıtımda oluşturulan aşağıdaki kaynakları görmek için yeni kaynak grubunuzu bulun:
- Çözüm: Tanıtım varsayılan olarak bu çözümü ContainerInsights olarak adlandırır. Portalda çözümün çalışma alanı adı parantez içinde gösterilir.
- Kubernetes hizmeti: Tanıtım varsayılan olarak bu hizmeti k8stest olarak adlandırmaktadır. (Yönetilen Kubernetes kümesi AKS/Azure Kubernetes Service olarak da bilinir.)
- Log Analytics Çalışma Alanı: Varsayılan olarak, tanıtım bu çalışma alanını TestLogAnalyticsWorkspaceName ön ekiyle ve ardından rastgele bir sayıyla adlandırıyor.
Terraform durumundan Kubernetes yapılandırmasını alın ve aşağıdaki
echo
komutu kullanarak kubectl'nin okuyabileceği bir dosyada depolayın.echo "$(terraform output kube_config)" > ./azurek8s
Aşağıdaki
cat
komutu kullanarak önceki komutun ASCII EOT karakteri eklemediğini doğrulayın.cat ./azurek8s
Başında ve
EOT
sonunda görüyorsanız<< EOT
, bu karakterleri dosyadan kaldırın. Aksi takdirde şu hata iletisini alabilirsiniz:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
.Kubectl'nin aşağıdaki
export
komutu kullanarak doğru yapılandırmayı alması için bir ortam değişkeni ayarlayın.export KUBECONFIG=./azurek8s
komutunu kullanarak
kubectl get nodes
kümenin durumunu doğrulayın.kubectl get nodes
Azure Linux Container Host kümesi oluşturulduğunda izleme, hem küme düğümleri hem de podlar için sistem durumu ölçümlerini yakalamak üzere etkinleştirildi. 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.
Terraform yürütme planını uyguladığınızda birkaç anahtar değeri çıktısı alınmıştır. Örneğin, konak adresi, Azure Linux Container Host kümesi kullanıcı adı ve Azure Linux Container Host küme parolası çıkıştır.
Tüm çıkış değerlerini görüntülemek için komutunu çalıştırın
terraform output
. Belirli bir çıkış değerini görüntülemek için komutunu çalıştırınecho "$(terraform output <output_value_name>)"
.
Kaynakları temizleme
AKS kaynaklarını silme
Terraform ile oluşturulan kaynaklara artık ihtiyacınız kalmadığında, aşağıdaki adımları kullanarak bunları kaldırabilirsiniz.
terraform plan
komutunu çalıştırın ve bayrağınıdestroy
belirtin.terraform plan -destroy -out main.destroy.tfplan
komutunu kullanarak
terraform apply
yürütme planını kaldırın.terraform apply main.destroy.tfplan
Hizmet sorumlusunu silme
Dikkat
Bu tanıtımda kullandığınız hizmet sorumlusunu yalnızca başka bir şey için kullanmıyorsanız silin.
komutunu kullanarak
az ad sp list
hizmet sorumlusunun nesne kimliğini almaaz ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
komutunu kullanarak hizmet sorumlusunu
az ad sp delete
silin.az ad sp delete --id <service_principal_object_id>
Azure'da Terraform sorunlarını giderme
Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme.
Sonraki adımlar
Bu hızlı başlangıçta bir Azure Linux Container Host kümesi dağıttınız. Azure Linux Container Host hakkında daha fazla bilgi edinmek ve eksiksiz bir küme dağıtım ve yönetim örneğine gitmek için Azure Linux Container Host öğreticisine geçin.