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 biedt alleen ondersteuning voor verificatie bij Azure met de Azure CLI. Verificatie met behulp van Azure PowerShell wordt niet ondersteund. Daarom kunt u de Azure PowerShell-module gebruiken bij het uitvoeren van uw Terraform-werk, moet u zich eerst verifiëren bij Azure.
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 = 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 = 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.
Azure Kubernetes Service