Vytvoření clusteru Kubernetes s Azure Kubernetes Service pomocí Terraformu
Azure Kubernetes Service (AKS) spravuje hostované prostředí Kubernetes. AKS umožňuje nasazovat a spravovat kontejnerizované aplikace bez znalosti orchestrace kontejnerů. AKS také umožňuje provádět mnoho běžných operací údržby, aniž by bylo třeba aplikaci offline. Mezi tyto operace patří zřizování, upgrade a škálování prostředků na vyžádání.
V tomto článku získáte informace o těchto tématech:
- Použití HCL (Jazyk společnosti HashiCorp) k definování clusteru Kubernetes
- Použití Terraformu a AKS k vytvoření clusteru Kubernetes
- Použití nástroje kubectl k otestování dostupnosti clusteru Kubernetes
1. Konfigurace prostředí
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
Konfigurace Terraformu: Pokud jste to ještě neudělali, nakonfigurujte Terraform pomocí jedné z následujících možností:
- Objekt služby Azure:Pokud nemáte objekt služby, vytvořte objekt služby. Poznamenejte si hodnoty
appIdpro ,displayName, apasswordtenant.
2. Vytvoření páru klíčů SSH
Ukázka v tomto článku používá pár klíčů SSH k ověření uživatele ve virtuálním počítače.
Vygenerujte pár klíčů SSH pomocí jednoho z následujících článků v závislosti na vašem prostředí:
3. Vytvoření adresářové struktury
Prvním krokem je vytvoření adresáře s konfiguračními soubory Terraformu pro toto cvičení.
Otevřete příkazový řádek, ze kterého můžete spouštět příkazy Terraformu.
Vytvořte adresář s názvem
terraform-aks-k8s.Přejděte do nového adresáře:
4. Deklarace poskytovatele Azure
Konfigurační soubor Terraformu začíná specifikací poskytovatele. Při použití Azure zadáte v bloku poskytovatele Azure (azurerm).
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "<resource_group_name>"
location = "<location>"
}
# Your Terraform code goes here...
Klíčové body:
- I když
versionje atribut volitelný, HashiCorp doporučuje připnutí na danou verzi poskytovatele. - Pokud používáte poskytovatele Azure 1.x,
featuresblok není povolený. - Pokud používáte poskytovatele Azure 2.x,
featuresje blok povinný. - Deklarace prostředku třídyazurerm_resource_group dva argumenty: a . Nastavte zástupné symboly na odpovídající hodnoty pro vaše prostředí.
- Místní pojmenovaná hodnota skupiny prostředků se používá v článcích s postupy a články při odkazování na skupinu prostředků. Tato hodnota je nezávislá na názvu skupiny prostředků a odkazuje pouze na název proměnné ve vašem kódu. Pokud změníte tuto hodnotu v definici skupiny prostředků, změňte ji také v kódu, který na tuto hodnotu odkazuje.
5. Definování clusteru Kubernetes
Vytvořte konfigurační soubor Terraformu, který deklaruje prostředky pro cluster Kubernetes.
Vytvořte soubor s názvem
k8s.tf.Do nového souboru vložte následující kód:
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_D2_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 } } network_profile { load_balancer_sku = "Standard" network_plugin = "kubenet" } tags = { Environment = "Development" } }Předchozí kód nastaví název clusteru, umístění a název skupiny prostředků. Je také nastavena předpona plně kvalifikovaného názvu domény (FQDN). Plně kvalifikovaný název domény se používá pro přístup ke clusteru.
Záznam umožňuje nakonfigurovat nastavení, která umožňují přihlášení k
linux_profilepracovním uzlům pomocí protokolu SSH.Se službou AKS platíte jenom za pracovní uzly. Záznam
default_node_poolnakonfiguruje podrobnosti pro tyto pracovní uzly. zahrnujedefault_node_pool recordpočet pracovních uzlů, které se mají vytvořit, a typ pracovních uzlů. Pokud budete v budoucnu potřebovat škálovat cluster nahoru nebo dolů, upravítecounthodnotu v tomto záznamu.
6. Deklarace proměnných
Vytvořte soubor s názvem , který bude obsahovat proměnné projektu, a
variables.tfvložte následující kód: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" }
7. Vytvoření výstupního souboru Terraformu
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 . V této části vytvoříte výstupní soubor, který pomocí kubectl umožňuje přístup ke clusteru.
Vytvořte soubor s názvem
output.tf.Do nového souboru vložte následující kód:
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 sensitive = true } output "host" { value = azurerm_kubernetes_cluster.k8s.kube_config.0.host }
8. Nastavení úložiště Azure pro uložení stavu Terraformu
Terraform sleduje stav místně prostřednictvím souboru terraform.tfstate. Tento model funguje dobře v prostředí s jednou osobou. V prostředí s více osoby se ke sledování stavu používá úložiště Azure.
V této části se můžete podívat, jak provádět následující úlohy:
- Načtení informací o účtu úložiště (název účtu a klíč účtu)
- Vytvořte kontejner úložiště, do kterého se budou ukládat informace o stavu Terraformu.
Na webu Azure Portal vyberte v levé nabídce Všechny služby.
Vyberte Účty úložiště.
Na kartě Účty úložiště vyberte název účtu úložiště, do kterého má Terraform ukládat stav. Můžete například použít účet úložiště, který se vytvoří při prvním otevření služby Cloud Shell. Název účtu úložiště vytvořeného službou Cloud Shell obvykle začíná na
csa následuje ho řetězec náhodných čísel a písmen. Poznamenejte si účet úložiště, který vyberete. Tato hodnota se bude potřebovat později.Na kartě účtu úložiště vyberte Přístupové klíče.

