Bereitstellen eines Kubernetes-Clusters mit 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 erfahren Sie, wie Sie eine Clusterspezifikation schreiben, einen Cluster mit der Datei apimodel.json bereitstellen und Ihren Cluster überprüfen, indem Sie MySQL mit Helm bereitstellen.

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 Ihren 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-azurestack/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 Microsoft Entra ID 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-18.04 oder aks-ubuntu-20.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-18.04, aks-ubuntu-20.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 im 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, das die Ausgabedatei apimodel.json und andere generierte Dateien enthält.
    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. Sie müssen ein Abonnement für den Mandanten bereitstellen. Bereitstellungen für das administrative Abonnement werden nicht unterstützt. Weitere Informationen finden Sie unter Abonnieren von Angeboten.

    Beispiel:

    Hinweis

    Für AKSe Version 0.75.3 und höher lautet aks-engine-azurestack deployder Befehl zum Bereitstellen eines AKS-Engine-Clusters.

    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 einen Fehler zurück, der 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 Datei apimodel.json. Speichern Sie sie an einem sicheren Speicherort. Diese Datei wird in allen anderen AKS-Engine-Vorgängen als Eingabe verwendet.

    Die generierte Datei apimodel.json enthält den Dienstprinzipal, das Geheimnis und den öffentlichen SSH-Schlüssel, den Sie im Eingabe-API-Modell verwenden. Die Datei enthält auch alle anderen Metadaten, die von der AKS-Engine benötigt werden, um alle anderen Vorgänge auszuführen. Wenn Sie die Datei 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 kubectlherstellen, die Informationen abrufen und dann den Status Ihrer Knoten abrufen.

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

    • Wenn Sie bereits installiert haben kubectl , überprüfen Sie die kubeconfig Datei für den neu erstellten Cluster in diesem Verzeichnispfad /kubeconfig/kubeconfig.json. Sie können dem Verzeichnis die /kubeconfig.json.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 folgenden Anweisungen, um über einen der Knoten der Steuerungsebene 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 mit Zugriff auf Ihre Azure Stack Hub-instance mithilfe eines Clients wie PuTTY oder MobaXterm eine SSH-Verbindung mit dem neuen Knoten der Steuerungsebene 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 mithilfe 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 Problembehandlung im GitHub-Repository Azure/aks-engine-azurestack .

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 von Ihrem Cloudoperator bereitgestellten neuen Anmeldeinformationen, um /etc/kubernetes/azure.json auf jedem Knoten zu aktualisieren. Starten Sie nach dem Update sowohl als auch kubelekube-controller-managerneu.

Aktualisieren des Clusters mit AKS-Engine-Update

Alternativ können Sie die Anmeldeinformationen in apimodel.json ersetzen und das Upgrade mithilfe der aktualisierten JSON-Datei auf dieselbe oder neuere Kubernetes-Version ausführen. Anweisungen zum Aktualisieren des Modells finden Sie unter Aktualisieren eines Kubernetes-Clusters in Azure Stack Hub.

Nächste Schritte