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 Einstellungen:

    • Gehen Sie unter Projektdetails wie folgt vor:
      • Abonnement: Wählen Sie das Azure-Abonnement aus, das Sie für diesen AKS-Cluster verwenden möchten.
      • Ressourcengruppe: Wählen Sie Neu erstellen aus, geben Sie einen Ressourcengruppennamen ein (z. B. myResourceGroup), und wählen Sie dann OK aus. 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:
      • Voreingestellte Clusterkonfiguration: Wählen Sie Dev/Test aus. 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: Erstellen eines AKS-Clusters – Voreinstellungsoptionen im Portal.

      • Kubernetes-Clustername: Geben Sie einen Clusternamen ein, z. B. myAKSCluster.

      • Region: Wählen Sie eine Region aus, z. B. USA, Osten 2.

      • Verfügbarkeitszonen: Wählen Sie die Option Keine aus.

      • AKS-Tarif: Wählen Sie Free aus.

      • Übernehmen Sie für die übrigen Einstellungen die Standardwerte, und wählen Sie Weiter aus.

        Screenshot, der zeigt, wie Sie einen AKS-Cluster im Azure-Portal konfigurieren.

  5. Konfigurieren Sie auf der Registerkarte Knotenpools die folgenden Einstellungen:

    • Wählen Sie Knotenpool hinzufügen aus, und geben Sie einen Knotenpoolnamen ein, z. B. nplinux.

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

    • Betriebssystem-SKU: Wählen Sie Ubuntu Linux aus.

    • Verfügbarkeitszonen: Wählen Sie die Option Keine aus.

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

    • Knotengröße: Wählen Sie Größe auswählen aus. Wählen Sie auf der Seite VM-Größe auswählen die Option D2s_v3 und dann Auswählen aus.

    • Übernehmen Sie für die übrigen Einstellungen die Standardwerte, und wählen Sie Hinzufügen aus.

      Screenshot, der zeigt, wie ein Knotenpool mit Ubuntu Linux erstellt wird.

  6. Wählen Sie Überprüfen und Erstellen aus, um die Überprüfung für die Clusterkonfiguration auszuführen. Wenn die Überprüfung abgeschlossen ist, wählen Sie Erstellen aus.

    Die Erstellung des AKS-Clusters dauert einige Minuten. Wenn die Bereitstellung abgeschlossen ist, navigieren Sie zu Ihrer Ressource, indem Sie Zur Ressource wechseln auswählen oder zur Ressourcengruppe des AKS-Clusters navigieren und die AKS-Ressource direkt auswählen.

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

Verwenden Sie eine Manifestdatei, um alle Objekte zu erstellen, die für die Ausführung der AKS Store-Anwendung erforderlich 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: Beispielarchitektur für einen Azure-Store.

  • 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. Überprüfen Sie den Status der bereitgestellten Pods mithilfe des Befehls kubectl get pods. 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 der AKS Store-Beispielanwendung

Löschen des Clusters

Wenn Sie nicht planen, die AKS-Tutorialreihe 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 diesem Schnellstart haben Sie einen Kubernetes-Cluster und darin eine einfache Anwendung mit mehreren Containern 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 AKS sowie ein vollständiges Beispiel vom Code bis zur Bereitstellung finden Sie in der Tutorialreihe zu Kubernetes-Clustern.