Skapa ett Kubernetes-kluster med Azure Kubernetes Service terraform
Azure Kubernetes Service (AKS) hanterar din värdbaserade Kubernetes-miljö. Med AKS kan du distribuera och hantera program i containrar utan expertkunskaper om containerorkestrering. Med AKS kan du också utföra många vanliga underhållsåtgärder utan att ta appen offline. Dessa åtgärder omfattar etablering, uppgradering och skalning av resurser på begäran.
I den här artikeln kan du se hur du:
- Använda HCL (HashiCorp Language) för att definiera ett Kubernetes-kluster
- Använda Terraform och AKS för att skapa ett Kubernetes-kluster
- Använda verktyget kubectl för att testa tillgängligheten för ett Kubernetes-kluster
1. Konfigurera din miljö
- Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Konfigurera Terraform: Om du inte redan har gjort det konfigurerar du Terraform med något av följande alternativ:
- Azure-tjänstenshuvudnamn: Om du inte har ett huvudnamn för tjänsten skapar du ett huvudnamn för tjänsten. Anteckna värdena för
appId,displayName, ochpasswordtenant.
2. Skapa ett SSH-nyckelpar
Exemplet i den här artikeln använder ett SSH-nyckelpar för att verifiera användaren till den virtuella datorn.
Generera ett SSH-nyckelpar med någon av följande artiklar beroende på din miljö:
3. Skapa katalogstrukturen
Det första steget är att skapa katalogen som innehåller Terraform-konfigurationsfilerna för övningen.
Öppna en kommandotolk där du kan köra Terraform-kommandon.
Skapa en katalog som heter
terraform-aks-k8s.Ändra sökvägen till den nya katalogen:
4. Deklarera Azure-providern
En Terraform-konfigurationsfil börjar med leverantörens specifikation. När du använder Azure anger du Azure-providern (azurerm) i blocket.
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...
Viktiga punkter:
- Även om
versionattributet är valfritt rekommenderar HashiCorp att du fäster till en viss version av providern. - Om du använder Azure-providern 1.x
featurestillåts inte blocket. - Om du använder Azure-providern 2.x
featureskrävs blocket. - Resursdeklarationen förazurerm_resource_group två argument: och . Ange platshållarna till lämpliga värden för din miljö.
- Det lokala namngivna värdet för för resursgruppen används i alla artiklar om i - och -artiklar när du refererar till resursgruppen. Det här värdet är oberoende av resursgruppens namn och refererar endast till variabelnamnet i koden. Om du ändrar det här värdet i resursgruppsdefinitionen ändrar du det också i koden som refererar till det.
5. Definiera ett Kubernetes-kluster
Skapa Terraform-konfigurationsfilen som deklarerar resurserna för Kubernetes-klustret.
Skapa en fil som heter
k8s.tf.Infoga följande kod i den nya filen:
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" } }Koden ovan anger namnet på klustret, platsen och resursgruppens namn. Prefixet för det fullständigt kvalificerade domännamnet (FQDN) anges också. FQDN används för att komma åt klustret.
Med
linux_profileposten kan du konfigurera inställningarna som aktiverar inloggning till arbetsnoderna med hjälp av SSH.Med AKS betalar du bara för arbetarnoderna. Posten
default_node_poolkonfigurerar informationen för dessa arbetsnoder.default_node_pool recordinnehåller antalet arbetsnoder som ska skapas och typen av arbetsnoder. Om du behöver skala upp eller ned klustret i framtiden ändrar du värdetcounti den här posten.
6. Deklarera variablerna
Skapa en fil med
variables.tfnamnet som ska innehålla projektvariablerna och infoga följande kod: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. Skapa en Terraform-utdatafil
Med Terraform-utdata kan du definiera värden som markeras för användaren när en plan används i Terraform och kan hämtas med kommandot . I det här avsnittet skapar du en utdatafil som tillåter åtkomst till klustret med kubectl.
Skapa en fil som heter
output.tf.Infoga följande kod i den nya filen:
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. Konfigurera Azure Storage för att lagra Terraform-tillstånd
Terraform spårar tillstånd lokalt via filen terraform.tfstate. Det här mönstret fungerar bra i en miljö med en enda person. I en miljö med flera personer används Azure Storage för att spåra tillstånd.
I det här avsnittet ser du hur du utför följande uppgifter:
- Hämta lagringskontoinformation (kontonamn och kontonyckel)
- Skapa en lagringscontainer där Terraform-tillståndsinformation ska lagras.
I Azure-portalen väljer du Alla tjänster i vänstermenyn.
Välj Lagringskonton.
På fliken Lagringskonton väljer du namnet på det lagringskonto där Terraform ska lagra tillstånd. Du kan till exempel använda lagringskontot som skapades när du öppnade Cloud Shell första gången. Lagringskontonamnet som skapades av Cloud Shell börjar vanligtvis med
csföljt av en slumpmässig sträng med siffror och bokstäver. Anteckna det lagringskonto som du väljer. Det här värdet behövs senare.Välj Åtkomstnycklar på fliken för lagringskonto.

