Bereitstellen eines Kubernetes-Cluster mit der AKS-Engine in Azure Stack Hub

Sie können einen Kubernetes-Cluster in Azure Stack Hub von einer Client-VM bereitstellen, auf der die AKS-Engine ausgeführt wird. In diesem Artikel untersuchen wir das Schreiben einer Clusterspezifikation, indem wir einen Cluster mit der apimodel.json-Datei bereitstellen und Ihren Cluster durch Bereitstellen von MySQL mit Helm überprüfen.

Definieren einer Clusterspezifikation

Sie können eine Clusterspezifikation in einer Dokumentdatei mithilfe des JSON-Formats namens API-Modell angeben. Die AKS-Engine verwendet eine Clusterspezifikation im API-Modell, um den Cluster zu erstellen.

Beispiele für das API-Modell für Ihre Betriebssystem- und AKS-Engine-Versionsnummer für aktuelle Releases finden Sie unter AKS-Engine und entsprechende Imagezuordnung.

  1. Suchen Sie in der Tabelle nach der Versionsnummer der AKS-Engine (z. B. v.0.63.0).
  2. Wählen Sie in der Tabelle API-Modellbeispiele den Link für Ihr Betriebssystem aus, und öffnen Sie diesen.
  3. Klicken Sie auf Raw (Roh). Sie können die URL in den folgenden Anweisungen verwenden.

Eine URL zum API-Modell kann wie folgt aussehen:

https://raw.githubusercontent.com/Azure/aks-engine/master/examples/azure-stack/kubernetes-azurestack.json

Ersetzen Sie in jedem der folgenden Beispiele <URL for the API Model> durch die URL.

Aktualisieren des API-Modells

