Quickstart: Een AKS-cluster (Azure Kubernetes Service) implementeren met behulp van Terraform
Azure Kubernetes Service (AKS) is een beheerde Kubernetes-service waarmee u snel clusters kunt implementeren en beheren. In deze snelstart, gaat u het volgende doen:
- Implementeer een AKS-cluster met behulp van Terraform.
- Voer een voorbeeldtoepassing met meerdere containers uit met een groep microservices en webfront-ends die een retailscenario simuleren.
Notitie
Om snel aan de slag te gaan met het snel inrichten van een AKS-cluster, bevat dit artikel stappen voor het implementeren van een cluster met alleen standaardinstellingen voor evaluatiedoeleinden. Voordat u een cluster implementeert dat gereed is voor productie, raden we u aan vertrouwd te raken met de referentiearchitectuur van de basislijn om na te gaan hoe dit overeenkomt met uw bedrijfsvereisten.
Voordat u begint
- In deze snelstart wordt ervan uitgegaan dat u een basisbegrip hebt van Kubernetes-concepten. Zie Kubernetes-kernconcepten voor Azure Kubernetes Service (AKS) voor meer informatie.
- U hebt een Azure-account met een actief abonnement nodig. Als u nog geen account hebt, maakt u gratis een account.
- Volg de instructies op basis van de opdrachtregelinterface.
- Zie Een AKS-cluster maken dat ondersteuning biedt voor Windows Server-containers voor meer informatie over het maken van een Windows Server-knooppuntgroep.
Notitie
De Azure Linux-knooppuntgroep is nu algemeen beschikbaar (GA). Zie de inleiding tot de Azure Linux-containerhost voor AKS voor meer informatie over de voordelen en implementatiestappen.
- Installeer en configureer Terraform.
- Download kubectl.
- Maak een willekeurige waarde voor de naam van de Azure-resourcegroep met behulp van random_pet.
- Maak een Azure-resourcegroep met behulp van azurerm_resource_group.
- Open de configuratie van de AzureRM-provider om de Azure-object-id op te halen met behulp van azurerm_client_config.
- Maak een Kubernetes-cluster met behulp van azurerm_kubernetes_cluster.
- Maak een AzAPI-resource azapi_resource.
- Maak een AzAPI-resource om een SSH-sleutelpaar te genereren met behulp van azapi_resource_action.
Aanmelden bij uw Azure-account
Meld u eerst aan bij uw Azure-account en verifieer met behulp van een van de methoden die in de volgende sectie worden beschreven.
Terraform- en Azure-verificatiescenario's
Terraform biedt alleen ondersteuning voor verificatie bij Azure via de Azure CLI. Verificatie met behulp van Azure PowerShell wordt niet ondersteund. Hoewel u de Azure PowerShell-module kunt gebruiken bij het uitvoeren van uw Terraform-werk, moet u zich eerst verifiëren bij Azure met behulp van de Azure CLI.
In dit artikel wordt uitgelegd hoe u Terraform verifieert bij Azure voor de volgende scenario's. Zie Verifiëren met behulp van de Azure CLI voor meer informatie over opties voor het verifiëren van Terraform bij Azure.
- Verifiëren via een Microsoft-account met behulp van Cloud Shell (met Bash of PowerShell)
- Verifiëren via een Microsoft-account met Windows (met Bash of PowerShell)
- Verifiëren via een service-principal:
- Als u geen service-principal hebt, maakt u een service-principal.
- Verifiëren bij Azure met behulp van omgevingsvariabelen of verifiëren bij Azure met behulp van het Terraform-providerblok
Verifiëren bij Azure via een Microsoft-account
Een Microsoft-account is een gebruikersnaam (gekoppeld aan een e-mailadres en de bijbehorende referenties) die wordt gebruikt om u aan te melden bij Microsoft-services, zoals Azure. Een Microsoft-account kan worden gekoppeld aan een of meer Azure-abonnementen, waarbij een van deze abonnementen de standaardinstelling is.
In de volgende stappen ziet u hoe:
- Interactief aanmelden bij Azure met behulp van een Microsoft-account
- De gekoppelde Azure-abonnementen van het account weergeven (inclusief de standaardinstelling)
- Stel het huidige abonnement in.
Open een opdrachtregel die toegang heeft tot de Azure CLI.
Voer az login zonder parameters uit en volg de instructies om u aan te melden bij Azure.
az login
Belangrijkste punten:
- Wanneer u zich hebt aangemeld,
az login
wordt een lijst weergegeven met de Azure-abonnementen die zijn gekoppeld aan het aangemelde Microsoft-account, inclusief het standaardabonnement.
- Wanneer u zich hebt aangemeld,
Voer az account show uit om het huidige Azure-abonnement te bevestigen.
az account show
Als u alle azure-abonnementsnamen en id's voor een specifiek Microsoft-account wilt weergeven, voert u az account list uit.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
Belangrijkste punten:
- Vervang de
<microsoft_account_email>
tijdelijke aanduiding door het e-mailadres van het Microsoft-account waarvan u de Azure-abonnementen wilt vermelden. - Met een live-account, zoals een Hotmail of Outlook, moet u mogelijk het volledig gekwalificeerde e-mailadres opgeven. Als uw e-mailadres bijvoorbeeld is
admin@hotmail.com
, moet u de tijdelijke aanduiding mogelijk vervangen doorlive.com#admin@hotmail.com
.
- Vervang de
Als u een specifiek Azure-abonnement wilt gebruiken, voert u az account set uit.
az account set --subscription "<subscription_id_or_subscription_name>"
Belangrijkste punten:
- Vervang de
<subscription_id_or_subscription_name>
tijdelijke aanduiding door de id of naam van het abonnement dat u wilt gebruiken. - Bij het aanroepen
az account set
worden de resultaten van het overschakelen naar het opgegeven Azure-abonnement niet weergegeven. U kunt echter gebruikenaz account show
om te bevestigen dat het huidige Azure-abonnement is gewijzigd. - Als u de
az account list
opdracht uit de vorige stap uitvoert, ziet u dat het standaard Azure-abonnement is gewijzigd in het abonnement waarmeeaz account set
u hebt opgegeven.
- Vervang de
Een service-principal maken
Geautomatiseerde hulpprogramma's die Azure-services implementeren of gebruiken, zoals Terraform, moeten altijd beperkte machtigingen hebben. In plaats van toepassingen zich te laten aanmelden als een gebruiker met volledige rechten, biedt Azure Service Principals.
Het meest voorkomende patroon is om u interactief aan te melden bij Azure, een service-principal te maken, de service-principal te testen en die service-principal vervolgens te gebruiken voor toekomstige verificatie (interactief of vanuit uw scripts).
Meld u aan bij Azure om een service-principal te maken. Nadat u zich hebt geverifieerd bij Azure via een Microsoft-account, keert u hier terug.
Als u een service-principal maakt vanuit Git Bash, stelt u de
MSYS_NO_PATHCONV
omgevingsvariabele in. (Deze stap is niet nodig als u Cloud Shell gebruikt.)export MSYS_NO_PATHCONV=1
Belangrijkste punten:
- U kunt de
MSYS_NO_PATHCONV
omgevingsvariabele globaal instellen (voor alle terminalsessies) of lokaal (alleen voor de huidige sessie). Omdat u niet vaak een service-principal maakt, stelt het voorbeeld de waarde voor de huidige sessie in. Als u deze omgevingsvariabele globaal wilt instellen, voegt u de instelling toe aan het~/.bashrc
bestand.
- U kunt de
Voer az ad sp create-for-rbac uit om een service-principal te maken.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Belangrijkste punten:
- U kunt de
<service-principal-name>
parameter vervangen door een aangepaste naam voor uw omgeving of de parameter volledig weglaten. Als u de parameter weglaat, wordt de naam van de service-principal gegenereerd op basis van de huidige datum en tijd. - Wanneer de voltooiing is voltooid,
az ad sp create-for-rbac
worden verschillende waarden weergegeven. DeappId
waarden en waardentenant
password
worden gebruikt in de volgende stap. - Het wachtwoord kan niet worden opgehaald als het verloren gaat. Als zodanig moet u uw wachtwoord opslaan op een veilige plaats. Als u uw wachtwoord bent vergeten, kunt u de referenties van de service-principal opnieuw instellen.
- Voor dit artikel wordt een service-principal met de rol Inzender gebruikt. Zie RBAC: Ingebouwde rollen voor meer informatie over rollen gebaseerd toegangsbeheer (RBAC).
- De uitvoer van het maken van de service-principal bevat gevoelige referenties. Zorg ervoor dat u deze referenties niet in uw code opneemt of controleer de referenties in uw broncodebeheer.
- Zie het artikel Een Azure-service-principal maken met de Azure CLI voor meer informatie over opties bij het maken van een service-principal met de Azure CLI.
- U kunt de
Referenties voor de service-principal opgeven in omgevingsvariabelen
Zodra u een service-principal hebt gemaakt, kunt u de referenties voor Terraform opgeven via omgevingsvariabelen.
Bewerk het
~/.bashrc
bestand door de volgende omgevingsvariabelen toe te voegen.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
Als u het
~/.bashrc
script wilt uitvoeren, voert u het scriptsource ~/.bashrc
uit (of het verkorte equivalent. ~/.bashrc
). U kunt Cloud Shell ook afsluiten en opnieuw openen om het script automatisch uit te voeren.. ~/.bashrc
Zodra de omgevingsvariabelen zijn ingesteld, kunt u de waarden als volgt controleren:
printenv | grep ^ARM*
Belangrijkste punten:
- Net als bij elke omgevingsvariabele, gebruikt u de volgende syntaxis om toegang te krijgen tot een Azure-abonnementswaarde vanuit een Terraform-script:
${env.<environment_variable>}
Als u bijvoorbeeld toegang wilt krijgen tot deARM_SUBSCRIPTION_ID
waarde, geeft u${env.ARM_SUBSCRIPTION_ID}
op. - Bij het maken en toepassen van Terraform-uitvoeringsplannen worden wijzigingen aangebracht in het Azure-abonnement dat is gekoppeld aan de service-principal. Dit kan soms verwarrend zijn als u bent aangemeld bij één Azure-abonnement en de omgevingsvariabelen verwijzen naar een tweede Azure-abonnement. Laten we eens kijken naar het volgende voorbeeld om het uit te leggen. Stel dat u twee Azure-abonnementen hebt: SubA en SubB. Als het huidige Azure-abonnement SubA is (bepaald via
az account show
) terwijl de omgevingsvariabelen verwijzen naar SubB, bevinden eventuele wijzigingen van Terraform zich in SubB. Daarom moet u zich aanmelden bij uw SubB-abonnement om Azure CLI-opdrachten of Azure PowerShell-opdrachten uit te voeren om uw wijzigingen weer te geven.
Referenties voor de service-principal opgeven in een Terraform-providerblok
Het Blok azure-provider definieert syntaxis waarmee u de verificatiegegevens van uw Azure-abonnement kunt opgeven.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here
Let op
De mogelijkheid om uw Azure-abonnementsreferenties op te geven in een Terraform-configuratiebestand kan handig zijn, met name bij het testen. Het is echter niet raadzaam om referenties op te slaan in een bestand met duidelijke tekst dat kan worden bekeken door niet-vertrouwde personen.
De Terraform-code implementeren
Notitie
De voorbeeldcode voor dit artikel bevindt zich in de Azure Terraform GitHub-opslagplaats. U kunt het logboekbestand met de testresultaten van de huidige en vorige versies van Terraform bekijken.
Maak een map die u kunt gebruiken om de Terraform-voorbeeldcode te testen en de huidige map te maken.
Maak een bestand met de naam
providers.tf
en voeg de volgende code in:terraform { required_version = ">=1.0" required_providers { azapi = { source = "azure/azapi" version = "~>1.5" } azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } time = { source = "hashicorp/time" version = "0.9.1" } } } provider "azurerm" { features {} }
Maak een bestand met de naam
ssh.tf
en voeg de volgende code in:resource "random_pet" "ssh_key_name" { prefix = "ssh" separator = "" } resource "azapi_resource_action" "ssh_public_key_gen" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" resource_id = azapi_resource.ssh_public_key.id action = "generateKeyPair" method = "POST" response_export_values = ["publicKey", "privateKey"] } resource "azapi_resource" "ssh_public_key" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" name = random_pet.ssh_key_name.id location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id } output "key_data" { value = jsondecode(azapi_resource_action.ssh_public_key_gen.output).publicKey }
Maak een bestand met de naam
main.tf
en voeg de volgende code in:# 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_pet" "azurerm_kubernetes_cluster_name" { prefix = "cluster" } resource "random_pet" "azurerm_kubernetes_cluster_dns_prefix" { prefix = "dns" } resource "azurerm_kubernetes_cluster" "k8s" { location = azurerm_resource_group.rg.location name = random_pet.azurerm_kubernetes_cluster_name.id resource_group_name = azurerm_resource_group.rg.name dns_prefix = random_pet.azurerm_kubernetes_cluster_dns_prefix.id identity { type = "SystemAssigned" } default_node_pool { name = "agentpool" vm_size = "Standard_D2_v2" node_count = var.node_count } linux_profile { admin_username = var.username ssh_key { key_data = jsondecode(azapi_resource_action.ssh_public_key_gen.output).publicKey } } network_profile { network_plugin = "kubenet" load_balancer_sku = "standard" } }
Maak een bestand met de naam
variables.tf
en voeg de volgende code in:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string 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 "node_count" { type = number description = "The initial quantity of nodes for the node pool." default = 3 } variable "msi_id" { type = string description = "The Managed Service Identity ID. Set this value if you're running this example using Managed Identity as the authentication method." default = null } variable "username" { type = string description = "The admin username for the new cluster." default = "azureadmin" }
Maak een bestand met de naam
outputs.tf
en voeg de volgende code in:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "kubernetes_cluster_name" { value = azurerm_kubernetes_cluster.k8s.name } 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 }
Terraform initialiseren
Voer terraform init uit om de Terraform-implementatie te initialiseren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van uw Azure-resources.
terraform init -upgrade
Belangrijkste punten:
- Met
-upgrade
de parameter worden de benodigde providerinvoegtoepassingen bijgewerkt naar de nieuwste versie die voldoet aan de versiebeperkingen van de configuratie.
Een Terraform-uitvoeringsplan maken
Voer terraform-plan uit om een uitvoeringsplan te maken.
terraform plan -out main.tfplan
Belangrijkste punten:
- De
terraform plan
opdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources. - Met de optionele
-out
parameter kunt u een uitvoerbestand voor het plan opgeven. Door de-out
parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.
Een Terraform-uitvoeringsplan toepassen
Terraform uitvoeren is van toepassing om het uitvoeringsplan toe te passen op uw cloudinfrastructuur.
terraform apply main.tfplan
Belangrijkste punten:
- Bij de voorbeeldopdracht
terraform apply
wordt ervan uitgegaan dat u eerder hebt uitgevoerdterraform plan -out main.tfplan
. - Als u een andere bestandsnaam voor de
-out
parameter hebt opgegeven, gebruikt u diezelfde bestandsnaam in de aanroep naarterraform apply
. - Als u de parameter niet hebt gebruikt, roept
terraform apply
u deze-out
aan zonder parameters.
De resultaten controleren
Haal de naam van de Azure-resourcegroep op met behulp van de volgende opdracht.
resource_group_name=$(terraform output -raw resource_group_name)
Geef de naam van uw nieuwe Kubernetes-cluster weer met behulp van de opdracht az aks list .
az aks list \ --resource-group $resource_group_name \ --query "[].{\"K8s cluster name\":name}" \ --output table
Haal de Kubernetes-configuratie op uit de Terraform-status en sla deze op in een bestand dat
kubectl
kan worden gelezen met behulp van de volgende opdracht.echo "$(terraform output kube_config)" > ./azurek8s
Controleer of de vorige opdracht geen ASCII EOT-teken heeft toegevoegd met behulp van de volgende opdracht.
cat ./azurek8s
Belangrijkste punten:
- Als u aan het begin en
EOT
aan het einde ziet<< EOT
, verwijdert u deze tekens uit het bestand. Anders wordt mogelijk het volgende foutbericht weergegeven:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
- Als u aan het begin en
Stel een omgevingsvariabele in zodat
kubectl
de juiste configuratie kan worden opgehaald met behulp van de volgende opdracht.export KUBECONFIG=./azurek8s
Controleer de status van het cluster met behulp van de
kubectl get nodes
opdracht.kubectl get nodes
Belangrijkste punten:
- Toen u het AKS-cluster maakte, is bewaking ingeschakeld voor het vastleggen van metrische statusgegevens voor zowel de clusterknooppunten als pods. 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.
- Verschillende sleutelwaarden die zijn geclassificeerd als uitvoer bij het toepassen van het Terraform-uitvoeringsplan. Het hostadres, de gebruikersnaam van het AKS-cluster en het AKS-clusterwachtwoord worden bijvoorbeeld uitgevoerd.
De toepassing implementeren
Als u de toepassing wilt implementeren, gebruikt u een manifestbestand om alle objecten te maken die nodig zijn om de AKS Store-toepassing uit te voeren. Een Kubernetes-manifestbestand definieert de gewenste status van een cluster, zoals welke containerinstallatiekopieën moeten worden uitgevoerd. Het manifest bevat de volgende Kubernetes-implementaties en -services:
- Webwinkel: Webtoepassing voor klanten om producten te bekijken en bestellingen te plaatsen.
- Productservice: toont productgegevens.
- Orderservice: Orders plaatsen.
- Rabbit MQ: Berichtenwachtrij voor een orderwachtrij.
Notitie
Het is niet raadzaam stateful containers, zoals Rabbit MQ, uit te voeren zonder permanente opslag voor productie. Deze worden hier gebruikt voor het gemak, maar we raden u aan beheerde services te gebruiken, zoals Azure CosmosDB of Azure Service Bus.
Maak een bestand met de naam
aks-store-quickstart.yaml
en kopieer dit in het volgende manifest:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancer
Zie Implementaties en YAML-manifestmanifesten voor een uitsplitsing van YAML-manifestbestanden.
Als u het YAML-bestand lokaal maakt en opslaat, kunt u het manifestbestand uploaden naar uw standaardmap in CloudShell door de knop Bestanden uploaden/downloaden te selecteren en het bestand in uw lokale bestandssysteem te selecteren.
Implementeer de toepassing met behulp van de
kubectl apply
opdracht en geef de naam van uw YAML-manifest op.kubectl apply -f aks-store-quickstart.yaml
In de volgende voorbeelduitvoer ziet u de implementaties en services:
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
De toepassing testen
Wanneer de toepassing wordt uitgevoerd, maakt een Kubernetes-service de front-end van de toepassing beschikbaar op internet. Dit proces kan enkele minuten duren.
Controleer de status van de geïmplementeerde pods met behulp van de
kubectl get pods
opdracht. Zorg ervoor dat alle pods wordenRunning
gebruikt voordat u doorgaat.kubectl get pods
Controleer op een openbaar IP-adres voor de store-front-toepassing. Bewaak de voortgang met behulp van de
kubectl get service
opdracht met het--watch
argument.kubectl get service store-front --watch
De UITVOER VAN HET EXTERNE IP-adres voor de
store-front
service wordt in eerste instantie weergegeven als in behandeling:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Zodra het EXTERNAL-IP-adres is gewijzigd in een daadwerkelijk openbaar IP-adres, gebruikt
CTRL-C
u dit om hetkubectl
controleproces te stoppen.In de volgende voorbeelduitvoer ziet u een geldig openbaar IP-adres dat aan de service is toegewezen:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Open een webbrowser naar het externe IP-adres van uw service om de Azure Store-app in actie te zien.
Resources opschonen
AKS-resources verwijderen
Voer de volgende stappen uit wanneer u de resources die zijn gemaakt via Terraform niet meer nodig hebt:
Voer terraform-plan uit en geef de
destroy
vlag op.terraform plan -destroy -out main.destroy.tfplan
Belangrijkste punten:
- De
terraform plan
opdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources. - Met de optionele
-out
parameter kunt u een uitvoerbestand voor het plan opgeven. Door de-out
parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.
- De
Terraform uitvoeren is van toepassing om het uitvoeringsplan toe te passen.
terraform apply main.destroy.tfplan
Service-principal verwijderen
Haal de service-principal-id op met behulp van de volgende opdracht.
sp=$(terraform output -raw sp)
Verwijder de service-principal met behulp van de opdracht az ad sp delete .
az ad sp delete --id $sp
- De Azure Developer CLI (AZD) installeren
- Installeer en configureer Terraform.
- U kunt de toepassingscode controleren die wordt gebruikt in de opslagplaats Azure-Samples/aks-store-demo.
De Azure Developer CLI-sjabloon klonen
Met de Azure Developer CLI kunt u snel voorbeelden downloaden uit de opslagplaats Azure-Samples . In onze quickstart downloadt u de aks-store-demo
toepassing. Zie het azd
overzicht voor meer informatie over de algemene gebruiksvoorbeelden.
Kloon de demosjabloon voor het AKS-archief uit de opslagplaats Azure-Samples met behulp van de
azd init
opdracht met de--template
parameter.azd init --template Azure-Samples/aks-store-demo
Voer een omgevingsnaam in voor uw project die alleen alfanumerieke tekens en afbreekstreepjes gebruikt, zoals aks-terraform-1.
Enter a new environment name: aks-terraform-1
Aanmelden bij uw Azure Cloud-account
De azd
sjabloon bevat alle code die nodig is om de services te maken, maar u moet zich aanmelden bij uw Azure-account om de toepassing op AKS te hosten.
Meld u aan bij uw account met behulp van de
azd auth login
opdracht.azd auth login
Kopieer de apparaatcode die wordt weergegeven in de uitvoer en druk op Enter om u aan te melden.
Start by copying the next code: XXXXXXXXX Then press enter and continue to log in from your browser...
Belangrijk
Als u een buiten-netwerk-VM of GitHub Codespace gebruikt, veroorzaken bepaalde Azure-beveiligingsbeleidsregels conflicten wanneer ze worden gebruikt om u aan te melden.
azd auth login
Als u hier een probleem krijgt, kunt u de tijdelijke oplossing azd-verificatie volgen. Dit omvat het gebruik van eencurl
aanvraag voor de localhost-URL waarnaar u bent omgeleid nadat u deze hebt uitgevoerdazd auth login
.Verifieer met uw referenties op de aanmeldingspagina van uw organisatie.
Controleer of u verbinding probeert te maken vanuit de Azure CLI.
Controleer het bericht 'Verificatie van apparaatcode voltooid. Aangemeld bij Azure." wordt weergegeven in de oorspronkelijke terminal.
Waiting for you to complete authentication in the browser... Device code authentication completed. Logged in to Azure.
tijdelijke oplossing azd auth
Voor deze tijdelijke oplossing moet de Azure CLI zijn geïnstalleerd.
Open een terminalvenster en meld u aan met de Azure CLI met behulp van de
az login
opdracht waarop de--scope
parameter is ingesteldhttps://graph.microsoft.com/.default
.az login --scope https://graph.microsoft.com/.default
U wordt omgeleid naar een verificatiepagina op een nieuw tabblad om een browsertoegangstoken te maken, zoals wordt weergegeven in het volgende voorbeeld:
https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?clientid=<your_client_id>.
Kopieer de localhost-URL van de webpagina die u hebt ontvangen nadat u zich hebt aangemeld.
azd auth login
Gebruik in een nieuw terminalvenster de volgende
curl
aanvraag om u aan te melden. Zorg ervoor dat u de<localhost>
tijdelijke aanduiding vervangt door de localhost-URL die u in de vorige stap hebt gekopieerd.curl <localhost>
Een geslaagde aanmelding voert een HTML-webpagina uit, zoals wordt weergegeven in het volgende voorbeeld:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="refresh" content="60;url=https://docs.microsoft.com/cli/azure/"> <title>Login successfully</title> <style> body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } code { font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; display: inline-block; background-color: rgb(242, 242, 242); padding: 12px 16px; margin: 8px 0px; } </style> </head> <body> <h3>You have logged into Microsoft Azure!</h3> <p>You can close this window, or we will redirect you to the <a href="https://docs.microsoft.com/cli/azure/">Azure CLI documentation</a> in 1 minute.</p> <h3>Announcements</h3> <p>[Windows only] Azure CLI is collecting feedback on using the <a href="https://learn.microsoft.com/windows/uwp/security/web-account-manager">Web Account Manager</a> (WAM) broker for the login experience.</p> <p>You may opt-in to use WAM by running the following commands:</p> <code> az config set core.allow_broker=true<br> az account clear<br> az login </code> </body> </html>
Sluit de huidige terminal en open de oorspronkelijke terminal. U ziet nu een JSON-lijst met uw abonnementen.
Kopieer het
id
veld van het abonnement dat u wilt gebruiken.Stel uw abonnement in met behulp van de
az account set
opdracht.az account set --subscription <subscription_id>
Resources voor uw cluster maken en implementeren
Als u de toepassing wilt implementeren, gebruikt u de azd up
opdracht om alle objecten te maken die nodig zijn om de AKS Store-toepassing uit te voeren.
- Een
azure.yaml
bestand definieert de gewenste status van een cluster, zoals welke containerinstallatiekopieën moeten worden opgehaald en bevat de volgende Kubernetes-implementaties en -services:
- Webwinkel: Webtoepassing voor klanten om producten te bekijken en bestellingen te plaatsen.
- Productservice: toont productgegevens.
- Orderservice: Orders plaatsen.
- Rabbit MQ: Berichtenwachtrij voor een orderwachtrij.
Notitie
Het is niet raadzaam stateful containers, zoals Rabbit MQ, uit te voeren zonder permanente opslag voor productie. Deze worden hier gebruikt voor het gemak, maar we raden u aan beheerde services te gebruiken, zoals Azure Cosmos DB of Azure Service Bus.
Toepassingsbronnen implementeren
Met azd
de sjabloon voor deze quickstart maakt u een nieuwe resourcegroep met een AKS-cluster en een Azure Key Vault. De sleutelkluis slaat clientgeheimen op en voert de services uit in de pets
naamruimte.
Maak alle toepassingsbronnen met behulp van de
azd up
opdracht.azd up
azd up
voert alle hooks in deazd-hooks
map uit om de toepassingsservices vooraf te registreren, in te richten en te implementeren.Pas hooks aan om aangepaste code toe te voegen aan de
azd
werkstroomfasen. Zie deazd
naslaginformatie over hooks voor meer informatie.Selecteer een Azure-abonnement voor uw factureringsgebruik.
? Select an Azure Subscription to use: [Use arrows to move, type to filter] > 1. My Azure Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
Selecteer een regio waar u uw toepassing wilt implementeren.
Select an Azure location to use: [Use arrows to move, type to filter] 1. (South America) Brazil Southeast (brazilsoutheast) 2. (US) Central US (centralus) 3. (US) East US (eastus) > 43. (US) East US 2 (eastus2) 4. (US) East US STG (eastusstg) 5. (US) North Central US (northcentralus) 6. (US) South Central US (southcentralus)
azd
voert automatisch de preprovision- en postprovision-hooks uit om de resources voor uw toepassing te maken. Dit proces kan enkele minuten duren. Als u klaar bent, ziet u een uitvoer die lijkt op het volgende voorbeeld:SUCCESS: Your workflow to provision and deploy to Azure completed in 9 minutes 40 seconds.
Terraform-plannen genereren
Binnen uw Azure Developer-sjabloon bevat de /infra/terraform
map alle code die wordt gebruikt om het Terraform-plan te genereren.
Terraform implementeert en voert opdrachten uit met behulp terraform apply
van de inrichtingsstap.azd
Als u klaar bent, ziet u een uitvoer die lijkt op het volgende voorbeeld:
Plan: 5 to add, 0 to change, 0 to destroy.
...
Saved the plan to: /workspaces/aks-store-demo/.azure/aks-terraform-azd/infra/terraform/main.tfplan
De toepassing testen
Wanneer de toepassing wordt uitgevoerd, maakt een Kubernetes-service de front-end van de toepassing beschikbaar op internet. Dit proces kan enkele minuten duren.
Stel uw naamruimte in als de demonaamruimte
pets
met behulp van dekubectl set-context
opdracht.kubectl config set-context --current --namespace=pets
Controleer de status van de geïmplementeerde pods met behulp van de
kubectl get pods
opdracht. Zorg ervoor dat alle pods zijnRunning
voordat u doorgaat.kubectl get pods
Controleer op een openbaar IP-adres voor de store-front-toepassing en controleer de voortgang met behulp van de
kubectl get service
opdracht met het--watch
argument.kubectl get service store-front --watch
De UITVOER VAN HET EXTERNE IP-adres voor de
store-front
service wordt in eerste instantie weergegeven als in behandeling:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Zodra het EXTERNAL-IP-adres is gewijzigd in een daadwerkelijk openbaar IP-adres, gebruikt
CTRL-C
u dit om hetkubectl
controleproces te stoppen.In de volgende voorbeelduitvoer ziet u een geldig openbaar IP-adres dat is toegewezen aan de service:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Open een webbrowser naar het externe IP-adres van uw service om de Azure Store-app in actie te zien.
Het cluster verwijderen
Zodra u klaar bent met de quickstart, schoont u overbodige resources op om Azure-kosten te voorkomen.
Verwijder alle resources die u in de quickstart hebt gemaakt met behulp van de
azd down
opdracht.azd down
Bevestig uw beslissing om alle gebruikte resources uit uw abonnement te verwijderen door te typen
y
en op te drukkenEnter
.? Total resources to delete: 14, are you sure you want to continue? (y/N)
Leegmaken toestaan om de quickstart-variabelen opnieuw te gebruiken, indien van toepassing door te typen
y
en op te drukkenEnter
.[Warning]: These resources have soft delete enabled allowing them to be recovered for a period or time after deletion. During this period, their names can't be reused. In the future, you can use the argument --purge to skip this confirmation.
Problemen met Terraform in Azure oplossen
Veelvoorkomende problemen bij het gebruik van Terraform in Azure oplossen.
Volgende stappen
In deze quickstart hebt u een Kubernetes-cluster geïmplementeerd en vervolgens een eenvoudige toepassing met meerdere containers erop geïmplementeerd. Deze voorbeeldtoepassing is alleen bedoeld voor demodoeleinden en vertegenwoordigt niet alle aanbevolen procedures voor Kubernetes-toepassingen. Zie de richtlijnen voor AKS-oplossingen voor meer informatie over het maken van volledige oplossingen met AKS voor productie.
Als u meer wilt weten over AKS en een volledig voorbeeld van code-naar-implementatie wilt doorlopen, gaat u verder met de zelfstudie over het Kubernetes-cluster.