Bereitstellen von der privaten Containerregistrierung in lokalen Kubernetes mithilfe der Azure Container Registry und AKS Arc
Gilt für: Azure Local, Version 23H2
In diesem Artikel wird beschrieben, wie Containerimages aus einer privaten Containerregistrierung mithilfe der Azure Container Registry bereitgestellt werden, die Sie in Ihrem eigenen Rechenzentrum in AKS Arc-Bereitstellungen ausführen können. Sie stellen ihren 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. Sie können dann aus der privaten Registrierung in Ihrem lokalen Kubernetes-Cluster bereitstellen, der in AKS Arc gehostet wird.
Weitere Informationen zur Azure Container Registry finden Sie in der Dokumentation zur Azure-Containerregistrierung.
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
- Die Azure CLI muss installiert sein.
- 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 Ostregion erstellt:
az group create --name <RESOURCE_GROUP_NAME> --location eastus
Erstellen Sie eine Containerregistrierungsinstanz mit dem Befehl "az acr create ", und geben Sie Ihren eigenen Registrierungsnamen an. Der Registrierungsname muss innerhalb von Azure eindeutig sein und fünf bis 50 alphanumerische Zeichen umfassen. Im rest dieses Artikels <acrName>
wird als Platzhalter für den Containerregistrierungsnamen verwendet, Sie können jedoch Ihren eigenen eindeutigen Registrierungsnamen angeben. Die Basis-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 von Zugriff 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 die 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 Containerregistrierungsinstanz zu verwenden, 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 ist:
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>
In beiden Optionen sollte der Befehl eine Meldung "Erfolgreich " zurückgeben, wenn sie abgeschlossen ist.
Übertragen eines Images in die Containerregistrierung
Sobald Sie erfolgreich angemeldet sind, können Sie mit dem Pushen des Images in die Containerregistrierung beginnen. Führen Sie zuerst 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
Um zu beginnen, markieren Sie das Image mit dem Docker-Befehl tag
, und verwenden Sie dann Docker push
, um es an die Containerregistrierung zu übertragen:
docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Stellen Sie sicher, dass das Image ordnungsgemäß markiert wurde, indem Sie den Befehl "Docker-Images" erneut ausführen. Führen Sie docker push
nach der Bestätigung wie folgt aus, um die Containerregistrierung per Push zu übertragen:
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 an die Containerregistrierung übertragen 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 Secrets , 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 den Pullschlüssel 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 |
Der Name des Bilds ruft geheime Schlüssel ab; beispiel: acr-secret . |
namespace |
Kubernetes-Namespace, in den der geheime Schlüssel eingefügt werden soll. Nur erforderlich, wenn Sie den geheimen Schlüssel in einem anderen Namespace als dem Standardnamespace platzieren möchten. |
<REGISTRY_NAME> |
Name der Containerregistrierung. Beispiel: myregistry . Dies --docker-server ist 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 zum Erstellen von Kubernetes-Pods und -Bereitstellungen verwenden. Geben Sie den Namen des geheimen Schlüssels 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, das aus der Containerregistrierung abgerufen werden soll, und acr-secret
der Name des Pullschlüssels, poemfinder-app:v1.0
den 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 oben genannte Pod-Konfiguration 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, wodurch das Containerimage zum Erstellen des Pods angezeigt werden soll.