Schnellstart: Bereitstellen eines Azure Kubernetes Service-Clusters (AKS) mithilfe von Terraform
Azure Kubernetes Service (AKS) ist ein verwalteter Kubernetes-Dienst, mit dem Sie schnell Cluster bereitstellen und verwalten können. In dieser Schnellstartanleitung führen Sie die folgenden Schritte aus:
- Erstellen Sie einen AKS-Cluster mithilfe von Terraform.
- Führen Sie eine Beispielanwendung mit mehreren Containern mit einer Gruppe von Microservices und Web-Front-Ends aus, die ein Einzelhandelsszenario simulieren.
Hinweis
Um schnell mit der Bereitstellung eines AKS-Clusters zu beginnen, enthält dieser Artikel Schritte zum Bereitstellen eines Clusters mit Standardeinstellungen nur zu Evaluierungszwecken. Bevor Sie einen produktionsbereiten Cluster bereitstellen, empfehlen wir Ihnen, sich mit unserer Baselinereferenzarchitektur vertraut zu machen, um zu prüfen, inwiefern sie Ihren Geschäftsanforderungen entspricht.
Voraussetzungen
- Für diese Schnellstartanleitung werden Grundkenntnisse in Bezug auf die Kubernetes-Konzepte vorausgesetzt. Weitere Informationen finden Sie unter Grundlegende Kubernetes-Konzepte für Azure Kubernetes Service (AKS).
- Sie benötigen ein Azure-Konto mit einem aktiven Abonnement. Erstellen Sie ein kostenloses Konto, falls Sie keines besitzen.
- Befolgen Sie abhängig von Ihrer Befehlszeilenschnittstelle die entsprechenden Anweisungen.
- Weitere Informationen zum Erstellen eines Windows Server-Knotenpools finden Sie unter Erstellen eines AKS-Clusters, der Windows Server-Container unterstützt.
Hinweis
Der Azure Linux-Knotenpool ist jetzt allgemein verfügbar (GA). Informationen zu den Vorteilen und Bereitstellungsschritten finden Sie in der Einführung in den Azure-Linux-Containerhost für AKS.
- Installieren und konfigurieren Sie Terraform.
- Laden Sie kubectl herunter.
- Erstellen eines Zufallswerts für den Azure-Ressourcengruppennamen mithilfe von random_pet.
- Erstellen einer Azure-Ressourcengruppe mithilfe von azurerm_resource_group.
- Greifen Sie auf die Konfiguration des AzureRM-Anbieters zu, um die Azure-Objekt-ID mithilfe von azurerm_client_config abzurufen.
- Erstellen Sie einen Kubernetes-Cluster mithilfe von azurerm_kubernetes_cluster.
- Erstellen Sie eine AzAPI-Ressource azapi_resource.
- Erstellen Sie eine AzAPI-Ressource, um mithilfe von azapi_resource_action ein SSH-Schlüsselpaar zu generieren.
Anmelden bei Ihrem Azure-Konto
Melden Sie sich zunächst bei Ihrem Azure-Konto an, und authentifizieren Sie sich mit einer der im folgenden Abschnitt beschriebenen Methoden.
Terraform unterstützt nur die Authentifizierung bei Azure mithilfe der Azure-Befehlszeilenschnittstelle (Command Line Interface, CLI). Die Authentifizierung mit Azure PowerShell wird nicht unterstützt. Obwohl Sie das Azure PowerShell-Modul bei der Arbeit mit Terraform verwenden können, müssen Sie sich daher zunächst bei Azure authentifizieren.
Implementieren des Terraform-Codes
Hinweis
Der Beispielcode für diesen Artikel befindet sich im Azure Terraform-GitHub-Repository. Sie können die Protokolldatei anzeigen, die die Testergebnisse von aktuellen und früheren Terraform-Versionen enthält.
Betrachten Sie die weiteren Artikel und Beispielcodes zur Verwendung von Terraform zum Verwalten von Azure-Ressourcen.
Erstellen Sie ein Verzeichnis, in dem Sie den Terraform-Beispielcode testen können, und legen Sie es als aktuelles Verzeichnis fest.
Erstellen Sie eine Datei namens
providers.tf
, und fügen Sie den folgenden Code ein: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 {} }
Erstellen Sie eine Datei namens
ssh.tf
, und fügen Sie den folgenden Code ein: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 }
Erstellen Sie eine Datei namens
main.tf
, und fügen Sie den folgenden Code ein:# 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" } }
Erstellen Sie eine Datei namens
variables.tf
, und fügen Sie den folgenden Code ein: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" }
Erstellen Sie eine Datei namens
outputs.tf
, und fügen Sie den folgenden Code ein: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 }
Initialisieren von Terraform
Führen Sie zum Initialisieren der Terraform-Bereitstellung terraform init aus. Mit diesem Befehl wird der Azure-Anbieter heruntergeladen, der zum Verwalten Ihrer Azure-Ressourcen erforderlich ist.
terraform init -upgrade
Die wichtigsten Punkte:
- Der Parameter
-upgrade
aktualisiert die erforderlichen Anbieter-Plug-Ins auf die neueste Version, die den Versionseinschränkungen der Konfiguration entspricht.
Erstellen eines Terraform-Ausführungsplans
Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.
terraform plan -out main.tfplan
Die wichtigsten Punkte:
- Durch den Befehl
terraform plan
wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen. - Der optionale Parameter
-out
ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters-out
wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
Anwenden eines Terraform-Ausführungsplans
Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.
terraform apply main.tfplan
Die wichtigsten Punkte:
- Der Beispielbefehl
terraform apply
setzt voraus, dass Sie zuvorterraform plan -out main.tfplan
ausgeführt haben. - Wenn Sie einen anderen Dateinamen für den Parameter
-out
angegeben haben, verwenden Sie denselben Dateinamen im Aufruf vonterraform apply
. - Wenn Sie den Parameter
-out
nicht verwendet haben, rufen Sieterraform apply
ohne Parameter auf.
Überprüfen der Ergebnisse
Mit dem folgenden Befehl rufen Sie den Namen der Azure-Ressourcengruppe ab.
resource_group_name=$(terraform output -raw resource_group_name)
Mit dem Befehl az aks list zeigen Sie den Namen Ihres neuen Kubernetes-Clusters an.
az aks list \ --resource-group $resource_group_name \ --query "[].{\"K8s cluster name\":name}" \ --output table
Mit dem folgenden Befehl rufen Sie die Kubernetes-Konfiguration aus dem Terraform-Status ab und speichern sie in einer Datei, die
kubectl
lesen kann.echo "$(terraform output kube_config)" > ./azurek8s
Vergewissern Sie sich, dass der vorherige Befehl kein ASCII EOT-Zeichen hinzugefügt hat, indem Sie den Befehl „“ verwenden.
cat ./azurek8s
Die wichtigsten Punkte:
- Wenn am Anfang
<< EOT
und am EndeEOT
angezeigt wird, entfernen Sie diese Zeichen aus der Datei. Sie erhalten andernfalls unter Umständen die folgende Fehlermeldung:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
- Wenn am Anfang
Mit dem folgenden Befehl legen Sie eine Umgebungsvariable fest, damit
kubectl
die korrekte Konfiguration übernehmen kann.export KUBECONFIG=./azurek8s
Überprüfen Sie die Integrität des Clusters mithilfe des Befehls „
kubectl get nodes
“.kubectl get nodes
Die wichtigsten Punkte:
- Beim Erstellen des AKS-Clusters wurde die Überwachung aktiviert, um Integritätsmetriken für die Clusterknoten und die Pods zu erfassen. Diese Integritätsmetriken sind im Azure-Portal verfügbar. Weitere Informationen zur Überwachung der Integrität von Containern finden Sie unter Überwachen der Integrität von Azure Kubernetes Service.
- Beim Anwenden des Terraform-Ausführungsplans wurden mehrere Schlüsselwerte als Ausgabe klassifiziert. Beispielsweise werden die Hostadresse, der AKS-Clusterbenutzername und das AKS-Clusterkennwort ausgegeben.
Bereitstellen der Anwendung
Zum Bereitstellen der Anwendung verwenden Sie eine Manifestdatei, um alle Objekte zu erstellen, die für die Ausführung der AKS Store-Anwendungerforderlich sind. Eine Kubernetes-Manifestdatei definiert den gewünschten Zustand (Desired State) eines Clusters – also beispielsweise, welche Containerimages ausgeführt werden sollen. Das Manifest umfasst die folgenden Kubernetes-Bereitstellungen und -Dienste:
- Store Front: Webanwendung für Kund*innen zum Anzeigen von Produkten und Aufgeben von Bestellungen
- Product Service: zeigt Produktinformationen an.
- Order Service: dient der Aufgabe von Bestellungen.
- Rabbit MQ: Nachrichtenwarteschlange für eine Bestellwarteschlange
Hinweis
Zustandsbehaftete Container wie Rabbit MQ sollten nicht ohne permanenten Speicher für die Produktion ausgeführt werden. Sie werden hier der Einfachheit halber verwendet, jedoch sollten verwaltete Dienste wie Azure CosmosDB oder Azure Service Bus verwendet werden.
Erstellen Sie eine Datei namens
aks-store-quickstart.yaml
, und fügen Sie das folgende Manifest ein: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
Eine Aufschlüsselung der YAML-Manifestdateien finden Sie unter Bereitstellungen und YAML-Manifeste.
Wenn Sie die YAML-Datei lokal erstellen und speichern, können Sie die Manifestdatei in Ihr Standardverzeichnis in CloudShell hochladen, indem Sie die Schaltfläche Dateien hochladen/herunterladen auswählen und die Datei aus Ihrem lokalen Dateisystem auswählen.
Stellen Sie die Anwendung über den Befehl „
kubectl apply
“ bereit, und geben Sie den Namen Ihres YAML-Manifests an.kubectl apply -f aks-store-quickstart.yaml
Die folgende Beispielausgabe zeigt die Bereitstellungen und Dienste:
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
Testen der Anwendung
Wenn die Anwendung ausgeführt wird, macht ein Kubernetes-Dienst das Anwendungs-Front-End im Internet verfügbar. Dieser Vorgang kann einige Minuten dauern.
Überprüfen Sie den Status der bereitgestellten Pods mithilfe des Befehls
kubectl get pods
. Stellen Sie sicher, dass alle Pods den StatusRunning
haben, bevor Sie fortfahren.kubectl get pods
Suchen Sie nach einer öffentlichen IP-Adresse für die Store-Front-Anwendung. Verwenden Sie zum Überwachen des Fortschritts den Befehl
kubectl get service
mit dem Argument--watch
:kubectl get service store-front --watch
Die Ausgabe von EXTERNAL-IP für den
store-front
-Dienst lautet anfangs pending (ausstehend):NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Nachdem die externe IP-Adresse (EXTERNAL-IP) von ausstehend in eine tatsächliche öffentliche IP-Adresse geändert wurde, verwenden Sie
CTRL-C
, um diekubectl
-Überwachung zu beenden.Die folgende Beispielausgabe zeigt eine gültige öffentliche IP-Adresse, die dem Dienst zugewiesen ist:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Öffnen Sie einen Webbrowser mit der externen IP-Adresse Ihres Dienstes, um die Azure Store-App in Aktion zu sehen.
Bereinigen von Ressourcen
Löschen von AKS-Ressourcen
Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie die folgenden Schritte aus:
Führen Sie terraform plan aus, und geben Sie das Flag
destroy
an.terraform plan -destroy -out main.destroy.tfplan
Die wichtigsten Punkte:
- Durch den Befehl
terraform plan
wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen. - Der optionale Parameter
-out
ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters-out
wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
- Durch den Befehl
Führen Sie zum Anwenden des Ausführungsplans den Befehl terraform apply aus.
terraform apply main.destroy.tfplan
Löschen eines Dienstprinzipals
Mit dem folgenden Befehl rufen Sie die Dienstprinzipal-ID ab.
sp=$(terraform output -raw sp)
Löschen Sie den Dienstprinzipal mithilfe des Befehls az ad sp delete.
az ad sp delete --id $sp
- Installieren der Azure Developer CLI (AZD)
- Installieren und konfigurieren Sie Terraform.
- Sie können den Anwendungscode im Repository Azure-Samples/aks-store-demo überprüfen.
Klonen der Azure Developer CLI-Vorlage
Mit der Azure Developer CLI können Sie schnell Beispiele aus dem Repository Azure-Samples herunterladen. In unserer Schnellstartanleitung laden Sie die Anwendung aks-store-demo
herunter. Weitere Informationen zu diesen Optionen finden Sie in der Übersicht zu azd
.
Klonen Sie die Demovorlage für einen AKS-Store aus dem Azure-Samples-Repository, indem Sie den Befehl
azd init
mit dem Parameter--template
ausführen.azd init --template Azure-Samples/aks-store-demo
Geben Sie einen Umgebungsnamen für Ihr Projekt ein, der nur alphanumerische Zeichen und Bindestriche enthält, z. B. aks-terraform-1.
Enter a new environment name: aks-terraform-1
Anmelden beim Azure-Cloudkonto
Die azd
-Vorlage enthält den gesamten Code, der zum Erstellen der Dienste erforderlich ist. Sie müssen sich jedoch bei Ihrem Azure-Konto anmelden, um die Anwendung in AKS zu hosten.
Melden Sie sich mithilfe des Befehls
azd auth login
bei Ihrem Konto an.azd auth login
Kopieren Sie den Gerätecode, der in der Ausgabe angezeigt wird, und drücken Sie die EINGABETASTE, um sich anzumelden.
Start by copying the next code: XXXXXXXXX Then press enter and continue to log in from your browser...
Wichtig
Wenn Sie eine VM außerhalb des Netzwerks oder GitHub Codespace verwenden, verursachen bestimmte Azure-Sicherheitsrichtlinien Konflikte bei der Anmeldung über
azd auth login
. Wenn Sie hierbei Probleme haben, können Sie die erläuterte Problemumgehung mit „azd auth“ und einercurl
-Anforderung an die Localhost-URL verwenden, zu der Sie nach dem Ausführen vonazd auth login
weitergeleitet wurden.Authentifizieren Sie sich mit Ihren Anmeldeinformationen auf der Anmeldeseite Ihrer Organisation.
Bestätigen Sie, dass Sie die Person sind, die versucht, eine Verbindung mit der Azure CLI herzustellen.
Vergewissern Sie sich, dass die Meldung „Gerätecodeauthentifizierung abgeschlossen. Bei Azure angemeldet.“ im ursprünglichen Terminal angezeigt wird.
Waiting for you to complete authentication in the browser... Device code authentication completed. Logged in to Azure.
Problemumgehung mit „azd auth“
Für diese Problemumgehung müssen Sie die Azure CLI installiert haben.
Öffnen Sie ein Terminalfenster, und melden Sie sich über die Azure CLI mit dem Befehl
az login
an. Legen Sie dabei den Parameter--scope
aufhttps://graph.microsoft.com/.default
fest.az login --scope https://graph.microsoft.com/.default
Sie sollten auf eine Authentifizierungsseite auf einer neuen Registerkarte umgeleitet werden, um ein Browserzugriffstoken zu erstellen, wie im folgenden Beispiel zu sehen:
https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?clientid=<your_client_id>.
Kopieren Sie die Localhost-URL der Webseite, die Sie erhalten haben, nachdem Sie versucht haben, sich mit
azd auth login
anzumelden.Verwenden Sie in einem neuen Terminalfenster die folgende
curl
-Anforderung, um sich anzumelden. Stellen Sie sicher, dass Sie den Platzhalter<localhost>
durch die Localhost-URL ersetzen, die Sie im vorherigen Schritt kopiert haben.curl <localhost>
Bei einer erfolgreichen Anmeldung wird eine HTML-Webseite ausgegeben, wie im folgenden Beispiel zu sehen:
<!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>
Schließen Sie das aktuelle Terminal, und öffnen Sie das ursprüngliche. Ihnen sollte nun eine JSON-Liste mit Ihren Abonnements angezeigt werden.
Kopieren Sie das
id
-Feld des Abonnements, das Sie verwenden möchten.Legen Sie Ihr Abonnement mithilfe des Befehls
az account set
fest.az account set --subscription <subscription_id>
Erstellen und Bereitstellen von Ressourcen für Ihren Cluster
Zum Bereitstellen der Anwendung verwenden Sie den Befehl azd up
, um alle Objekte zu erstellen, die für die Ausführung der AKS Store-Anwendung erforderlich sind.
- Eine Datei vom Typ
azure.yaml
definiert den gewünschten Zustand eines Clusters, z. B. die abzurufenden Containerimages, und enthält die folgenden Kubernetes-Bereitstellungen und -Dienste:
- Store Front: Webanwendung für Kund*innen zum Anzeigen von Produkten und Aufgeben von Bestellungen
- Product Service: zeigt Produktinformationen an.
- Order Service: dient der Aufgabe von Bestellungen.
- Rabbit MQ: Nachrichtenwarteschlange für eine Bestellwarteschlange
Hinweis
Zustandsbehaftete Container wie Rabbit MQ sollten nicht ohne permanenten Speicher für die Produktion ausgeführt werden. Sie werden hier der Einfachheit halber verwendet, jedoch sollten verwaltete Dienste wie Azure Cosmos DB oder Azure Service Bus verwendet werden.
Bereitstellen von Anwendungsressourcen
Mit der azd
-Vorlage für diese Schnellstartanleitung wird eine neue Ressourcengruppe mit einem AKS-Cluster und einer Azure Key Vault-Instanz erstellt. Die Key Vault-Instanz speichert geheime Clientschlüssel und führt die Dienste im Namespace pets
aus.
Erstellen Sie mit dem Befehl
azd up
alle Anwendungsressourcen.azd up
azd up
führt alle Hooks imazd-hooks
-Ordner aus, um die Anwendungsdienste vorab zu registrieren und bereitzustellen.Passen Sie Hooks an, um benutzerdefinierten Code in den
azd
-Workflowphasen hinzuzufügen. Weitere Informationen finden Sie in der Referenz zuazd
-Hooks.Wählen Sie ein Azure-Abonnement für die Abrechnung aus.
? Select an Azure Subscription to use: [Use arrows to move, type to filter] > 1. My Azure Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
Wählen Sie eine Region aus, in der Ihre Anwendung bereitgestellt werden soll.
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
führt automatisch die Hooks vor und nach der Bereitstellung aus, um die Ressourcen für Ihre Anwendung zu erstellen. Dieser Vorgang kann einige Minuten dauern. Anschließend sollte eine Ausgabe ähnlich der folgenden Beispielausgabe angezeigt werden:SUCCESS: Your workflow to provision and deploy to Azure completed in 9 minutes 40 seconds.
Generieren von Terraform-Plänen
In Ihrer Azure-Entwicklervorlage enthält der Ordner /infra/terraform
den gesamten Code, der zum Generieren des Terraform-Plans verwendet wird.
Terraform stellt Befehle bereit und führt sie aus, die terraform apply
als Teil des azd
-Bereitstellungsschritts verwenden. Anschließend sollte eine Ausgabe ähnlich der folgenden Beispielausgabe angezeigt werden:
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
Testen der Anwendung
Wenn die Anwendung ausgeführt wird, macht ein Kubernetes-Dienst das Anwendungs-Front-End im Internet verfügbar. Dieser Vorgang kann einige Minuten dauern.
Verwenden Sie den Befehl
kubectl set-context
, um Ihren Namespace auf den Demonamespacepets
festzulegen.kubectl config set-context --current --namespace=pets
Überprüfen Sie den Status der bereitgestellten Pods mithilfe des Befehls
kubectl get pods
. Stellen Sie sicher, dass alle Pods den StatusRunning
haben, bevor Sie fortfahren.kubectl get pods
Suchen Sie nach einer öffentlichen IP-Adresse für die Storefront-Anwendung, und überwachen Sie den Fortschritt mithilfe des Befehls
kubectl get service
mit dem Argument--watch
.kubectl get service store-front --watch
Die Ausgabe von EXTERNAL-IP für den
store-front
-Dienst lautet anfangs pending (ausstehend):NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Nachdem die externe IP-Adresse (EXTERNAL-IP) von ausstehend in eine tatsächliche öffentliche IP-Adresse geändert wurde, verwenden Sie
CTRL-C
, um diekubectl
-Überwachung zu beenden.Die folgende Beispielausgabe zeigt eine gültige öffentliche IP-Adresse, die dem Dienst zugewiesen ist:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Öffnen Sie einen Webbrowser mit der externen IP-Adresse Ihres Dienstes, um die Azure Store-App in Aktion zu sehen.
Löschen des Clusters
Bereinigen Sie nach Abschluss der Schnellstartanleitung die nicht benötigten Ressourcen, um Azure-Gebühren zu vermeiden.
Löschen Sie alle in der Schnellstartanleitung erstellten Ressourcen mit dem Befehl
azd down
.azd down
Bestätigen Sie Ihre Entscheidung, alle verwendeten Ressourcen aus Ihrem Abonnement zu entfernen, indem Sie
y
eingeben und dieEnter
-TASTE drücken.? Total resources to delete: 14, are you sure you want to continue? (y/N)
Erlauben Sie bei der Bereinigung, dass die Variablen aus dieser Schnellstartanleitung ggf. wiederverwendet werden, indem Sie
y
eingeben und dann dieEnter
-TASTE drücken.[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.
Problembehandlung für Terraform in Azure
Behandeln Sie allgemeine Probleme bei der Verwendung von Terraform in Azure.
Nächste Schritte
In dieser Schnellstartanleitung haben Sie einen Kubernetes-Cluster und eine Beispielanwendung mit mehreren Containern dafür bereitgestellt. Diese Beispielanwendung dient nur zu Demozwecken und stellt nicht alle bewährten Methoden für Kubernetes-Anwendungen dar. Anleitungen zum Erstellen vollständiger Lösungen mit AKS für die Produktion finden Sie unter AKS-Lösungsleitfaden.
Weitere Informationen zu Azure Kubernetes Service (AKS) sowie ein vollständiges Beispiel vom Code bis zur Bereitstellung finden Sie im Tutorial zu Kubernetes-Clustern.
Azure Kubernetes Service