Übung: Bereitstellen eines Azure Kubernetes Service-Clusters mit Azure CNI

Abgeschlossen

Hinweis

Diese Übung ist optional. Wenn Sie die Schritte in dieser Übung ausführen möchten, müssen Sie zuvor ein Azure-Abonnement erstellen. Wenn Sie kein Azure-Konto besitzen oder gerade kein Konto erstellen möchten, können Sie die Anweisungen durchlesen und die dargelegten Informationen nachvollziehen.

In dieser Übung stellen Sie virtuelle Netzwerke, Subnetze und Identitäten und anschließend mithilfe des Azure Container Networking Interface (CNI)-Plug-Ins einen Azure Kubernetes Service (AKS)-Cluster bereit.

Sie haben der IT-Abteilung Ihres Unternehmens die Informationen weitergegeben, die Sie zu den Anwendungsanforderungen, zur VM-Dimensionierung und zur Netzwerkgröße gesammelt haben. Die IT-Abteilung hat einige Netzwerkadressbereiche bereitgestellt, die Sie für den Cluster verwenden können.

In der folgenden Tabelle sind die Anforderungen und die IP-Adressen aufgeführt, die von der IT-Abteilung bereitgestellt wurden:

Element BESCHREIBUNG IP-Adressen
AKS-Subnetz IP-Adressen für die Knoten und Pods im Cluster. 248 verwendbare IP-Adressen erforderlich. 10.150.20.0/24
Kubernetes-Dienstsubnetz IP-Adressen, die im Cluster für Kubernetes-Dienste verwendet werden. Dürfen nicht mit anderen virtuellen Netzwerken oder lokalen Netzwerken in Konflikt stehen. 10.240.0.0/24
IP-Adresse des DNS-Diensts (Domain Name System) Muss sich im Kubernetes-Dienstsubnetz befinden, darf aber nicht die erste IP-Adresse aus dem verfügbaren Bereich sein. 10.240.0.10
  • Für das AKS-Subnetz haben Sie festgestellt, dass Sie 248 verwendbare IP-Adressen benötigen. Ihre IT-Abteilung hat Ihnen das Netzwerk 10.150.20.0/24 zugeteilt, das 251 verwendbare IP-Adressen enthält, nachdem Sie die fünf Adressen abgezogen haben, die Azure in jedem Subnetz reserviert.
  • Das Kubernetes-Dienstsubnetz ist eine Gruppe von IP-Adressen, die nicht in anderen virtuellen Azure-Netzwerken verwendet werden und keinen Konflikt mit lokalen Netzwerkbereichen verursachen. Dieser Adressbereich wird immer nur innerhalb des jeweiligen Clusters verwendet. Ihre IT-Abteilung hat angegeben, dass Sie 10.240.0.0/24 verwenden sollen.
  • Die IP-Adresse des DNS-Diensts ist eine einzelne IP-Adresse innerhalb des Adressbereichs des Kubernetes-Dienstsubnetzes, die aber nicht die erste IP-Adresse in diesem Bereich sein darf. Sie haben sich entschieden, 10.240.0.10 als DNS-IP-Adresse zu verwenden.

Erstellen des virtuellen Netzwerks und des Subnetzes

Für diese Übung erstellen Sie ein virtuelles Netzwerk und ein Subnetz. In einer realen Umgebung haben Sie möglicherweise ein Team in Ihrer IT-Abteilung, das für die Verwaltung von Netzwerken verantwortlich ist und diese Ressourcen für Sie erstellt.

  1. Starten Sie Azure Cloud Shell.

  2. Falls Sie noch nicht bei Ihrem Konto angemeldet sind, melden Sie beim Azure-Portal an.

    az login
    
  3. Wählen Sie eine Azure-Region in Ihrer Nähe aus, z. B. eastus. Speichern Sie den Wert in einer Umgebungsvariable, damit Sie ihn während der Übung verwenden können.

    AKSLocation=eastus
    
  4. Erstellen Sie mithilfe des Befehls az group create eine Ressourcengruppe (AKSLearn) für die Ressourcen in dieser Übung.

    az group create --location $AKSLocation --name AKSLearn
    
  5. Erstellen Sie mit dem Befehl az network vnet create ein virtuelles Netzwerk (AKSVirtualNetwork).

    az network vnet create \
        --name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --address-prefixes 10.150.0.0/16  \
        --location $AKSLocation
    
  6. Erstellen Sie mit dem Befehl az network vnet subnet create das Subnetz AKSSubnet, und geben Sie den Adressbereich an, der von der IT-Abteilung angegeben wurde.

    az network vnet subnet create \
        --resource-group AKSLearn \
        --vnet-name AKSVirtualNetwork \
        --name AKSSubnet \
        --address-prefixes 10.150.20.0/24
    

Erstellen einer verwalteten Azure-Identität

Sie müssen eine verwaltete Azure-Identität für AKS erstellen, um auf Ressourcen in Ihrem Azure-Abonnement zuzugreifen. Die folgenden beiden Befehle erstellen eine verwaltete Azure-Identität und speichern ihren eindeutigen ID-Wert zur späteren Verwendung in einer Umgebungsvariable.

  1. Erstellen Sie mithilfe des Befehls az identity create die verwaltete Azure-Identität AKSIdentity.

    az identity create \
        --name AKSIdentity \
        --resource-group AKSLearn
    
  2. Rufen Sie die ID der verwalteten Identität mithilfe des Befehls az identity show ab, und speichern Sie sie zur späteren Verwendung in einer Umgebungsvariablen (identityId).

    identityId=$(az identity show \
        --name AKSIdentity \
        --resource-group AKSLearn \
        --query id \
        --output tsv)
    