Dieser Abschnitt zeigt das Erstellen eines API-Modells für Ihren Cluster.

  1. Verwenden Sie zunächst eine API-Modelldatei für Azure Stack Hub für Linux oder Windows. Führen Sie auf dem Computer, auf dem Sie die AKS-Engine installiert haben, Folgendes aus:

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    Hinweis

    Wenn Sie die Verbindungen getrennt haben, können Sie die Datei herunterladen und manuell auf den getrennten Computer kopieren, auf dem Sie sie bearbeiten möchten. Sie können die Datei mithilfe von Tools wie PuTTY oder WinSCP auf Ihren Linux-Computer kopieren.

  2. Wenn Sie das API-Modell in einem Editor öffnen möchten, können Sie nano verwenden:

    nano ./kubernetes-azurestack.json
    

    Hinweis

    Wenn nano nicht installiert ist, können Sie nano auf Ubuntu installieren: sudo apt-get install nano.

  3. Suchen Sie in der Datei „kubernetes-azurestack.json“ nach „orchestratorRelease“ und „orchestratorVersion“. Wählen Sie eine der unterstützten Kubernetes-Versionen aus. Die Versionstabelle finden Sie in den Versionshinweisen. Geben Sie orchestratorRelease als x.xx und „orchestratorVersion“ als x.xx.x an. Eine Liste der aktuellen Versionen finden Sie unter Unterstützte AKS-Engine-Versionen.

  4. Suchen Sie nach customCloudProfile, und geben Sie die URL für das Mandantenportal an. Beispiel: https://portal.local.azurestack.external.

  5. Fügen Sie bei Verwendung von AD FS "identitySystem":"adfs" hinzu. Beispiel:

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    Hinweis

    Wenn Sie Azure AD für Ihr Identitätssystem verwenden, müssen Sie das Feld identitySystem nicht hinzufügen.

  6. Legen Sie in masterProfile die folgenden Felder fest:

    Feld BESCHREIBUNG
    dnsPrefix Geben Sie eine eindeutige Zeichenfolge ein, die zur Identifizierung des Hostnamens von virtuellen Computern dienen soll. Beispielsweise einen Namen, der auf dem Namen der Ressourcengruppe basiert.
    count Geben Sie die Anzahl der Masters ein, die für die Bereitstellung vorgesehen sind. Der minimale Wert für eine Hochverfügbarkeitsbereitstellung beträgt 3, aber 1 ist für Bereitstellungen ohne Hochverfügbarkeit zulässig.
    vmSize Geben Sie eine Größe ein, die von Azure Stack Hub unterstützt wird, z. B. Standard_D2_v2.
    distro Geben Sie aks-ubuntu-16.04 oder aks-ubuntu-18.04 ein.
  7. Aktualisieren Sie in agentPoolProfiles Folgendes:

    Feld BESCHREIBUNG
    count Geben Sie die Anzahl der Agents ein, die für die Bereitstellung vorgesehen sind. Pro Abonnement können maximal 50 Knoten verwendet werden. Wenn Sie mehr als einen Cluster pro Abonnement bereitstellen, stellen Sie sicher, dass die Gesamtanzahl der Agents 50 nicht überschreitet. Stellen Sie sicher, dass Sie die Konfigurationselemente aus der JSON-Datei für das API-Beispielmodell verwenden.
    vmSize Geben Sie eine Größe ein, die von Azure Stack Hub unterstützt wird, z. B. Standard_D2_v2.
    distro Geben Sie aks-ubuntu-16.04, aks-ubuntu-18.04 oder Windows ein.
    Verwenden Sie Windows für Agents, die unter Windows ausgeführt werden. Beispiel: kubernetes-windows.json
  8. Aktualisieren Sie in linuxProfile Folgendes:

    Feld BESCHREIBUNG
    adminUsername Geben Sie den VM-Administratorbenutzernamen ein.
    ssh Geben Sie den öffentlichen Schlüssel ein, der für die SSH-Authentifizierung bei virtuellen Computern verwendet wird. Verwenden Sie ssh-rsa und dann den Schlüssel. Anweisungen zum Erstellen eines öffentlichen Schlüssels finden Sie unter Erstellen eines SSH-Schlüssels für Linux in Azure Stack Hub.

    Wenn Sie die Bereitstellung in einem benutzerdefinierten virtuellen Netzwerk ausführen möchten, finden Sie Anweisungen zum Ermitteln und Hinzufügen der erforderlichen Schlüssel und Werte zu den entsprechenden Arrays im API-Modell unter Bereitstellen eines Kubernetes-Clusters in einem benutzerdefinierten virtuellen Netzwerk.

    Hinweis

    Mit der AKS-Engine für Azure Stack Hub können Sie keine eigenen Zertifikate für die Erstellung des Clusters bereitstellen.

  9. Wenn Sie Windows verwenden, aktualisieren Sie in windowsProfile die Werte von adminUsername: und adminPassword:

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

Weitere Informationen zum API-Modell

Hinzufügen eines Zertifikats bei Verwendung des ASDK

Wenn Sie einen Cluster auf dem Azure Stack Development Kit (ASDK) bereitstellen und Linux verwenden, müssen Sie das Stammzertifikat dem vertrauenswürdigen Zertifikatspeicher der Client-VM hinzufügen, auf der die AKS-Engine ausgeführt wird.

  1. Das Stammzertifikat finden Sie auf dem virtuellen Computer in diesem Verzeichnis: /var/lib/waagent/Certificates.pem.
  2. Kopieren Sie die Zertifikatdatei:
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Bereitstellen eines Kubernetes-Clusters

Nachdem Sie alle erforderlichen Werte in Ihrem API-Modell gesammelt haben, können Sie Ihren Cluster erstellen. Sie sollten jetzt Folgendes tun:

Bitten Sie Ihren Azure Stack Hub-Operator um Folgendes:

  • Überprüfen der Integrität des Systems, schlagen Sie die Ausführung von Test-AzureStack und des Hardwareüberwachungstools Ihres OEM-Herstellers vor.
  • Überprüfen der Systemkapazität einschließlich Ressourcen wie Arbeitsspeicher, Speicher und öffentlicher IP-Adressen.
  • Geben Sie Details zu dem Kontingent an, das Ihrem Abonnement zugeordnet ist, damit Sie überprüfen können, ob noch genügend Kapazität für die Anzahl der zu verwendenden VMs vorhanden ist.

