Megosztás a következőn keresztül:


Rövid útmutató: Azure Linux Container Host üzembe helyezése AKS-fürthöz a Terraform használatával

Ismerkedés az Azure Linux Container Hosttal a Terraform használatával egy Azure Linux Container Host-fürt üzembe helyezéséhez. Az előfeltételek telepítése után implementálja a Terraform-kódot, inicializálja a Terraformot, és létrehoz és alkalmaz egy Terraform végrehajtási tervet.

A Terraform lehetővé teszi a felhőinfrastruktúra definícióját, előzetes verzióját és üzembe helyezését. A Terraform használatával konfigurációs fájlokat hozhat létre a HCL szintaxisával. A HCL szintaxissal megadhatja a felhőszolgáltatót és a felhőinfrastruktúra elemeit. A konfigurációs fájlok létrehozása után létrehoz egy végrehajtási tervet, amely lehetővé teszi az infrastruktúra változásainak előzetes megtekintését az üzembe helyezés előtt. A módosítások ellenőrzése után alkalmazza a végrehajtási tervet az infrastruktúra üzembe helyezésére.

Feljegyzés

A cikkben szereplő példakód a Microsoft Terraform GitHub adattárban található.

Előfeltételek

SSH-kulcs létrehozása

Az AKS-csomópontok eléréséhez egy SSH-kulcspár (nyilvános és privát) használatával csatlakozik, amelyet a ssh-keygen parancs használatával hoz létre. Alapértelmezés szerint ezek a fájlok a ~/.ssh könyvtárban jönnek létre. A ssh-keygen parancs futtatása felülír minden olyan SSH-kulcspárt, amelynek neve már létezik az adott helyen.

  1. Nyissa meg a https://shell.azure.com Cloud Shellt a böngészőben.

  2. Futtassa a következő parancsot: ssh-keygen. Az alábbi példa egy SSH-kulcspárt hoz létre RSA-titkosítással és egy 4096-os bithosszsal:

    ssh-keygen -t rsa -b 4096
    

További információ az SSH-kulcsok létrehozásáról: SSH-kulcsok létrehozása és kezelése az Azure-ban történő hitelesítéshez.

A Terraform-kód implementálása

  1. Hozzon létre egy könyvtárat, amelyben tesztelheti a Terraform-mintakódot, és az aktuális könyvtárá teheti.

  2. Hozzon létre egy elnevezett providers.tf fájlt, és szúrja be a következő kódot:

        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. Hozzon létre egy elnevezett main.tf fájlt, és szúrja be a következő kódot:

        # 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
          }
        }
    

    Hasonlóképpen megadhatja az Azure Linuxot os_sku azurerm_kubernetes_cluster_node_pool.

  4. Hozzon létre egy elnevezett variables.tf fájlt, és szúrja be a következő kódot:

        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. Hozzon létre egy elnevezett outputs.tf fájlt, és szúrja be a következő kódot:

        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. Hozzon létre egy elnevezett terraform.tfvars fájlt, és szúrja be a következő kódot:

        aks_service_principal_app_id = "<service_principal_app_id>"
        aks_service_principal_client_secret = "<service_principal_password>"
    

Terraform inicializálása és végrehajtási terv létrehozása

  1. Inicializálja a Terraformot, és töltse le a parancs használatával terraform init az Azure-erőforrások kezeléséhez szükséges Azure-modulokat.

    terraform init
    
  2. Hozzon létre egy Terraform végrehajtási tervet a terraform plan paranccsal.

    terraform plan -out main.tfplan
    

    A terraform plan parancs létrehoz egy végrehajtási tervet, de nem hajtja végre. Ehelyett meghatározza, hogy milyen műveletek szükségesek a konfigurációs fájlokban megadott konfiguráció létrehozásához. Ez a minta lehetővé teszi annak ellenőrzését, hogy a végrehajtási terv megfelel-e az elvárásainak, mielőtt módosítanák a tényleges erőforrásokat.

    Az opcionális -out paraméter lehetővé teszi a terv kimeneti fájljának megadását. -out A paraméter használatával biztosítható, hogy a vizsgált terv pontosan az alkalmazott legyen.

    A végrehajtási tervek és a biztonság megőrzéséről a biztonsági figyelmeztetésekben olvashat bővebben.

  3. Alkalmazza a Terraform végrehajtási tervét a terraform apply paranccsal.

    terraform apply main.tfplan
    

    A terraform apply fenti parancs feltételezi, hogy korábban futtatott terraform plan -out main.tfplan. Ha másik fájlnevet adott meg a -out paraméterhez, használja ugyanazt a fájlnevet a hívásban terraform apply. Ha nem használta a paramétert -out , hívjon terraform apply paraméterek nélkül.

