Rychlý start: Vytvoření clusteru Azure Kubernetes Service (AKS) s Windows pomocí Terraformu

V tomto průvodci rychlým startem vytvoříte cluster Azure Kubernetes s poolem uzlů Windows s pomocí Terraformu. Azure Kubernetes Service (AKS) je spravovaná služba orchestrace kontejnerů, kterou poskytuje Azure. Zjednodušuje nasazení, škálování a provoz kontejnerizovaných aplikací. Služba používá Kubernetes, opensourcový systém pro automatizaci nasazení, škálování a správy kontejnerizovaných aplikací. Fond uzlů Windows umožňuje spouštět kontejnery Windows v clusteru Kubernetes.

Terraform umožňuje definovat, prohlížet a nasazovat cloudovou infrastrukturu. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu , například Azure, 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.

  • Vygenerujte náhodný název skupiny prostředků.
  • Vytvořte skupinu prostředků Azure.
  • Vytvořte virtuální síť Azure.
  • Vytvořte cluster Azure Kubernetes.
  • Vytvořte fond uzlů clusteru Azure Kubernetes.

Požadavky

Implementace kódu Terraformu

  1. Vytvořte adresář, ve kterém chcete otestovat a spustit ukázkový kód Terraformu a nastavit 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_pet" "azurerm_kubernetes_cluster_name" {
      prefix = "cluster"
    }
    
    resource "random_pet" "azurerm_kubernetes_cluster_dns_prefix" {
      prefix = "dns"
    }
    
    resource "random_string" "azurerm_kubernetes_cluster_node_pool" {
      length  = 6
      special = false
      numeric = false
      lower   = true
      upper   = false
    }
    
    resource "azurerm_virtual_network" "vnet" {
      name                = "myvnet"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      address_space       = ["10.1.0.0/16"]
    
      subnet {
        name           = "subnet1"
        address_prefix = "10.1.1.0/24"
      }
    }
    
    resource "azurerm_kubernetes_cluster" "aks" {
      name                = random_pet.azurerm_kubernetes_cluster_name.id
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      dns_prefix          = random_pet.azurerm_kubernetes_cluster_dns_prefix.id
    
      identity {
        type = "SystemAssigned"
      }
    
      default_node_pool {
        name           = "agentpool"
        vm_size        = "Standard_D2_v2"
        node_count     = var.node_count_linux
        vnet_subnet_id = element(tolist(azurerm_virtual_network.vnet.subnet), 0).id
      }
    
      windows_profile {
        admin_username = var.admin_username
        admin_password = var.admin_password
      }
    
      network_profile {
        network_plugin    = "azure"
        load_balancer_sku = "standard"
      }
    }
    
    resource "azurerm_kubernetes_cluster_node_pool" "win" {
      name                  = random_string.azurerm_kubernetes_cluster_node_pool.result
      kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
      vm_size               = "Standard_D4s_v3"
      node_count            = var.node_count_windows
      os_type               = "Windows"
    }
    
  4. Vytvořte soubor s názvem variables.tf a vložte následující kód.

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      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 "node_count_linux" {
      type        = number
      description = "The initial quantity of Linux nodes for the node pool."
      default     = 1
    }
    
    variable "node_count_windows" {
      type        = number
      description = "The initial quantity of Windows nodes for the node pool."
      default     = 1
    }
    
    variable "admin_username" {
      type        = string
      description = "The admin username for the Windows node pool."
      default     = "azureuser"
    }
    
    variable "admin_password" {
      type        = string
      description = "The admin password for the Windows node pool."
      default     = "Passw0rd1234Us!"
    }
    
  5. Vytvořte soubor s názvem outputs.tf a vložte následující kód.

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "kubernetes_cluster_name" {
      value = azurerm_kubernetes_cluster.aks.name
    }
    
    output "kubernetes_cluster_dns_prefix" {
      value = azurerm_kubernetes_cluster.aks.dns_prefix
    }
    
    output "kubernetes_cluster_node_pool_name" {
      value = azurerm_kubernetes_cluster_node_pool.win.name
    }
    
    output "kubernetes_cluster_kube_config_raw" {
      value = azurerm_kubernetes_cluster.aks.kube_config_raw
      sensitive = true
    }
    

Inicializujte Terraform

Spusťte terraform init a inicializujte nasazení Terraformu. Tento příkaz stáhne poskytovatele Azure potřebného ke správě prostředků Azure.

terraform init -upgrade

klíčové body:

  • Parametr -upgrade aktualizuje potřebné pluginy poskytovatele na nejnovější verzi, která odpovídá verzním omezením konfigurace.

Vytvoření plánu provádění Terraformu

Spusťte terraform plan pro vytvoření plánu provedení.

terraform plan -out main.tfplan

klíčové body:

  • 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 vámi zkontrolovaný plán je přesně tím, co bude aplikován.

Implementujte plán Terraformu

Spusťte terraform apply, abyste aplikovali plán provádění na vaši cloudovou infrastrukturu.

terraform apply main.tfplan

klíčové body:

  • terraform apply Ukázkový 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ů

Spusťte kubectl get pro zobrazení uzlů clusteru.

kubectl get node -o wide

Vyčistěte zdroje

Pokud už prostředky vytvořené přes Terraform nepotřebujete, proveďte následující kroky:

  1. Spusťte terraform plan a zadejte parametr destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    klíčové body:

    • 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 vámi zkontrolovaný plán je přesně tím, co bude aplikován.
  2. Spusťte terraform apply pro aplikaci prováděcího plánu.

    terraform apply main.destroy.tfplan
    

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

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

Další kroky