Aracılığıyla paylaş


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

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.

  1. Cloud Shell'i https://shell.azure.com tarayıcınızda açmak için adresine gidin.

  2. 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

  1. Örnek Terraform kodunu test etmek ve geçerli dizin yapmak için bir dizin oluşturun.

  2. 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 {}
        }
    
  3. 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.

  4. 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"
        }
    
  5. 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
        }
    
  6. 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

  1. Terraform'ı başlatın ve komutunu kullanarak terraform init Azure kaynaklarınızı yönetmek için gereken Azure modüllerini indirin.

    terraform init
    
  2. 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.

  3. 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.tfplanvarsayar. parametresi için -out farklı bir dosya adı belirttiyseniz, çağrısında terraform applyaynı dosya adını kullanın. parametresini -out kullanmadıysanız, parametresiz olarak çağırın terraform apply .

Sonuçları doğrulama

  1. Aşağıdaki echo komutu kullanarak kaynak grubu adını alın.

    echo "$(terraform output resource_group_name)"
    
  2. Azure portala gidin.

  3. 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.
  4. 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
    
  5. 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.

  6. 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
    
  7. 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ın echo "$(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.

  1. terraform plan komutunu çalıştırın ve bayrağını destroy belirtin.

    terraform plan -destroy -out main.destroy.tfplan
    
  2. 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.

  1. komutunu kullanarak az ad sp list hizmet sorumlusunun nesne kimliğini alma

    az ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
    
  2. 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.