Rövid útmutató: Azure Linux Container Host üzembe helyezése AKS-fürthöz a Terraform használatával
Ismerkedés az Azure Linux Container Hosttal a Terraform használatával egy Azure Linux Container Host-fürt üzembe helyezéséhez. Az előfeltételek telepítése után implementálja a Terraform-kódot, inicializálja a Terraformot, és létrehoz és alkalmaz egy Terraform végrehajtási tervet.
A Terraform lehetővé teszi a felhőinfrastruktúra definícióját, előzetes verzióját és üzembe helyezését. A Terraform használatával konfigurációs fájlokat hozhat létre a HCL szintaxisával. A HCL szintaxissal megadhatja a felhőszolgáltatót és a felhőinfrastruktúra elemeit. A konfigurációs fájlok létrehozása után létrehoz egy végrehajtási tervet, amely lehetővé teszi az infrastruktúra változásainak előzetes megtekintését az üzembe helyezés előtt. A módosítások ellenőrzése után alkalmazza a végrehajtási tervet az infrastruktúra üzembe helyezésére.
Feljegyzés
A cikkben szereplő példakód a Microsoft Terraform GitHub adattárban található.
Előfeltételek
-
Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.
Ha még nem konfigurálta a Terraformot, az alábbi lehetőségek egyikével teheti meg:
Ha nem rendelkezik Azure-szolgáltatásnévvel, hozzon létre egy szolgáltatásnevet. Jegyezze fel a
appId
,display_name
,password
éstenant
.Szüksége van a Kubernetes parancssori eszközére
kubectl
. Ha nem rendelkezik vele, töltse le a kubectl fájlt.
SSH-kulcs létrehozása
Az AKS-csomópontok eléréséhez egy SSH-kulcspár (nyilvános és privát) használatával csatlakozik, amelyet a ssh-keygen
parancs használatával hoz létre. Alapértelmezés szerint ezek a fájlok a ~/.ssh könyvtárban jönnek létre. A ssh-keygen
parancs futtatása felülír minden olyan SSH-kulcspárt, amelynek neve már létezik az adott helyen.
Nyissa meg a https://shell.azure.com Cloud Shellt a böngészőben.
Futtassa a következő parancsot:
ssh-keygen
. Az alábbi példa egy SSH-kulcspárt hoz létre RSA-titkosítással és egy 4096-os bithosszsal:ssh-keygen -t rsa -b 4096
További információ az SSH-kulcsok létrehozásáról: SSH-kulcsok létrehozása és kezelése az Azure-ban történő hitelesítéshez.
A Terraform-kód implementálása
Hozzon létre egy könyvtárat, amelyben tesztelheti a Terraform-mintakódot, és az aktuális könyvtárá teheti.
Hozzon létre egy elnevezett
providers.tf
fájlt, és szúrja be a következő kódot:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Hozzon létre egy elnevezett
main.tf
fájlt, és szúrja be a következő kódot:# 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 } }
Hasonlóképpen megadhatja az Azure Linuxot
os_sku
azurerm_kubernetes_cluster_node_pool.Hozzon létre egy elnevezett
variables.tf
fájlt, és szúrja be a következő kódot: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" }
Hozzon létre egy elnevezett
outputs.tf
fájlt, és szúrja be a következő kódot: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 }
Hozzon létre egy elnevezett
terraform.tfvars
fájlt, és szúrja be a következő kódot:aks_service_principal_app_id = "<service_principal_app_id>" aks_service_principal_client_secret = "<service_principal_password>"
Terraform inicializálása és végrehajtási terv létrehozása
Inicializálja a Terraformot, és töltse le a parancs használatával
terraform init
az Azure-erőforrások kezeléséhez szükséges Azure-modulokat.terraform init
Hozzon létre egy Terraform végrehajtási tervet a
terraform plan
paranccsal.terraform plan -out main.tfplan
A
terraform plan
parancs létrehoz egy végrehajtási tervet, de nem hajtja végre. Ehelyett meghatározza, hogy milyen műveletek szükségesek a konfigurációs fájlokban megadott konfiguráció létrehozásához. Ez a minta lehetővé teszi annak ellenőrzését, hogy a végrehajtási terv megfelel-e az elvárásainak, mielőtt módosítanák a tényleges erőforrásokat.Az opcionális
-out
paraméter lehetővé teszi a terv kimeneti fájljának megadását.-out
A paraméter használatával biztosítható, hogy a vizsgált terv pontosan az alkalmazott legyen.A végrehajtási tervek és a biztonság megőrzéséről a biztonsági figyelmeztetésekben olvashat bővebben.
Alkalmazza a Terraform végrehajtási tervét a
terraform apply
paranccsal.terraform apply main.tfplan
A
terraform apply
fenti parancs feltételezi, hogy korábban futtatottterraform plan -out main.tfplan
. Ha másik fájlnevet adott meg a-out
paraméterhez, használja ugyanazt a fájlnevet a hívásbanterraform apply
. Ha nem használta a paramétert-out
, hívjonterraform apply
paraméterek nélkül.
Az eredmények ellenőrzése
Kérje le az erőforráscsoport nevét az alábbi
echo
paranccsal.echo "$(terraform output resource_group_name)"
Keresse fel az Azure Portalt.
Az Azure-szolgáltatások alatt válassza az Erőforráscsoportok lehetőséget, és keresse meg az új erőforráscsoportot a bemutatóban létrehozott alábbi erőforrások megtekintéséhez:
- Megoldás: Alapértelmezés szerint a bemutató ezt a megoldást ContainerInsightsnak nevezi. A portál zárójelben jeleníti meg a megoldás munkaterületének nevét.
- Kubernetes szolgáltatás: Alapértelmezés szerint a bemutató ezt a szolgáltatást k8stestnek nevezi. (A felügyelt Kubernetes-fürtöket AKS/Azure Kubernetes Service-nek is nevezik.)
- Log Analytics-munkaterület: Alapértelmezés szerint a bemutató ezt a munkaterületet a TestLogAnalyticsWorkspaceName előtaggal nevezi el, amelyet véletlenszerű szám követ.
Kérje le a Kubernetes-konfigurációt a Terraform állapotából, és tárolja egy olyan fájlban, amelyet a Kubectl az alábbi
echo
paranccsal tud olvasni.echo "$(terraform output kube_config)" > ./azurek8s
Ellenőrizze, hogy az előző parancs nem adott hozzá ASCII EOT-karaktert az alábbi
cat
paranccsal.cat ./azurek8s
Ha az elején és
EOT
végén látható<< EOT
, távolítsa el ezeket a karaktereket a fájlból. Ellenkező esetben a következő hibaüzenet jelenhet meg:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
.Állítson be egy környezeti változót, hogy a kubectl a következő
export
paranccsal vegye fel a megfelelő konfigurációt.export KUBECONFIG=./azurek8s
A parancs használatával
kubectl get nodes
ellenőrizze a fürt állapotát.kubectl get nodes
Az Azure Linux Container Host-fürt létrehozásakor a figyelés lehetővé tette a fürtcsomópontok és podok állapotmetrikáinak rögzítését. Ezek az állapotmetrikák elérhetők az Azure Portalon. A tároló állapotának monitorozásával kapcsolatos további információ az Azure Kubernetes Service állapotmonitorozásáról szóló témakörben érhető el.
A Terraform végrehajtási tervének alkalmazásakor több fő érték is ki lett kapcsolva. A gazdacím, az Azure Linux Container Host-fürt felhasználóneve és az Azure Linux Container Host-fürt jelszava például kimenet.
Az összes kimeneti érték megtekintéséhez futtassa a parancsot
terraform output
. Egy adott kimeneti érték megtekintéséhez futtassa a következőtecho "$(terraform output <output_value_name>)"
: .
Az erőforrások eltávolítása
AKS-erőforrások törlése
Ha már nincs szüksége a Terraformmal létrehozott erőforrásokra, az alábbi lépések végrehajtásával eltávolíthatja őket.
Futtassa a
terraform plan
parancsot, és adja meg a jelölőtdestroy
.terraform plan -destroy -out main.destroy.tfplan
Távolítsa el a végrehajtási tervet a
terraform apply
paranccsal.terraform apply main.destroy.tfplan
Szolgáltatásnév törlése
Figyelemfelhívás
A bemutatóban használt szolgáltatásnevet csak akkor törölje, ha máshoz nem használja.
A szolgáltatásnév objektumazonosítójának lekérése a
az ad sp list
parancs használatávalaz ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
Törölje a szolgáltatásnevet a
az ad sp delete
paranccsal.az ad sp delete --id <service_principal_object_id>
A Terraform hibaelhárítása az Azure-ban
A Terraform Azure-beli használatakor felmerülő gyakori problémák elhárítása.
Következő lépések
Ebben a rövid útmutatóban üzembe helyezett egy Azure Linux Container Host-fürtöt. Ha többet szeretne megtudni az Azure Linux Container Hostról, és végig szeretne járni egy teljes fürttelepítési és felügyeleti példán, folytassa az Azure Linux Container Host oktatóanyagával.