Schnellstart: Bereitstellen eines Azure Kubernetes Service-Clusters (AKS) mit dem Azure-Portal

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:

  • Bereitstellen eines AKS-Clusters mithilfe des Azure-Portals
  • 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).

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.

Erstellen eines AKS-Clusters

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie auf der Startseite des Azure-Portals Ressource erstellen aus.

  3. Wählen Sie im Abschnitt Kategorien die Option Container>Azure Kubernetes Service (AKS) aus.

  4. Konfigurieren Sie auf der Registerkarte Grundlegende Einstellungen die folgenden Optionen:

    • Gehen Sie unter Projektdetails wie folgt vor:
      • Wählen Sie ein Azure-Abonnement aus.
      • Erstellen Sie eine Azure-Ressourcengruppe, wie z. B. myResourceGroup. Sie können zwar eine vorhandene Ressourcengruppe zu Test- oder Evaluierungszwecken auswählen, es wird jedoch empfohlen, eine Ressourcengruppe zu erstellen, um diese Ressourcen vorübergehend zu hosten und Auswirkungen auf Ihre Produktions- oder Entwicklungsworkloads zu vermeiden.
    • Unter Clusterdetails:
      • Legen Sie die voreingestellte Clusterkonfiguration auf Dev/Test fest. Weitere Informationen zu Voreinstellungskonfigurationen finden Sie unter Voreingestellte Clusterkonfigurationen im Azure-Portal.

        Hinweis

        Sie können die voreingestellte Konfiguration beim Erstellen des Clusters ändern, indem Sie Compare presets (Weiterführende Informationen) lesen und eine andere Option auswählen. Screenshot of Create AKS cluster - portal preset options.

      • Geben Sie unter Kubernetes cluster name (Name des Kubernetes-Clusters) einen Namen ein, etwa myAKSCluster.

      • Wählen Sie eine Region für den AKS-Cluster aus.

      • Legen Sie die Einstellung Verfügbarkeitszonen auf Keine fest.

      • Legen Sie das Preisniveau von AKS auf Kostenlos fest.

      • Übernehmen Sie den ausgewählten Standardwert für Kubernetes-Version.

      • Belassen Sie die Einstellung für das automatische Upgrade auf dem empfohlenen Wert, d. h. Aktiviert mit Patch.

      • Lassen Sie die Einstellung Authentifizierung und Autorisierung auf lokalen Konten mit Kubernetes RBAC festgelegt.

        Screenshot showing how to configure an AKS cluster in Azure portal.

  5. Wählen Sie Weiter aus. Fügen Sie auf der Registerkarte Knotenpools einen neuen Knotenpool hinzu:

    • Klicken Sie auf Knotenpool hinzufügen.

    • Geben Sie einen Knotenpoolnamen ein, z. B. nplinux.

    • Wählen Sie unter Modus die Option Benutzer aus.

    • Wählen Sie für die Betriebssystem-SKUUbuntu Linux aus.

    • Legen Sie die Einstellung Verfügbarkeitszonen auf Keine fest.

    • Lassen Sie das Kontrollkästchen Aktivieren von Azure Spot-Instanzen deaktiviert.

    • Wählen Sie für KnotengrößeGröße auswählen aus. Wählen Sie auf der Seite VM-Größe auswählenD2s_v3 und dann die Schaltfläche Auswählen aus.

    • Lassen Sie die Einstellung der Scale-Methode auf Autoscale festgelegt.

    • Lassen Sie die Felder Mindestknotenanzahl und Maximale Knotenanzahl auf ihre Standardeinstellungen festgelegt.

      Screenshot showing how to create a node pool running Ubuntu Linux.

  6. Lassen Sie alle Einstellungen auf den anderen Registerkarten auf ihre Standardeinstellungen festgelegt, mit Ausnahme der Einstellungen auf der Registerkarte Überwachung. Die Azure Monitor-Features Containereinblicke, verwalteter Azure Monitor-Dienst für Prometheus und Azure Managed Grafana sind standardmäßig aktiviert. Sie können Kosten sparen, indem Sie sie deaktivieren.

  7. Wählen Sie Überprüfen und Erstellen aus, um die Überprüfung für die Clusterkonfiguration auszuführen. Wählen Sie nach Abschluss der Überprüfung Erstellen aus, um den AKS-Cluster zu erstellen.

Die Erstellung des AKS-Clusters dauert einige Minuten. Navigieren Sie nach Abschluss der Bereitstellung wie folgt zu Ihrer Ressource:

  • Wählen Sie Zu Ressource wechseln aus. Oder:
  • Navigieren Sie zur AKS-Clusterressourcengruppe, und wählen Sie die AKS-Ressource aus. In diesem Beispiel suchen Sie nach myResourceGroup und wählen die Ressource myAKSCluster aus.

Herstellen einer Verbindung mit dem Cluster

Verwenden Sie zum Verwalten eines Kubernetes-Clusters den Kubernetes-Befehlszeilenclient kubectl. kubectl ist bei Verwendung von Azure Cloud Shell bereits installiert. Wenn Sie mit der Cloud Shell nicht vertraut sind, arbeiten Sie die Übersicht zu Azure Cloud Shell durch.

Wenn Sie Cloud Shell verwenden, öffnen Sie es mit der Schaltfläche >_ oben im Azure-Portal. Wenn Sie PowerShell lokal verwenden, stellen Sie über den Befehl Connect-AzAccount eine Verbindung mit Azure her. Wenn Sie die Azure CLI lokal verwenden, stellen Sie über den Befehl az login eine Verbindung mit Azure her.

  1. Mit dem Befehl az aks get-credentials können Sie kubectl für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen und die Kubernetes-CLI für ihre Verwendung konfiguriert.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Überprüfen Sie die Verbindung mit Ihrem Cluster mithilfe des Befehls kubectl get, um eine Liste der Clusterknoten zurückzugeben.

    kubectl get nodes
    

    Die folgende Beispielausgabe zeigt den in den vorherigen Schritten erstellten Knoten. Stellen Sie sicher, dass der Knotenstatus Bereit lautet.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31718369-0   Ready    agent   6m44s   v1.15.10
    

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:

Screenshot of Azure Store sample architecture.

  • 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.

  1. Öffnen Sie in Cloud Shell einen Editor, und erstellen Sie eine Datei mit dem Namen aks-store-quickstart.yaml.

  2. Fügen Sie das folgende Manifest in den Editor 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.

  3. 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.

  1. Sehen Sie sich den Status der bereitgestellten Pods mithilfe des Befehls kubectl get pods an. Stellen Sie sicher, dass alle Pods den Status Running haben, bevor Sie fortfahren.

    kubectl get pods
    
  2. 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 die kubectl-Ü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
    
  3. Öffnen Sie einen Webbrowser mit der externen IP-Adresse Ihres Dienstes, um die Azure Store-App in Aktion zu sehen.

    Screenshot of AKS Store sample application.

Löschen des Clusters

Wenn Sie nicht planen, das AKS-Tutorial zu durchlaufen, bereinigen Sie unnötige Ressourcen, um Azure-Gebühren zu vermeiden.

  1. Navigieren Sie im Azure-Portal zur AKS-Clusterressourcengruppe.

  2. Wählen Sie die Option Ressourcengruppe löschen.

  3. Geben Sie den Namen der Ressourcengruppe ein, die Sie löschen möchten, und wählen Sie dann Löschen>Löschen aus.

    Hinweis

    Der AKS-Cluster wurde mit einem systemseitig zugewiesenen verwalteten Identitätssystem erstellt. Diese Identität wird von der Plattform verwaltet und erfordert keine Entfernung.

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.