Fahren Sie mit der Bereitstellung eines Clusters fort:

  1. Überprüfen Sie die verfügbaren Parameter für die AKS-Engine in Azure Stack Hub-CLI-Flags.

    Parameter Beispiel BESCHREIBUNG
    azure-env AzureStackCloud Um der AKS-Engine mitzuteilen, dass die Zielplattform Azure Stack Hub ist, verwenden Sie AzureStackCloud.
    identity-system adfs Optional. Geben Sie Ihre Identitätsverwaltungslösung an, wenn Sie Active Directory-Verbunddienste (AD FS) nutzen.
    location local Der Regionsname für Ihre Azure Stack Hub-Instanz. Für das ASDK ist local für die Region festgelegt.
    resource-group kube-rg Geben Sie den Namen einer neuen Ressourcengruppe ein, oder wählen Sie eine vorhandene Ressourcengruppe aus. Der Ressourcenname muss alphanumerisch und in Kleinbuchstaben angegeben sein.
    api-model ./kubernetes-azurestack.json Pfad zur Clusterkonfigurationsdatei oder zum API-Modell.
    output-directory kube-rg Geben Sie den Namen des Verzeichnisses ein, in dem die Ausgabedatei apimodel.json und andere generierte Dateien enthalten sein sollen.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Geben Sie die Dienstprinzipal-GUID ein. Die als Anwendungs-ID identifizierte Client-ID, wenn Ihr Azure Stack Hub-Administrator den Dienstprinzipal erstellt hat.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Geben Sie das Dienstprinzipalgeheimnis ein. Sie richten den geheimen Clientschlüssel beim Erstellen Ihres Diensts ein.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Geben Sie Ihre Abonnement-ID ein. Geben Sie ein Abonnement für den Mandanten an. Bereitstellungen für das administrative Abonnement werden nicht unterstützt. Weitere Informationen finden Sie unter Abonnieren von Angeboten.

    Beispiel:

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. Wenn bei der Ausführung aus beliebigem Grund ein Fehler auftritt, nachdem das Ausgabeverzeichnis erstellt wurde, können Sie das Problem beheben und den Befehl erneut ausführen. Wenn Sie die Bereitstellung erneut ausführen und zuvor dasselbe Ausgabeverzeichnis verwendet haben, gibt die AKS-Engine eine Fehlermeldung zurück, die besagt, dass das Verzeichnis bereits vorhanden ist. Sie können das vorhandene Verzeichnis mit folgendem Flag überschreiben: --force-overwrite.

  3. Speichern Sie die Clusterkonfiguration der AKS-Engine an einem sicheren, verschlüsselten Speicherort.

    Suchen Sie die apimodel.json-Datei. Speichern Sie sie an einem sicheren Speicherort. Diese Datei wird in allen anderen AKS-Engine-Vorgängen als Eingabe verwendet.

    Die generierte apimodel.json enthält den Dienstprinzipal, das Geheimnis und den öffentlichen SSH-Schlüssel, die Sie im Eingabe-API-Modell verwenden. Außerdem verfügt sie über alle anderen Metadaten, die die AKS-Engine benötigt, um alle anderen Vorgänge auszuführen. Wenn Sie sie verlieren, kann die AKS-Engine den Cluster nicht konfigurieren.

    Die Geheimnisse sind unverschlüsselt. Bewahren Sie die Datei an einem verschlüsselten, sicheren Ort auf.

Überprüfen Ihres Clusters