Poznamenejte si hodnotu Klíč v části klíč1. (Výběr ikony napravo od klíče zkopíruje příslušnou hodnotu do schránky.)

Ve svém účtu úložiště Azure vytvořte kontejner. Zástupné symboly nahraďte příslušnými hodnotami pro vaše prostředí.
az storage container create -n tfstate --account-name <YourAzureStorageAccountName> --account-key <YourAzureStorageAccountKey>
9. Vytvoření clusteru Kubernetes
V této části se dozvíte, jak pomocí příkazu vytvořit prostředky definované v konfiguračních souborech, které jste vytvořili terraform init v předchozích částech.
V Cloud Shell inicializovat Terraform. Zástupné symboly nahraďte příslušnými hodnotami pro vaše prostředí.
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 initzobrazí úspěch inicializace back-endu a modulu plug-in zprostředkovatele:
Exportujte své přihlašovací údaje instančního objektu. Zástupné symboly nahraďte příslušnými hodnotami z vašeho objektu služby.
export TF_VAR_client_id=<service-principal-appid> export TF_VAR_client_secret=<service-principal-password>Spuštěním příkazu
terraform planvytvořte plán Terraformu, který definuje prvky infrastruktury.terraform plan -out out.planPříkaz
terraform planzobrazí prostředky, které se po spuštění příkazuterraform applyvytvoří:
Spuštěním příkazu
terraform applypoužijte plán a vytvořte cluster Kubernetes. Proces vytvoření clusteru Kubernetes může trvat několik minut, což vede k Cloud Shell relace. Pokud Cloud Shell časový limit relace, můžete postupovat podle kroků v části Obnovení z časového limitu Cloud Shell, abyste mohli proces dokončit.terraform apply out.planPříkaz
terraform applyzobrazí výsledky vytvoření prostředků definovaných v konfiguračních souborech:
V Azure Portal nabídce vlevo vyberte Všechny prostředky. Zobrazí se prostředky vytvořené pro nový cluster Kubernetes.

10. Zotavení z Cloud Shell časového limitu
Pokud Cloud Shell relace aplikace, můžete provést následující kroky k obnovení:
Spusťte relaci služby Cloud Shell.
Přejděte do adresáře, který obsahuje konfigurační soubory Terraformu.
cd /clouddrive/terraform-aks-k8sSpusťte následující příkaz:
export KUBECONFIG=./azurek8s
11. Testování clusteru Kubernetes
Nově vytvořený cluster můžete pomocí nástrojů Kubernetes ověřit.
Získejte konfiguraci Kubernetes ze stavu Terraformu a uložte ji do souboru, který dokáže nástroj kubectl přečíst.
echo "$(terraform output kube_config)" > ./azurek8sZkontrolujte, že předchozí příkaz nepřidá znak EOT ASCII.
cat ./azurek8sPokud se zobrazí na začátku a na konci, upravte obsah souboru a
<< EOTEOTodeberte je. To je nezbytné, jinak by se vám mohla zobrazit následující zpráva:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this contextNastavte proměnnou prostředí, aby kubectl převzal správnou konfiguraci.
export KUBECONFIG=./azurek8sOvěřte stav clusteru.
kubectl get nodesMě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:

12. Monitorování stavu a protokolů
Při vytvoření clusteru AKS se povolilo monitorování za účelem zachycování metrik stavu podů i uzlů clusteru. 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.
Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure