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
-
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Pokud jste terraform ještě nenakonfigurovali, můžete to udělat pomocí jedné z následujících možností:
Pokud nemáte instanční objekt Azure, vytvořte instanční objekt. Poznamenejte si
appId
,display_name
,password
atenant
.Potřebujete nástroj
kubectl
příkazového řádku Kubernetes . Pokud ho nemáte, stáhněte si kubectl.
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.
https://shell.azure.com V prohlížeči otevřete Cloud Shell.
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
Vytvořte adresář, ve kterém otestujete ukázkový kód Terraformu a nastavíte ho jako aktuální adresář.
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 {} }
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 Linux
os_sku
.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" }
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 }
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í
Inicializace Terraformu a stažení modulů Azure potřebných ke správě prostředků Azure pomocí
terraform init
příkazuterraform init
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í.
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 spustiliterraform 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
, zavolejteterraform apply
bez parametrů.
Ověření výsledků
Pomocí následujícího
echo
příkazu získejte název skupiny prostředků.echo "$(terraform output resource_group_name)"
Přejděte na web Azure Portal.
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.
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
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 aEOT
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
.Nastavte proměnnou prostředí tak, aby kubectl zachytá správnou konfiguraci pomocí následujícího
export
příkazu.export KUBECONFIG=./azurek8s
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 output
příkaz . Pokud chcete zobrazit konkrétní výstupní hodnotu, spusťteecho "$(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.
terraform plan
Spusťte příkaz a zadejtedestroy
příznak.terraform plan -destroy -out main.destroy.tfplan
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.
Získání ID objektu instančního objektu
az ad sp list
pomocí příkazuaz ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
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.