Bereitstellen eines Kubernetes-Clusters mit dem AKS-Modul im Azure Stack Hub
Sie können einen Kubernetes-Cluster auf Azure Stack Hub von einer Client-VM bereitstellen, auf der das AKS-Modul ausgeführt wird. In diesem Artikel befassen wir uns mit dem Schreiben einer Clusterspezifikation, der Bereitstellung eines Clusters mit der apimodel.json-Datei und dem Überprüfen Ihres Clusters durch Die Bereitstellung von MySQL mit Helm.
Definieren einer Clusterspezifikation
Sie können eine Clusterspezifikation in einer Dokumentdatei mithilfe des JSON-Formats namens API-Modell angeben. Das AKS-Modul 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.
- Suchen Sie in der Tabelle nach der Versionsnummer der AKS-Engine (z. B.
v.0.63.0
). - Wählen Sie in der Tabelle API-Modellbeispiele den Link für Ihr Betriebssystem aus, und öffnen Sie diesen.
- 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.
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.
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
.Suchen Sie in der datei kubernetes-azurestack.json 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.Suchen Sie nach
customCloudProfile
, und geben Sie die URL für das Mandantenportal an. Beispiel:https://portal.local.azurestack.external
.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 IdentitySystem-Feld nicht hinzufügen.
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
oderaks-ubuntu-20.04
ein.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
oderWindows
ein.
Verwenden SieWindows
für Agents, die unter Windows ausgeführt werden. Beispiel: kubernetes-windows.jsonAktualisieren 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 dem AKS-Modul für Azure Stack Hub können Sie keine eigenen Zertifikate für die Erstellung des Clusters bereitstellen.
Wenn Sie Windows verwenden, aktualisieren Sie in
windowsProfile
die Werte vonadminUsername:
undadminPassword
:"windowsProfile": { "adminUsername": "azureuser", "adminPassword": "", "sshEnabled": true }
Weitere Informationen zum API-Modell
- Eine vollständige Referenz aller verfügbaren Optionen im API-Modell finden Sie in den Clusterdefinitionen.
- Ausführliche Informationen zu bestimmten Optionen für Azure Stack Hub finden Sie in den Einzelheiten zur Azure Stack Hub-Clusterdefinition.
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 das AKS-Modul ausgeführt wird.
- Das Stammzertifikat finden Sie auf dem virtuellen Computer in diesem Verzeichnis:
/var/lib/waagent/Certificates.pem.
- 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:
Ü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 Lokal 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 enthalten soll. 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. Hier ist ein Beispiel:
Hinweis
Für AKSe Version 0.75.3 und höher lautet
aks-engine-azurestack deploy
der Befehl zum Bereitstellen eines AKS-Modulclusters.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
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 dasselbe Ausgabeverzeichnis verwendet haben, gibt das AKS-Modul einen Fehler zurück, der besagt, dass das Verzeichnis bereits vorhanden ist. Sie können das vorhandene Verzeichnis mit folgendem Flag überschreiben:
--force-overwrite
.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 apimodel.json Datei enthält den Dienstprinzipal, geheimen Schlüssel und den öffentlichen SSH-Schlüssel, den Sie im Eingabe-API-Modell verwenden. Die Datei verfügt auch über alle anderen Metadaten, die vom AKS-Modul benötigt werden, um alle anderen Vorgänge auszuführen. Wenn Sie die Datei verlieren, kann das AKS-Modul 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 herstellen kubectl
, die Informationen abrufen und dann die Zustände Ihrer Knoten abrufen.
Rufen Sie die Datei
kubeconfig
ab, um eine Verbindung mit dem Steuerungsebenenknoten herzustellen.- Wenn Sie bereits installiert sind
kubectl
, überprüfen Sie diekubeconfig
Datei auf den neu erstellten Cluster in diesem Verzeichnispfad/kubeconfig/kubeconfig.json
. Sie können das/kubeconfig.json
.kube
Verzeichnis hinzufügen und in "config" umbenennen, um auf Ihren neuen Cluster zuzugreifen.
Istkubectl
nicht installiert, besuchen Sie Installieren von Tools, um das Kubernetes-Befehlszeilentool zu installieren. Folgen Sie andernfalls den anweisungen unten, um von einem der Steuerebenenknoten aus auf den Cluster zuzugreifen.
- Wenn Sie bereits installiert sind
Rufen Sie die öffentliche IP-Adresse eines Ihrer Steuerungsebenenknoten über das Azure Stack Hub-Portal ab.
Stellen Sie von einem Computer mit Zugriff auf Ihre Azure Stack Hub-Instanz eine Verbindung über SSH mit dem neuen Steuerebenenknoten über einen Client wie PuTTY oder MobaXterm her.
Verwenden Sie für den SSH-Benutzernamen "azureuser" und die private Schlüsseldatei des Schlüsselpaars, das Sie für die Bereitstellung des Clusters bereitgestellt haben.
Ü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
Ü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 dem AKS-Modul Fehler auftreten, können Sie Folgendes überprüfen:
- Verwenden Sie die korrekten Dienstprinzipal-Anmeldeinformationen (SPN)?
- Hat der SPN die Rolle „Mitwirkende“ für das Azure Stack Hub-Abonnement?
- Verfügen Sie über ein ausreichend großes Kontingent in Ihrem Azure Stack Hub-Plan?
- Wird für die Azure Stack Hub-Instanz ein Patch oder Upgrade angewendet?
Weitere Informationen finden Sie im Artikel zur 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
- 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.
- Verwenden Sie die von Ihrem Cloudoperator bereitgestellten neuen Anmeldeinformationen, um /etc/kubernetes/azure.json auf jedem Knoten zu aktualisieren. Nachdem Sie das Update vorgenommen haben, starten Sie beide
kubele
undkube-controller-manager
.
Aktualisieren des Clusters mit AKS-Engine-Update
Alternativ können Sie die Anmeldeinformationen im apimodel.json ersetzen und ein 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.