Rövid útmutató: Kubernetes-fürt létrehozása Azure Kubernetes Service a Terraform használatával
A cikk a következő Terraform- és Terraform-szolgáltatói verziókkal lett tesztelve:
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 szintaxisa lehetővé teszi a felhőszolgáltató – például az Azure – és a felhőinfrastruktúrát alkotó elemek megadását. 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 módosítá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.
Azure Kubernetes Service (AKS) kezeli a üzemeltetett Kubernetes-környezetet. Az AKS lehetővé teszi tárolóalapú alkalmazások üzembe helyezését és kezelését tárolóvezénylési szakértelem nélkül. Az AKS számos gyakori karbantartási műveletet is lehetővé tesz anélkül, hogy az alkalmazást offline állapotba tenné. Ezek a műveletek magukban foglalják az erőforrások igény szerinti kiépítését, frissítését és skálázását.
Ebben a cikkben az alábbiakkal ismerkedhet meg:
- Kubernetes-fürt meghatározása HCL (HashiCorp Language) használatával
- Kubernetes-fürt létrehozása Terraformmal és AKS-sel
- Kubernetes-fürt rendelkezésre állásának tesztelése a kubectl eszközzel
Megjegyzés
A cikkben szereplő példakód a Microsoft Terraform GitHub adattárában található.
Előfeltételek
- Azure-előfizetés: Ha nem rendelkezik Azure-előfizetéssel, első lépésként mindössze néhány perc alatt létrehozhat egy ingyenes fiókot.
Terraform konfigurálása: Ha még nem tette meg, konfigurálja a Terraformot az alábbi lehetőségek egyikével:
Azure-szolgáltatásnév: Ha nem rendelkezik szolgáltatásnévvel, hozzon létre egy szolgáltatásnevet. Jegyezze fel a
appId
,display_name
,password
éstenant
.SSH-kulcspár: Használja az alábbi cikkek egyikét:
Kubernetes parancssori eszköz (kubectl):Kubectl letöltése.
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árvá teheti.
Hozzon létre egy nevű
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 nevű
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 = "agentpool" vm_size = "Standard_D2_v2" node_count = var.agent_count } linux_profile { admin_username = "ubuntu" 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 } }
Hozzon létre egy nevű
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 nevű
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 nevű
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>"
A Terraform inicializálása
Futtassa a Terraform init parancsot a Terraform üzembe helyezésének inicializálásához. Ez a parancs letölti az Azure-erőforrások kezeléséhez szükséges Azure-szolgáltatót.
terraform init -upgrade
Főbb pontok:
- A
-upgrade
paraméter frissíti a szükséges szolgáltatói beépülő modulokat a legújabb verzióra, amely megfelel a konfiguráció verziókorlátozásainak.
Terraform végrehajtási terv létrehozása
Végrehajtási terv létrehozásához futtassa a Terraform-tervet .
terraform plan -out main.tfplan
Főbb pontok:
- 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ításokat végez a tényleges erőforrásokon. - A választható
-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 az ön által áttekintett csomag pontosan az, amit alkalmaz. - A végrehajtási tervek és a biztonság megőrzésével kapcsolatos további információkért tekintse meg a biztonsági figyelmeztetések szakaszt.
Terraform végrehajtási terv alkalmazása
A terraform alkalmazás futtatásával alkalmazza a végrehajtási tervet a felhőinfrastruktúrára.
terraform apply main.tfplan
Főbb pontok:
- A
terraform apply
fenti parancs feltételezi, hogy korábban futtatta a parancsotterraform 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.
echo "$(terraform output resource_group_name)"
Keresse meg a Azure Portal.
Az Azure-szolgáltatások területen 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 ContainerInsights néven nevezi el. A portál zárójelben jeleníti meg a megoldás munkaterületnevét.
- Kubernetes-szolgáltatás: Alapértelmezés szerint a bemutató ezt a szolgáltatást k8stest néven nevezi el. (A felügyelt Kubernetes-fürtök AKS/Azure Kubernetes Service néven is ismertek.)
- Log Analytics-munkaterület: A bemutató alapértelmezés szerint a TestLogAnalyticsWorkspaceName előtaggal nevezi el ezt a munkaterületet, amelyet egy véletlenszerű szám követ.
Kérje le a Kubernetes-konfigurációt a Terraform állapotából, és tárolja el egy fájlban, amelyet a kubectl olvashat.
echo "$(terraform output kube_config)" > ./azurek8s
Győződjön meg arról, hogy az előző parancs nem adott hozzá ASCII EOT-karaktert.
cat ./azurek8s
Főbb pontok:
- 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
- Ha az elején és
Állítson be egy környezeti változót, így a kubectl a helyes konfigurációt veszi fel.
export KUBECONFIG=./azurek8s
Ellenőrizze a fürt állapotát.
kubectl get nodes
Főbb pontok:
- Az AKS-fürt létrejöttekor a monitorozás is engedélyezve lett, hogy rögzítse a fürtcsomópontok és a podok állapotmetrikáit. 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 gazdagép címe, az AKS-fürt felhasználóneve és az AKS-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 parancsot
echo "$(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 Terraformon keresztül létrehozott erőforrásokra, hajtsa végre az alábbi lépéseket:
Futtassa a Terraform-tervet , és adja meg a jelzőt
destroy
.terraform plan -destroy -out main.destroy.tfplan
Főbb pontok:
- 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ításokat végez a tényleges erőforrásokon. - A választható
-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 az ön által áttekintett csomag pontosan az, amit alkalmaz. - A végrehajtási tervek és a biztonság megőrzésével kapcsolatos további információkért tekintse meg a biztonsági figyelmeztetések szakaszt.
- A
Futtassa a terraform apply parancsot a végrehajtási terv alkalmazásához.
terraform apply main.destroy.tfplan
Szolgáltatásnév törlése
Figyelemfelhívás
Csak akkor törölje a bemutatóban használt szolgáltatásnevet, ha nem használja máshoz.
Futtassa az az ad sp listát a szolgáltatásnév objektumazonosítójának lekéréséhez.
az ad sp list --display-name "<display_name>" --query "[].{\"Object ID\":id}" --output table
Futtassa az az ad sp delete parancsot a szolgáltatásnév törléséhez.
az ad sp delete --id <service_principal_object_id>
A Terraform hibaelhárítása az Azure-ban
A Terraform Azure-on való használatakor felmerülő gyakori problémák elhárítása