Überprüfen Sie Ihren Cluster, indem Sie eine Verbindung mit kubectl herstellen und die Informationen zu Ihren Knoten und anschließend ihren Status abrufen.

  1. Rufen Sie die Datei kubeconfig ab, um eine Verbindung mit dem Steuerungsebenenknoten herzustellen.

    • Wenn Sie kubectl bereits installiert haben, überprüfen Sie die Datei kubeconfig für den neu erstellten Cluster in diesem Verzeichnispfad: /kubeconfig/kubeconfig.json. Sie können /kubeconfig.json dem Verzeichnis .kube hinzufügen, um auf Ihren neuen Cluster zuzugreifen.
      Ist kubectl nicht installiert, besuchen Sie Installieren von Tools, um das Kubernetes-Befehlszeilentool zu installieren. Befolgen Sie andernfalls die nachstehenden Anweisungen, um über einen der Steuerungsebenenknoten auf den Cluster zuzugreifen.
  2. Rufen Sie die öffentliche IP-Adresse eines Ihrer Steuerungsebenenknoten über das Azure Stack Hub-Portal ab.

  3. Stellen Sie von einem Computer, der Zugriff auf Ihre Azure Stack Hub-Instanz hat, über SSH mit einem Client wie z. B. PuTTY oder MobaXterm eine Verbindung mit dem neuen Steuerungsebenenknoten her.

  4. Verwenden Sie für den SSH-Benutzernamen „azureuser“ und die Datei mit dem privaten Schlüssel des Schlüsselpaars, das Sie für die Bereitstellung des Clusters angegeben haben.

  5. Überprüfen Sie, ob die Clusterendpunkte ausgeführt werden:

    kubectl cluster-info
    

    Die Ausgabe sollte in etwa wie folgt aussehen:

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. Überprüfen Sie dann die Knotenzustände:

    kubectl get nodes
    

    Die Ausgabe sollte ähnlich der Folgenden aussehen:

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

Problembehandlung bei der Clusterbereitstellung

Wenn beim Bereitstellen eines Kubernetes-Clusters mit der AKS-Engine Fehler auftreten, können Sie Folgendes überprüfen:

  1. Verwenden Sie die korrekten Dienstprinzipal-Anmeldeinformationen (SPN)?
  2. Hat der SPN die Rolle „Mitwirkende“ für das Azure Stack Hub-Abonnement?
  3. Verfügen Sie über ein ausreichend großes Kontingent in Ihrem Azure Stack Hub-Plan?
  4. Wird für die Azure Stack Hub-Instanz ein Patch oder Upgrade angewendet?

Weitere Informationen finden Sie im Artikel Troubleshooting (Problembehandlung) im Azure/aks-engine-GitHub-Repository.

Drehen Ihres Dienstprinzipalgeheimnisses

Nach der Bereitstellung des Kubernetes-Clusters mit der AKS-Engine wird der Dienstprinzipalname (Service Principal Name, SPN) verwendet, um Interaktionen mit dem Azure Resource Manager auf Ihrer Azure Stack Hub-Instanz zu verwalten. Zu einem bestimmten Zeitpunkt kann das Geheimnis für diesen Dienstprinzipal ablaufen. Wenn Ihr Geheimnis abgelaufen ist, können Sie die Anmeldeinformationen wie folgt aktualisieren:

  • Aktualisieren Sie jeden Knoten mit dem neuen Dienstprinzipalgeheimnis.
  • Alternativ können Sie die Anmeldeinformationen des API-Modells aktualisieren und das Upgrade ausführen.

Manuelles Aktualisieren jedes Knotens

  1. Fordern Sie ein neues Geheimnis für Ihren Dienstprinzipal von Ihrem Cloudoperator an. Anweisungen für Azure Stack Hub finden Sie unter Verwenden einer App-Identität für den Zugriff auf Azure Stack Hub-Ressourcen.
  2. Verwenden Sie die neuen Anmeldeinformationen Ihres Cloudoperators, um /etc/kubernetes/azure.json auf den einzelnen Knoten zu aktualisieren. Nachdem Sie das Update vorgenommen haben, starten Sie kubelet und kube-controller-Manager erneut.

Aktualisieren des Clusters mit AKS-Engine-Update

Alternativ können Sie die Anmeldeinformationen in apimodel.json ersetzen und das Upgrade mit dem aktualisierten JSON-Code auf derselben oder einer neueren Kubernetes-Version ausführen. Anweisungen zum Aktualisieren des Modells finden Sie unter Aktualisieren eines Kubernetes-Clusters in Azure Stack Hub.

Nächste Schritte