Az eredmények ellenőrzése

  1. Kérje le az erőforráscsoport nevét az alábbi echo paranccsal.

    echo "$(terraform output resource_group_name)"
    
  2. Keresse fel az Azure Portalt.

  3. Az Azure-szolgáltatások alatt válassza az Erőforráscsoportok lehetőséget, és keresse meg az új erőforráscsoportot a bemutatóban létrehozott alábbi erőforrások megtekintéséhez:

    • Megoldás: Alapértelmezés szerint a bemutató ezt a megoldást ContainerInsightsnak nevezi. A portál zárójelben jeleníti meg a megoldás munkaterületének nevét.
    • Kubernetes szolgáltatás: Alapértelmezés szerint a bemutató ezt a szolgáltatást k8stestnek nevezi. (A felügyelt Kubernetes-fürtöket AKS/Azure Kubernetes Service-nek is nevezik.)
    • Log Analytics-munkaterület: Alapértelmezés szerint a bemutató ezt a munkaterületet a TestLogAnalyticsWorkspaceName előtaggal nevezi el, amelyet véletlenszerű szám követ.
  4. Kérje le a Kubernetes-konfigurációt a Terraform állapotából, és tárolja egy olyan fájlban, amelyet a Kubectl az alábbi echo paranccsal tud olvasni.

    echo "$(terraform output kube_config)" > ./azurek8s
    
  5. Ellenőrizze, hogy az előző parancs nem adott hozzá ASCII EOT-karaktert az alábbi cat paranccsal.

    cat ./azurek8s
    

    Ha az elején és EOT végén látható<< EOT, távolítsa el ezeket a karaktereket a fájlból. Ellenkező esetben a következő hibaüzenet jelenhet meg: error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context.

  6. Állítson be egy környezeti változót, hogy a kubectl a következő export paranccsal vegye fel a megfelelő konfigurációt.

    export KUBECONFIG=./azurek8s
    
  7. A parancs használatával kubectl get nodes ellenőrizze a fürt állapotát.

    kubectl get nodes
    

    Az Azure Linux Container Host-fürt létrehozásakor a figyelés lehetővé tette a fürtcsomópontok és podok állapotmetrikáinak rögzítését. Ezek az állapotmetrikák elérhetők az Azure Portalon. A tároló állapotának monitorozásával kapcsolatos további információ az Azure Kubernetes Service állapotmonitorozásáról szóló témakörben érhető el.

    A Terraform végrehajtási tervének alkalmazásakor több fő érték is ki lett kapcsolva. A gazdacím, az Azure Linux Container Host-fürt felhasználóneve és az Azure Linux Container Host-fürt jelszava például kimenet.

    Az összes kimeneti érték megtekintéséhez futtassa a parancsot terraform output. Egy adott kimeneti érték megtekintéséhez futtassa a következőt echo "$(terraform output <output_value_name>)": .

Az erőforrások eltávolítása

AKS-erőforrások törlése

Ha már nincs szüksége a Terraformmal létrehozott erőforrásokra, az alábbi lépések végrehajtásával eltávolíthatja őket.

  1. Futtassa a terraform plan parancsot, és adja meg a jelölőt destroy .

    terraform plan -destroy -out main.destroy.tfplan
    
  2. Távolítsa el a végrehajtási tervet a terraform apply paranccsal.

    terraform apply main.destroy.tfplan
    

Szolgáltatásnév törlése

Figyelemfelhívás

A bemutatóban használt szolgáltatásnevet csak akkor törölje, ha máshoz nem használja.

  1. A szolgáltatásnév objektumazonosítójának lekérése a az ad sp list parancs használatával

    az ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
    
  2. Törölje a szolgáltatásnevet a az ad sp delete paranccsal.

    az ad sp delete --id <service_principal_object_id>
    

A Terraform hibaelhárítása az Azure-ban

A Terraform Azure-beli használatakor felmerülő gyakori problémák elhárítása.

Következő lépések

Ebben a rövid útmutatóban üzembe helyezett egy Azure Linux Container Host-fürtöt. Ha többet szeretne megtudni az Azure Linux Container Hostról, és végig szeretne járni egy teljes fürttelepítési és felügyeleti példán, folytassa az Azure Linux Container Host oktatóanyagával.