Bereitstellen von einer privaten Containerregistrierung in lokalem Kubernetes mithilfe von Azure Container Registry und AKS Arc

Gilt für: Azure Stack HCI, Version 23H2

In diesem Artikel wird beschrieben, wie Sie Containerimages aus einer privaten Containerregistrierung mithilfe von Azure Container Registry bereitstellen, die Sie in AKS Arc-Bereitstellungen in Ihrem eigenen Rechenzentrum ausführen können. Sie stellen die Bereitstellung in Ihrem lokalen Kubernetes-Cluster bereit, der von AKS gehostet wird. Mit Azure Container Registry können Sie Containerimages und -artefakte in einer privaten Registrierung für alle Arten von Containerbereitstellungen erstellen, speichern und verwalten.

In diesem Artikel wird beschrieben, wie Sie eine private Containerregistrierung in Azure erstellen und Ihr Containerimage an die private Containerregistrierung pushen. Anschließend können Sie die Bereitstellung aus der privaten Registrierung in Ihrem lokalen Kubernetes-Cluster durchführen, der in AKS Arc gehostet wird.

Weitere Informationen zu Azure Container Registry finden Sie in der Dokumentation zu Azure Container Registry.

Voraussetzungen

Vergewissern Sie sich, dass Sie die folgenden Anforderungen erfüllen:

  • Grundlegende Kenntnisse der Kubernetes-Konzepte
  • Einen AKS-Cluster, der aktiv ist und ausgeführt wird
  • Azure-CLI installiert
  • Ihre lokale kubectl-Umgebung, die so konfiguriert ist, dass sie auf Ihren AKS-Cluster verweist.

Erstellen einer privaten Containerregistrierung in Azure

Um eine Containerregistrierung zu erstellen, beginnen Sie mit einer Ressourcengruppe. Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe. Im folgenden Beispiel wird eine Ressourcengruppe in der Region eastus erstellt:

az group create --name <RESOURCE_GROUP_NAME> --location eastus

Erstellen Sie mit dem Befehl az acr create einen Container Registry-instance, und geben Sie Ihren eigenen Registrierungsnamen an. Der Registrierungsname muss innerhalb von Azure eindeutig sein und fünf bis 50 alphanumerische Zeichen umfassen. Im weiteren Verlauf dieses Artikels <acrName> wird als Platzhalter für den Namen der Containerregistrierung verwendet, Sie können jedoch Ihren eigenen eindeutigen Registrierungsnamen angeben. Die Basic-SKU ist ein kostenoptimierter Einstiegspunkt für Entwicklungszwecke, der ein Gleichgewicht zwischen Speicher und Durchsatz bietet:

az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic

Nachdem Sie Ihre Containerregistrierung erstellt haben, verwenden Sie den folgenden Befehl, um einen Dienstprinzipal zu erstellen, damit Sie über Kubernetes auf Ihre Containerregistrierung zugreifen können:

az ad sp create-for-rbac /
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RG_NAME>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME> /
--role Contributor /
--name <SERVICE_PRINCIPAL_NAME>

Azure Container Registry unterstützt drei Zugriffsrollen. Die Rolle Mitwirkender wird am häufigsten von Anwendungsentwicklern verwendet. In realen Szenarien müssen Sie jedoch möglicherweise mehrere Dienstprinzipale erstellen, je nachdem, welche Art des Zugriffs erforderlich ist:

  • Mitwirkender: Diese Rolle bietet Push- und Pullzugriff auf das Repository.
  • Leser: Diese Rolle erlaubt ausschließlich den Pullzugriff auf das Repository.
  • Besitzer: Mit dieser Rolle können Sie anderen Benutzern zusätzlich zum Push- und Pullzugriff auf das Repository Rollen zuweisen.

Der vorherige Befehl sollte eine Ausgabe ähnlich dem folgenden Text erzeugen:

