Een Kubernetes-cluster maken met Azure Kubernetes Service terraform
Azure Kubernetes Service (AKS) beheert uw gehoste Kubernetes-omgeving. Met AKS kunt u toepassingen in containers implementeren en beheren zonder kennis van container orchestration. Met AKS kunt u ook veel algemene onderhoudsbewerkingen uitvoeren zonder uw app offline te halen. Deze bewerkingen omvatten het inrichten, upgraden en schalen van resources op aanvraag.
In dit artikel leert u het volgende:
- HCL (HashiCorp Configuration Language) gebruiken om een Kubernetes-cluster te definiëren
- Terraform en AKS gebruiken om een Kubernetes-cluster te maken
- Het hulpprogramma kubectl gebruiken om de beschikbaarheid van een Kubernetes-cluster te testen
1. Uw omgeving configureren
- Azure-abonnement: Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
Terraform configureren: Als u dit nog niet hebt gedaan, configureert u Terraform met een van de volgende opties:
- Azure-service-principal:als u geen service-principal hebt, maakt u een service-principal. Noteer de waarden voor
appIdde , , endisplayNamepasswordtenant.
2. Een SSH-sleutelpaar maken
In het voorbeeld in dit artikel wordt een SSH-sleutelpaar gebruikt om de gebruiker te valideren bij de VM.
Genereer een SSH-sleutelpaar met behulp van een van de volgende artikelen, afhankelijk van uw omgeving:
3. De mapstructuur maken
De eerste stap is het maken van een map voor de Terraform-configuratiebestanden voor de oefening.
Open een opdrachtregelprompt van waaruit u Terraform-opdrachten kunt uitvoeren.
Maak een map met de naam
terraform-aks-k8s.Maak de nieuwe directory de actieve directory:
4. De Azure-provider declareer
Een Terraform-configuratiebestand begint met de specificatie van de provider. Wanneer u Azure gebruikt, geeft u de Azure-provider (azurerm) op in het blok.
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...
Belangrijkste punten:
- Hoewel het
versionkenmerk optioneel is, raadt HashiCorp aan om vast te maken aan een bepaalde versie van de provider. - Als u Azure-provider 1.x gebruikt,
featuresis het blok niet toegestaan. - Als u Azure-provider 2.x gebruikt,
featuresis het blok vereist. - De resourcedeclaratievan azurerm_resource_group heeft twee argumenten: en . Stel de tijdelijke aanduidingen in op de juiste waarden voor uw omgeving.
- De lokale benoemde waarde van voor de resourcegroep wordt gebruikt in de artikelen met gebruiksartikelen en artikelen wanneer wordt verwezen naar de resourcegroep. Deze waarde is onafhankelijk van de naam van de resourcegroep en verwijst alleen naar de naam van de variabele in uw code. Als u deze waarde wijzigt in de definitie van de resourcegroep, wijzigt u deze ook in de code waarnaar wordt verwezen.
5. Een Kubernetes-cluster definiëren
Maak het Terraform-configuratiebestand waarin de resources voor het Kubernetes-cluster worden gedeclareerd.
Maak een bestand met de naam
k8s.tf.Voeg de volgende code in het nieuwe bestand in:
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" } }Met de voorgaande code stelt u de naam van het cluster, de locatie en de naam van de resourcegroep in. Het voorvoegsel voor de FQDN (Fully Qualified Domain Name) wordt ook ingesteld. De FQDN wordt gebruikt voor toegang tot het cluster.
Met de record kunt u de instellingen configureren waarmee u zich met behulp van SSH kunt aanmelden bij de
linux_profilewerkknooppunten.Met AKS betaalt u alleen voor de werkknooppunten. De
default_node_poolrecord configureert de details voor deze werkknooppunten. Dedefault_node_pool recordomvat het aantal werkknooppunten dat moet worden maken en het type werkknooppunten. Als u het cluster in de toekomst omhoog of omlaag wilt schalen, wijzigt u decountwaarde in deze record.
6. De variabelen declareer
Maak een bestand met de
variables.tfnaam dat de projectvariabelen bevat en voeg de volgende code in: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. Een Terraform-uitvoerbestand maken
Met Terraform-uitvoer kunt u waarden definiëren die voor de gebruiker worden gemarkeerd wanneer in Terraform een plan wordt toegepast. Deze uitvoer kan worden opgevraagd met de opdracht . In deze sectie maakt u een uitvoerbestand waarmee via kubectl toegang wordt verkregen tot het cluster.
Maak een bestand met de naam
output.tf.Voeg de volgende code in het nieuwe bestand in:
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. Azure Storage instellen voor het opslaan van de Terraform-status
In Terraform wordt de status lokaal bijgehouden via het bestand terraform.tfstate. Dit patroon werkt goed in een omgeving met één persoon. In een omgeving met meerdere personen wordt Azure Storage gebruikt om de status bij te houden.
In deze sectie ziet u hoe u de volgende taken uitvoert:
- Opslagaccountgegevens ophalen (accountnaam en accountsleutel)
- Maak een opslagcontainer waarin Terraform-statusgegevens worden opgeslagen.
Selecteer in Azure Portal de optie Alle services in het linkermenu.
Selecteer Opslagaccounts.
Selecteer op het tabblad Opslagaccounts de naam van het opslagaccount waarin de Terraform-status moet worden opgeslagen. U kunt bijvoorbeeld het opslagaccount gebruiken dat u hebt gemaakt toen u Cloud Shell de eerste keer opende. De opslagaccountnaam die door Cloud Shell wordt gemaakt, begint gewoonlijk met
cs, gevolgd door een willekeurige tekenreeks met cijfers en letters. Noteer het opslagaccount dat u selecteert. Deze waarde is later nodig.Selecteer op het opslagaccounttabblad Toegangssleutels.

