Kurz: Vytvoření clusteru Kubernetes pomocí služby Azure Kubernetes Service pomocí TerraformuTutorial: Create a Kubernetes cluster with Azure Kubernetes Service using Terraform

Azure Kubernetes Service (AKS) spravuje hostované prostředí Kubernetes.Azure Kubernetes Service (AKS) manages your hosted Kubernetes environment. AKS umožňuje nasazovat a spravovat aplikace s využitím kontejnerů bez odbornosti pro orchestraci kontejnerů.AKS allows you to deploy and manage containerized applications without container orchestration expertise. AKS také umožňuje provádět mnoho běžných operací údržby bez nutnosti převádět aplikaci do offline režimu.AKS also enables you to do many common maintenance operations without taking your app offline. Mezi tyto operace patří zřizování, upgradování a škálování prostředků na vyžádání.These operations include provisioning, upgrading, and scaling resources on demand.

V tomto kurzu se naučíte, jak provádět následující úlohy:In this tutorial, you learn how to do the following tasks:

  • Použití HCL (Jazyk společnosti HashiCorp) k definování clusteru KubernetesUse HCL (HashiCorp Language) to define a Kubernetes cluster
  • Použití Terraformu a AKS k vytvoření clusteru KubernetesUse Terraform and AKS to create a Kubernetes cluster
  • Použití nástroje kubectl k otestování dostupnosti clusteru KubernetesUse the kubectl tool to test the availability of a Kubernetes cluster

PožadavkyPrerequisites

Vytvoření struktury adresářeCreate the directory structure

Prvním krokem je vytvoření adresáře s konfiguračními soubory Terraformu pro toto cvičení.The first step is to create the directory that holds your Terraform configuration files for the exercise.

  1. Přejděte na web Azure Portal.Browse to the Azure portal.

  2. Otevřete službu Azure Cloud Shell.Open Azure Cloud Shell. Pokud jste prostředí ještě nevybrali, vyberte prostředí Bash.If you didn't select an environment previously, select Bash as your environment.

    Příkazový řádek Cloud Shellu

  3. Přejděte do adresáře clouddrive.Change directories to the clouddrive directory.

    cd clouddrive
    
  4. Vytvořte adresář s názvem terraform-aks-k8s.Create a directory named terraform-aks-k8s.

    mkdir terraform-aks-k8s
    
  5. Přejděte do nového adresáře:Change directories to the new directory:

    cd terraform-aks-k8s
    

Deklarování zprostředkovatele AzureDeclare the Azure provider

Vytvořte konfigurační soubor Terraformu, který deklaruje zprostředkovatele Azure.Create the Terraform configuration file that declares the Azure provider.

  1. Ve službě Cloud Shell vytvořte soubor s názvem main.tf.In Cloud Shell, create a file named main.tf.

    code main.tf
    
  2. Do editoru vložte následující kód:Paste the following code into the editor:

    provider "azurerm" {
        version = "~>1.5"
    }
    
    terraform {
        backend "azurerm" {}
    }
    
  3. Uložte soubor ( <ctrl > ) a ukončete editor ( <CTRL > Q).Save the file (<Ctrl>S) and exit the editor (<Ctrl>Q).

Definování clusteru KubernetesDefine a Kubernetes cluster

Vytvořte konfigurační soubor Terraformu, který deklaruje prostředky pro cluster Kubernetes.Create the Terraform configuration file that declares the resources for the Kubernetes cluster.

  1. Ve službě Cloud Shell vytvořte soubor s názvem k8s.tf.In Cloud Shell, create a file named k8s.tf.

    code k8s.tf
    
  2. Do editoru vložte následující kód:Paste the following code into the editor:

    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_DS1_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
            }
        }
    
        tags = {
            Environment = "Development"
        }
    }
    

    Předchozí kód nastaví název clusteru, umístění a název skupiny prostředků.The preceding code sets the name of the cluster, location, and the resource group name. Je také nastavená předpona pro plně kvalifikovaný název domény (FQDN).The prefix for the fully qualified domain name (FQDN) is also set. Plně kvalifikovaný název domény se používá pro přístup ke clusteru.The FQDN is used to access the cluster.

    Záznam linux_profile umožňuje nakonfigurovat nastavení, která umožňují přihlašovat se k pracovním uzlům pomocí SSH.The linux_profile record allows you to configure the settings that enable signing into the worker nodes using SSH.

    Se službou AKS platíte jenom za pracovní uzly.With AKS, you pay only for the worker nodes. Záznam default_node_pool nakonfiguruje podrobnosti pro tyto pracovní uzly.The default_node_pool record configures the details for these worker nodes. default_node_pool record obsahuje počet pracovních uzlů, které se mají vytvořit, a typ pracovních uzlů.The default_node_pool record includes the number of worker nodes to create and the type of worker nodes. Pokud potřebujete v budoucnu horizontální navýšení nebo snížení kapacity clusteru, upravte hodnotu count v tomto záznamu.If you need to scale up or scale down the cluster in the future, you modify the count value in this record.

  3. Uložte soubor ( <ctrl > ) a ukončete editor ( <CTRL > Q).Save the file (<Ctrl>S) and exit the editor (<Ctrl>Q).