{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

Nachdem der Dienstprinzipal erfolgreich erstellt wurde, kopieren Sie die appId und das Kennwort an einem sicheren Speicherort, um sie später in Ihrer Bereitstellung zu verwenden.

Weitere Informationen zum Arbeiten mit Dienstprinzipalen und Azure Container Registry finden Sie unter Azure Container Registry-Authentifizierung mit Dienstprinzipalen.

Anmelden bei der privaten Containerregistrierung

Um die Container Registry-instance verwenden zu können, müssen Sie sich zuerst anmelden. Zum Anmelden können Sie entweder die Azure CLI oder die Docker CLI verwenden.

Option 1: Anmelden über die Azure CLI

Verwenden Sie den Befehl az acr sign in , und geben Sie den eindeutigen Namen an, der der Containerregistrierung im vorherigen Schritt zugewiesen wurde:

az acr login --name <REGISTRY_NAME>

Option 2: Anmelden über die Docker CLI

Um die Docker CLI für den Zugriff auf Ihre Containerregistrierung zu verwenden, geben Sie den folgenden Befehl in einem Bash- oder PowerShell-Terminal ein:

docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>

Bei beiden Optionen sollte der Befehl eine Meldung mit erfolgreicher Anmeldung zurückgeben, wenn er abgeschlossen ist.

Pushen eines Images in die Containerregistrierung

Nachdem Sie erfolgreich angemeldet sind, können Sie mit dem Pushen des Images in die Container Registry beginnen. Führen Sie zunächst den Befehl docker images aus, um die Liste der Images auf Ihrem lokalen Computer anzuzeigen:

REPOSITORY TAG IMAGE ID CREATED SIZE

mcr.microsoft.com/azure-functions/dotnet 3.0 9f8ad1bdee67 5 months ago
540MB

poemfinder-app latest 2d9bef425603 6 months ago 208MB

Markieren Sie zunächst das Image mit dem Befehl docker tag , und verwenden Sie dann docker push , um es an die Containerregistrierung zu pushen:

docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Überprüfen Sie, ob das Image ordnungsgemäß gekennzeichnet wurde, indem Sie den Befehl docker images erneut ausführen. Führen Sie docker push nach der Bestätigung wie folgt aus, um in die Containerregistrierung zu pushen:

docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Führen Sie den folgenden Befehl aus, um zu bestätigen, dass das Image erfolgreich in die Containerregistrierung gepusht wurde:

az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table

Bereitstellen eines Images aus der Containerregistrierung in AKS

Um Ihr Containerimage aus der Containerregistrierung in Ihrem Kubernetes-Cluster bereitzustellen, erstellen Sie Kubernetes-Geheimnisse , um Ihre Registrierungsanmeldeinformationen zu speichern. In Kubernetes wird ein Geheimnis für Imagepullvorgänge verwendet, um Informationen zu speichern, die für die Authentifizierung bei Ihrer Registrierung benötigt werden. Um das Pullgeheimnis für eine Containerregistrierung zu erstellen, geben Sie die Dienstprinzipal-ID, das Kennwort und die Registrierungs-URL an:

kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>

In der folgenden Tabelle werden die Eingabeparameter beschrieben:

Wert BESCHREIBUNG
secret-name Name des Bilds pullt geheimnis; beispiel: acr-secret.
namespace Kubernetes-Namespace, in den das Geheimnis eingefügt werden soll. Nur erforderlich, wenn Sie das Geheimnis in einem anderen Namespace als dem Standardnamespace platzieren möchten.
<REGISTRY_NAME> Name Ihrer Containerregistrierung. Beispiel: myregistry. ist --docker-server der vollqualifizierte Name des Registrierungsanmeldungsservers.
appId ID des Dienstprinzipals, den Kubernetes für den Zugriff auf Ihre Registrierung verwendet.
password Dienstprinzipalkennwort.

Nachdem Sie das Image pull secret erstellt haben, können Sie es verwenden, um Kubernetes-Pods und -Bereitstellungen zu erstellen. Geben Sie den Namen des Geheimnisses unter imagePullSecrets in der Bereitstellungsdatei an, wie im folgenden Beispiel gezeigt:

apiVersion: v1
kind: Pod
metadata:
name: poemfinder-app
namespace: mydemoapps
spec:
containers:
 - name: poemfinder-app
   image: <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
   imagePullPolicy: IfNotPresent
 - imagePullSecrets:
   - name: acr-secret

In diesem Beispiel ist der Name des Images, poemfinder-app:v1.0 das aus der Containerregistrierung abgerufen werden soll, und acr-secret der Name des Pullgeheimnisses, das Sie für den Zugriff auf die Registrierung erstellt haben. Wenn Sie den Pod bereitstellen, ruft Kubernetes das Image automatisch aus Ihrer Registrierung ab, wenn das Image noch nicht im Cluster vorhanden ist.

Sie können die obige Podkonfiguration in einer Datei wie pod-example.yaml speichern und dann wie folgt in Kubernetes bereitstellen:

kubectl create -f pod-example.yaml

Um zu bestätigen, dass der Pod erfolgreich mithilfe des Containerimages aus der Containerregistrierung erstellt wurde, führen Sie kubectl describe pod <POD_NAME> aus, wobei das zum Erstellen des Pods verwendete Containerimage angezeigt werden sollte.

Nächste Schritte