Anteckna nyckelvärdet för key1. (Om du väljer ikonen till höger om nyckeln kopieras värdet till Urklipp.)

Skapa en container i ditt Azure Storage-konto. Ersätt platshållarna med lämpliga värden för din miljö.
az storage container create -n tfstate --account-name <YourAzureStorageAccountName> --account-key <YourAzureStorageAccountKey>
9. Skapa Kubernetes-klustret
I det här avsnittet får du se hur du använder kommandot för att skapa de resurser som definierats i terraform init konfigurationsfilerna som du skapade i föregående avsnitt.
Initiera Terraform i Cloud Shell. Ersätt platshållarna med lämpliga värden för din miljö.
terraform init -backend-config="storage_account_name=<YourAzureStorageAccountName>" -backend-config="container_name=tfstate" -backend-config="access_key=<YourStorageAccountAccessKey>" -backend-config="key=codelab.microsoft.tfstate"Kommandot
terraform initvisar hur du initierar plugin-programmet för backend och providern:
Exportera autentiseringsuppgifterna för tjänstens huvudnamn. Ersätt platshållarna med lämpliga värden från tjänstens huvudnamn.
export TF_VAR_client_id=<service-principal-appid> export TF_VAR_client_secret=<service-principal-password>Kör kommandot
terraform planför att skapa Terraform-planen som definierar infrastrukturelementen.terraform plan -out out.planKommandot
terraform planvisar resurserna som kommer att skapas när du kör kommandotterraform apply:
Kör kommandot
terraform applyför att tillämpa planen för att skapa Kubernetes-klustret. Processen för att skapa ett Kubernetes-kluster kan ta flera minuter, vilket resulterar i att Cloud Shell-sessionen tar slut. Om tidsgränsen Cloud Shell tidsgränsen för sessionen kan du följa stegen i avsnittet "Återställa från en Cloud Shell tidsgräns" så att du kan slutföra processen.terraform apply out.planKommandot
terraform applyvisar resultatet av att skapa resurserna som definierats i konfigurationsfilerna:
I menyn Azure Portal du Alla resurser på den vänstra menyn för att se de resurser som skapats för ditt nya Kubernetes-kluster.

10. Återställa från en Cloud Shell tidsgräns
Om Cloud Shell-sessionens slut kan du utföra följande steg för att återställa:
Starta en Cloud Shell-session.
Ändra till katalogen som innehåller dina Terraform-konfigurationsfiler.
cd /clouddrive/terraform-aks-k8sKör följande kommando:
export KUBECONFIG=./azurek8s
11. Testa Kubernetes-klustret
Kubernetes-verktygen kan användas för att verifiera det nyligen skapade klustret.
Hämta Kubernetes-konfigurationen från Terraform-tillståndet och lagra den i en fil som kubectl kan läsa.
echo "$(terraform output kube_config)" > ./azurek8sKontrollera att det föregående kommandot inte har lagt till ett EOT ASCII-tecken
cat ./azurek8sOm du ser
<< EOTi början och slutet redigerar du innehållet i filen för att ta bortEOTdessa. Detta är nödvändigt, annars kan du få följande meddelande:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this contextAnge en miljövariabel så att kubectl hämtar korrekt konfiguration.
export KUBECONFIG=./azurek8sKontrollera klustrets hälsotillstånd.
kubectl get nodesDu bör se information för dina arbetarnoder och de bör ha statusen Ready enligt följande bild:

12. Övervaka hälsotillstånd och loggar
När AKS-klustret skapades aktiverades övervakning för att registrera hälsomått för både klusternoderna och poddarna. De här hälsomåtten är tillgängliga i Azure-portalen. Mer information om övervakning av hälsotillstånd för containrar finns i Övervaka hälsotillstånd för Azure Kubernets Service.
Felsöka Terraform på Azure
Felsöka vanliga problem när du använder Terraform på Azure