Deklarování proměnnýchDeclare the variables

  1. Ve službě Cloud Shell vytvořte soubor s názvem variables.tf.In Cloud Shell, create a file named variables.tf.

    code variables.tf
    
  2. Do editoru vložte následující kód:Paste the following code into the editor:

    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"
    }
    
  3. Uložte soubor ( <ctrl > ) a ukončete editor ( <CTRL > Q).Save the file (<Ctrl>S) and exit the editor (<Ctrl>Q).

Vytvoření výstupního souboru TerraformuCreate a Terraform output file

Výstupy Terraformu vám umožňují definovat hodnoty, které se uživateli zvýrazní, když Terraform použije plán a bude možné se na něj dotázat příkazem terraform output.Terraform outputs allow you to define values that will be highlighted to the user when Terraform applies a plan, and can be queried using the terraform output command. V této části vytvoříte výstupní soubor, který pomocí kubectl umožňuje přístup ke clusteru.In this section, you create an output file that allows access to the cluster with kubectl.

  1. Ve službě Cloud Shell vytvořte soubor s názvem output.tf.In Cloud Shell, create a file named output.tf.

    code output.tf
    
  2. Do editoru vložte následující kód:Paste the following code into the editor:

    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
    }
    
    output "host" {
        value = azurerm_kubernetes_cluster.k8s.kube_config.0.host
    }
    
  3. Uložte soubor ( <ctrl > ) a ukončete editor ( <CTRL > Q).Save the file (<Ctrl>S) and exit the editor (<Ctrl>Q).

Nastavení služby Azure Storage k uložení stavu TerraformuSet up Azure storage to store Terraform state

Terraform sleduje stav místně prostřednictvím souboru terraform.tfstate.Terraform tracks state locally via the terraform.tfstate file. Tento model funguje dobře v prostředí s jednou osobou.This pattern works well in a single-person environment. V prostředí s více osobami se ke sledování stavu používá Azure Storage .In a multi-person environment, Azure storage is used to track state.

V této části vidíte, jak provádět následující úlohy:In this section, you see how to do the following tasks:

  • Načíst informace o účtu úložiště (název účtu a klíč účtu)Retrieve storage account information (account name and account key)
  • Vytvořte kontejner úložiště, do kterého se budou ukládat informace o stavu Terraformu.Create a storage container into which Terraform state information will be stored.
  1. Na webu Azure Portal vyberte v levé nabídce Všechny služby.In the Azure portal, select All services in the left menu.

  2. Vyberte Účty úložiště.Select Storage accounts.

  3. Na kartě Účty úložiště vyberte název účtu úložiště, do kterého má Terraform ukládat stav.On the Storage accounts tab, select the name of the storage account into which Terraform is to store state. Můžete například použít účet úložiště, který se vytvoří při prvním otevření služby Cloud Shell.For example, you can use the storage account created when you opened Cloud Shell the first time. Název účtu úložiště vytvořeného službou Cloud Shell obvykle začíná na cs a následuje ho řetězec náhodných čísel a písmen.The storage account name created by Cloud Shell typically starts with cs followed by a random string of numbers and letters. Poznamenejte si vybraný účet úložiště.Take note of the storage account you select. Tato hodnota je potřeba později.This value is needed later.

  4. Na kartě účtu úložiště vyberte Přístupové klíče.On the storage account tab, select Access keys.

    Nabídka účtu úložiště

  5. Poznamenejte si hodnotu klíče klíč1.Make note of the key1 key value. (Výběr ikony napravo od klíče zkopíruje příslušnou hodnotu do schránky.)(Selecting the icon to the right of the key copies the value to the clipboard.)

    Přístupové klíče účtu úložiště

  6. V Cloud Shell vytvořte kontejner v účtu úložiště Azure.In Cloud Shell, create a container in your Azure storage account. Zástupné symboly nahraďte odpovídajícími hodnotami pro vaše prostředí.Replace the placeholders with appropriate values for your environment.

    az storage container create -n tfstate --account-name <YourAzureStorageAccountName> --account-key <YourAzureStorageAccountKey>
    

Vytvoření clusteru KubernetesCreate the Kubernetes cluster

