Sdílet prostřednictvím


Rychlý start: Nasazení hostitele kontejneru Azure s Linuxem pro cluster AKS pomocí Terraformu

Začínáme s hostitelem kontejneru Azure Linux pomocí Terraformu k nasazení clusteru Azure Linux Container Host. Po instalaci požadavků implementujete kód Terraformu, inicializujete Terraform a vytvoříte a použijete plán provádění Terraformu.

Terraform umožňuje definici, verzi Preview a nasazení cloudové infrastruktury. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění, který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.

Poznámka:

Ukázkový kód v tomto článku se nachází v úložišti Microsoft Terraform Na GitHubu.

Požadavky

Vytvoření páru klíčů SSH

Pro přístup k uzlům AKS se připojíte pomocí páru klíčů SSH (veřejný a privátní), který vygenerujete pomocí ssh-keygen příkazu. Ve výchozím nastavení jsou tyto soubory vytvořeny v adresáři ~/.ssh . Spuštěním ssh-keygen příkazu přepíšete všechny páry klíčů SSH se stejným názvem, který už v daném umístění existuje.

  1. https://shell.azure.com V prohlížeči otevřete Cloud Shell.

  2. Spusťte příkaz ssh-keygen. Následující příklad vytvoří pár klíčů SSH pomocí šifrování RSA a bitové délky 4096:

    ssh-keygen -t rsa -b 4096
    

Další informace o vytváření klíčů SSH najdete v tématu Vytvoření a správa klíčů SSH pro ověřování v Azure.

Implementace kódu Terraformu

  1. Vytvořte adresář, ve kterém otestujete ukázkový kód Terraformu a nastavíte ho jako aktuální adresář.

  2. Vytvořte soubor s názvem providers.tf a vložte následující kód:

        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. Vytvořte soubor s názvem main.tf a vložte následující kód:

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

    Podobně můžete v azurerm_kubernetes_cluster_node_pool zadat Azure Linuxos_sku.

  4. Vytvořte soubor s názvem variables.tf a vložte následující kód:

        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. Vytvořte soubor s názvem outputs.tf a vložte následující kód:

        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. Vytvořte soubor s názvem terraform.tfvars a vložte následující kód:

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

Inicializace Terraformu a vytvoření plánu provádění

  1. Inicializace Terraformu a stažení modulů Azure potřebných ke správě prostředků Azure pomocí terraform init příkazu

    terraform init
    
  2. Pomocí příkazu vytvořte plán provádění Terraformu terraform plan .

    terraform plan -out main.tfplan
    

    Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.

    Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že plán, který jste zkontrolovali, je přesně to, co se použije.

    Další informace o zachování plánů provádění a zabezpečení najdete v upozorněních zabezpečení.

  3. Použijte plán provádění Terraformu terraform apply pomocí příkazu.

    terraform apply main.tfplan
    

    Výše terraform apply uvedený příkaz předpokládá, že jste dříve spustili terraform plan -out main.tfplan. Pokud jste pro -out parametr zadali jiný název souboru, použijte stejný název souboru při volání terraform apply. Pokud jste parametr nepoužíli -out , zavolejte terraform apply bez parametrů.

Ověření výsledků

  1. Pomocí následujícího echo příkazu získejte název skupiny prostředků.

    echo "$(terraform output resource_group_name)"
    
  2. Přejděte na web Azure Portal.

  3. V části Služby Azure vyberte skupiny prostředků a vyhledejte novou skupinu prostředků, abyste viděli následující prostředky vytvořené v této ukázce:

    • Řešení: Ve výchozím nastavení se ukázkové názvy tohoto řešení ContainerInsights. Portál zobrazuje název pracovního prostoru řešení v závorkách.
    • Služba Kubernetes: Ve výchozím nastavení tato ukázka pojmenuje tuto službu k8stest. (Spravovaný cluster Kubernetes se také označuje jako AKS/Azure Kubernetes Service.)
    • Pracovní prostor služby Log Analytics: Ve výchozím nastavení se tento pracovní prostor jmenuje ukázka s předponou TestLogAnalyticsWorkspaceName následovanou náhodným číslem.
  4. Získejte konfiguraci Kubernetes ze stavu Terraformu a uložte ji do souboru, který může kubectl přečíst pomocí následujícího echo příkazu.

    echo "$(terraform output kube_config)" > ./azurek8s
    
  5. Pomocí následujícího cat příkazu ověřte, že předchozí příkaz nepřidal znak ASCII EOT.

    cat ./azurek8s
    

    Pokud se zobrazí << EOT na začátku a EOT na konci, odeberte tyto znaky ze souboru. V opačném případě se může zobrazit následující chybová zpráva: error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context.

  6. Nastavte proměnnou prostředí tak, aby kubectl zachytá správnou konfiguraci pomocí následujícího export příkazu.

    export KUBECONFIG=./azurek8s
    
  7. Pomocí příkazu ověřte stav clusteru kubectl get nodes .

    kubectl get nodes
    

    Po vytvoření clusteru hostitelů kontejnerů Azure s Linuxem bylo monitorování povoleno zachytávat metriky stavu pro uzly clusteru i pody. Tyto metriky stavu jsou k dispozici na webu Azure Portal. Další informace o monitorování stavu clusteru najdete v tématu Monitorování stavu služby Azure Kubernetes Service.

    Při použití plánu provádění Terraformu bylo výstupem několik hodnot klíčů. Například adresa hostitele, uživatelské jméno clusteru Azure Linux Container Host a heslo clusteru Azure Linux Container Host jsou výstupem.

    Pokud chcete zobrazit všechny výstupní hodnoty, spusťte terraform outputpříkaz . Pokud chcete zobrazit konkrétní výstupní hodnotu, spusťte echo "$(terraform output <output_value_name>)"příkaz .

Vyčištění prostředků

Odstranění prostředků AKS

Pokud už prostředky vytvořené pomocí Terraformu nepotřebujete, můžete je odebrat pomocí následujícího postupu.

  1. terraform plan Spusťte příkaz a zadejte destroy příznak.

    terraform plan -destroy -out main.destroy.tfplan
    
  2. Pomocí příkazu odeberte plán terraform apply provádění.

    terraform apply main.destroy.tfplan
    

Odstranění instančního objektu

Upozornění

Odstraňte instanční objekt, který jste použili v této ukázce, jenom pokud ho nepoužíváte pro nic jiného.

  1. Získání ID objektu instančního objektu az ad sp list pomocí příkazu

    az ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
    
  2. Pomocí příkazu odstraňte instanční objekt az ad sp delete .

    az ad sp delete --id <service_principal_object_id>
    

Řešení potíží s Terraformem v Azure

Řešení běžných problémů při používání Terraformu v Azure

Další kroky

V tomto rychlém startu jste nasadili cluster Azure Linux Container Host. Další informace o hostiteli kontejnerů Azure Linux a projděte si kompletní příklad nasazení a správy clusteru, pokračujte kurzem azure Linux Container Host.