Noteer de waarde van de key1-sleutel. (Als u het pictogram rechts van de sleutel selecteert, wordt de waarde gekopieerd naar het klembord.)

Maak een container in uw Azure-opslagaccount. Vervang de tijdelijke aanduidingen door de juiste waarden voor uw omgeving.
az storage container create -n tfstate --account-name <YourAzureStorageAccountName> --account-key <YourAzureStorageAccountKey>
9. Het Kubernetes-cluster maken
In deze sectie ziet u hoe u de opdracht gebruikt om de resources te maken die zijn gedefinieerd in de configuratiebestanden die u terraform init in de vorige secties hebt gemaakt.
Initialiseer in Cloud Shell Terraform. Vervang de tijdelijke aanduidingen door de juiste waarden voor uw omgeving.
terraform init -backend-config="storage_account_name=<YourAzureStorageAccountName>" -backend-config="container_name=tfstate" -backend-config="access_key=<YourStorageAccountAccessKey>" -backend-config="key=codelab.microsoft.tfstate"De
terraform initopdracht geeft het succes weer van het initialiseren van de back-en provider-in plug-in:
Exporteer uw service-principal-referenties. Vervang de tijdelijke aanduidingen door de juiste waarden van uw service-principal.
export TF_VAR_client_id=<service-principal-appid> export TF_VAR_client_secret=<service-principal-password>Voer de opdracht
terraform planuit om het Terraform-plan te maken waarmee de infrastructuurelementen worden gedefinieerd.terraform plan -out out.planMet de opdracht
terraform plangeeft u de resources weer die worden gemaakt tijdens het uitvoeren van de opdrachtterraform apply:
Voer de opdracht
terraform applyuit om het plan voor het maken van het Kubernetes-cluster toe te passen. Het proces voor het maken van een Kubernetes-cluster kan enkele minuten duren, wat resulteert in Cloud Shell time-out van de sessie. Als er Cloud Shell time-out is voor de sessie, kunt u de stappen in de sectie Herstellen van Cloud Shell time-out volgen om het proces te voltooien.terraform apply out.planMet de opdracht
terraform applygeeft u de resultaten weer van het maken van de resources die zijn gedefinieerd in uw configuratiebestanden:
Selecteer in Azure Portal alle resources in het linkermenu om de resources te zien die zijn gemaakt voor uw nieuwe Kubernetes-cluster.

10. Herstellen van een Cloud Shell time-out
Als er een Cloud Shell, kunt u de volgende stappen volgen om te herstellen:
Start een Cloud Shell-sessie.
Ga naar de map met uw Terraform-configuratiebestanden.
cd /clouddrive/terraform-aks-k8sVoer de volgende opdracht uit:
export KUBECONFIG=./azurek8s
11. Het Kubernetes-cluster testen
U kunt het gemaakte cluster controleren met de Kubernetes-hulpprogramma's.
Haal de Kubernetes-configuratie op uit de Terraform-status en sla deze op in een bestand dat door kubectl kan worden gelezen.
echo "$(terraform output kube_config)" > ./azurek8sControleer of met de vorige opdracht geen EOT ASCII-teken is toevoegen
cat ./azurek8sAls u aan het begin en aan het einde ziet, bewerkt u
<< EOTde inhoud van het bestand om deze teEOTverwijderen. Dit is nodig, anders zou u het volgende bericht kunnen ontvangen:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this contextStel een omgevingsvariabele in zodat de juiste configuratie wordt opgehaald door kubectl.
export KUBECONFIG=./azurek8sControleer de status van het cluster.
kubectl get nodesDe details van de werkknooppunten worden weergegeven. De status van al deze werkknooppunten moet Gereed zijn, zoals in de volgende afbeelding is weergegeven:

12. Status en logboeken bewaken
Toen het AKS-cluster werd gemaakt, werd controleren ingeschakeld om metrische gegevens over de status van de clusterknooppunten en -pods vast te leggen. Deze metrische gegevens over de status zijn in de Azure-portal beschikbaar. Zie Status van Azure Kubernetes Service controleren voor meer informatie over het controleren van de status van de container.
Problemen met Terraform in Azure oplossen
Veelvoorkomende problemen bij het gebruik van Terraform in Azure oplossen