V této části zjistíte, jak použít příkaz terraform init k vytvoření prostředků definovaných konfiguračními soubory, které jste vytvořili v předchozích částech.In this section, you see how to use the terraform init command to create the resources defined the configuration files you created in the previous sections.

  1. V Cloud Shell inicializujte Terraformu.In Cloud Shell, initialize Terraform. Zástupné symboly nahraďte odpovídajícími hodnotami pro vaše prostředí.Replace the placeholders with appropriate values for your environment.

    terraform init -backend-config="storage_account_name=<YourAzureStorageAccountName>" -backend-config="container_name=tfstate" -backend-config="access_key=<YourStorageAccountAccessKey>" -backend-config="key=codelab.microsoft.tfstate" 
    

    Příkaz terraform init zobrazuje úspěšnost inicializace modulu plug-in back-end a poskytovatele:The terraform init command displays the success of initializing the backend and provider plug-in:

    Příklad výsledků příkazu „terraform init“

  2. Exportujte své přihlašovací údaje instančního objektu.Export your service principal credentials. Zástupné symboly nahraďte odpovídajícími hodnotami z objektu služby.Replace the placeholders with appropriate values from your service principal.

    export TF_VAR_client_id=<service-principal-appid>
    export TF_VAR_client_secret=<service-principal-password>
    
  3. Spuštěním příkazu terraform plan vytvořte plán Terraformu, který definuje prvky infrastruktury.Run the terraform plan command to create the Terraform plan that defines the infrastructure elements.

    terraform plan -out out.plan
    

    Příkaz terraform plan zobrazí prostředky, které se po spuštění příkazu terraform apply vytvoří:The terraform plan command displays the resources that will be created when you run the terraform apply command:

    Příklad výsledků příkazu „terraform plan“

  4. Spuštěním příkazu terraform apply použijte plán a vytvořte cluster Kubernetes.Run the terraform apply command to apply the plan to create the Kubernetes cluster. Proces vytvoření clusteru Kubernetes může trvat několik minut, což vede k vypršení časového limitu relace Cloud Shell. Pokud Cloud Shell časový limit relace, můžete postupovat podle kroků v části obnovení z Cloud Shell časového limitu, který vám umožní dokončit tento kurz.The process to create a Kubernetes cluster can take several minutes, resulting in the Cloud Shell session timing out. If the Cloud Shell session times out, you can follow the steps in the section "Recover from a Cloud Shell timeout" to enable you to complete the tutorial.

    terraform apply out.plan
    

    Příkaz terraform apply zobrazí výsledky vytvoření prostředků definovaných v konfiguračních souborech:The terraform apply command displays the results of creating the resources defined in your configuration files:

    Příklad výsledků příkazu „terraform apply“

  5. V Azure Portal v nabídce vlevo vyberte všechny prostředky , aby se zobrazily prostředky vytvořené pro nový cluster Kubernetes.In the Azure portal, select All resources in the left menu to see the resources created for your new Kubernetes cluster.

    Všechny prostředky v Azure Portal

Zotavení z vypršení relace služby Cloud ShellRecover from a Cloud Shell timeout

Pokud Cloud Shell vyprší časový limit relace, můžete provést následující kroky k obnovení:If the Cloud Shell session times out, you can do the following steps to recover:

  1. Spusťte relaci služby Cloud Shell.Start a Cloud Shell session.

  2. Přejděte do adresáře, který obsahuje konfigurační soubory Terraformu.Change to the directory containing your Terraform configuration files.

    cd /clouddrive/terraform-aks-k8s
    
  3. Spusťte následující příkaz:Run the following command:

    export KUBECONFIG=./azurek8s
    

Test clusteru KubernetesTest the Kubernetes cluster

Nově vytvořený cluster můžete pomocí nástrojů Kubernetes ověřit.The Kubernetes tools can be used to verify the newly created cluster.

  1. Získejte konfiguraci Kubernetes ze stavu Terraformu a uložte ji do souboru, který dokáže nástroj kubectl přečíst.Get the Kubernetes configuration from the Terraform state and store it in a file that kubectl can read.

    echo "$(terraform output kube_config)" > ./azurek8s
    
  2. Nastavte proměnnou prostředí, aby kubectl převzal správnou konfiguraci.Set an environment variable so that kubectl picks up the correct config.

    export KUBECONFIG=./azurek8s
    
  3. Ověřte stav clusteru.Verify the health of the cluster.

    kubectl get nodes
    

    Měly by se zobrazit podrobnosti o pracovních uzlech a všechny uzly by měli být ve stavu Ready (Připravené), jak je znázorněno na následujícím obrázku:You should see the details of your worker nodes, and they should all have a status Ready, as shown in the following image:

    Nástroj kubectl vám umožňuje ověřit stav clusteru Kubernetes.

Monitorování stavu a protokolůMonitor health and logs

Při vytvoření clusteru AKS se povolilo monitorování za účelem zachycování metrik stavu podů i uzlů clusteru.When the AKS cluster was created, monitoring was enabled to capture health metrics for both the cluster nodes and pods. Tyto metriky stavu jsou k dispozici na webu Azure Portal.These health metrics are available in the Azure portal. Další informace o monitorování stavu kontejnerů najdete v tématu monitorování stavu služby Azure Kubernetes.For more information on container health monitoring, see Monitor Azure Kubernetes Service health.

Další krokyNext steps