Erstellen eines AKS-Clusters

  1. Rufen Sie die Ressourcen-ID des Subnetzes mithilfe des Befehls az network vnet subnet list ab, und speichern Sie sie zur späteren Verwendung in einer Umgebungsvariablen (subnetId).

    subnetId=$(az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[?name=='AKSSubnet'].id" \
        --output tsv)
    
  2. Erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster (AKSCluster).

    az aks create \
        --name AKSCluster \
        --resource-group AKSLearn \
        --location $AKSLocation \
        --network-plugin azure \
        --vnet-subnet-id $subnetId \
        --service-cidr 10.240.0.0/24 \
        --dns-service-ip 10.240.0.10 \
        --generate-ssh-keys \
        --enable-managed-identity \
        --assign-identity $identityId \
        --node-vm-size  Standard_F8s_v2 \
        --node-count 3
    

    In der folgenden Tabelle sind die Parameter des Befehls az aks create beschrieben:

    Parameter Beschreibung
    --name Name des Clusters, der erstellt wird
    --resource-group Ressourcengruppe, in der der Cluster erstellt werden soll
    --location Azure-Region, in der der Cluster erstellt werden soll
    --network-plugin Gibt an, welches Netzwerk-Plug-In verwendet werden soll.
    --vnet-subnet-id Gibt die Ressourcen-ID des zu verwendenden Subnetzes an.
    --service-cidr Gibt den zu verwendenden Adressbereich des Kubernetes-Diensts an.
    --dns-service-ip Gibt die zu verwendende DNS-IP-Adresse an.
    --generate-ssh-keys Erstellt einen Satz von SSH-Schlüsseln zum Schutz der Knoten
    --enable-managed-identity Ermöglicht die Verwendung einer verwalteten Azure-Identität für den Zugriff auf Ressourcen im Azure-Abonnement.
    --assign-identity Gibt den ID-Wert der zu verwendenden verwalteten Azure-Identität an.
    --node-vm-size Gibt die zu verwendende VM-Größe an.
    --node-count Gibt die Anzahl der zu erstellenden Knoten an.
  3. Nachdem der Cluster erfolgreich bereitgestellt wurde, überprüfen Sie mithilfe des Befehls az aks nodepool list die Details des Knotenpools.

    az aks nodepool list \
        --cluster-name AKSCluster \
        --resource-group AKSLearn \
        --output table
    

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

    Name       OsType    VmSize           Count    MaxPods    ProvisioningState    Mode
    ---------  --------  ---------------  -------  ---------  -------------------  ------
    nodepool1  Linux     Standard_F8s_v2  3        30         Succeeded            System
    

    In der Ausgabe können Sie sehen, dass drei Knoten vom Typ „Standard_F8s_v2“ und ein MaxPods-Wert von 30 vorhanden sind und dass der Knotenpoolmodus System lautet.

Bestätigen der IP-Adressverwendung für den Cluster

  • Überprüfen Sie mithilfe des Befehls az network vnet subnet list, wie viele IP-Adressen vom Cluster verwendet werden.

    az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[].ipConfigurations.length(@)" \
        --output table
    

    Dieser Befehl verwendet eine JMESPath-Abfragezeichenfolge, um zu bestimmen, wie viele ipConfigurations im Subnetz definiert sind. Die maximale Ausgabe sollte 93 sein. Sie haben für den Anfang drei Knoten bereitgestellt, sodass jeder Knoten über eine IP-Adresse verfügt. Für die maximale Anzahl von Pods haben Sie den Standardwert 30 verwendet, sodass jedem Knoten vorab 30 IP-Adressen zugeordnet sind, die von Pods verwendet werden können. Die Gesamtzahl der bisher zugeordneten IP-Adressen ist 3 x nodes + (30 pods * 3 nodes) = 93. Einige Adressen sind jedoch reserviert, sodass ihre Ausgabe weniger sein könnte.

Hinzufügen eines zusätzlichen Knotens zum Cluster

Sehen wir uns an, wie sich das Hochskalieren des Clusters und Hinzufügen eines weiteren Knotens auf die Nutzung der IP-Adressen auswirkt.

  1. Skalieren Sie den Cluster hoch, und fügen Sie einen weiteren Knoten mithilfe des Befehls az aks scale hinzu.

    az aks scale \
        --name AKSCluster \
        --resource-group AKSLearn \
        --node-count=4
    
  2. Nachdem der Befehl erfolgreich ausgeführt wurde, überprüfen Sie die neuen Details des Knotenpools mithilfe des Befehls az aks nodepool list.

    az aks nodepool list \
        --cluster-name AKSCluster \
        --resource-group AKSLearn \
        --output table
    

    Die Ausgabe sollte der folgenden Beispielausgabe ähneln, die zeigt, dass Sie jetzt vier Knoten haben.

    Name       OsType    VmSize           Count    MaxPods    ProvisioningState    Mode
    ---------  --------  ---------------  -------  ---------  -------------------  ------
    nodepool1  Linux     Standard_F8s_v2  4        30         Succeeded            System
    
  3. Überprüfen Sie mithilfe des Befehls az network vnet subnet list, wie viele IP-Adressen nun vom Cluster verwendet werden.

    az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[].ipConfigurations.length(@)" \
        --output table
    

    Dieses Mal sollte das Ergebnis 124 lauten, also 31 mehr als beim letzten Mal. Das ist eine zusätzliche IP-Adresse für den neuen Knoten plus 30 zusätzliche IP-Adressen, die den Pods, die auf diesem Knoten ausgeführt werden, vorab zugeordnet sind. Einige Adressen sind jedoch reserviert, sodass ihre Ausgabe weniger sein könnte.