Distribuera från privata containerregister till lokala Kubernetes med hjälp av Azure Container Registry och AKS Arc

Gäller för: Azure Stack HCI, version 23H2

Den här artikeln beskriver hur du distribuerar containeravbildningar från ett privat containerregister med hjälp av Azure Container Registry, som du kan köra i ditt eget datacenter i AKS Arc-distributioner. Du distribuerar till ditt lokala Kubernetes-kluster som hanteras av AKS. Med Azure Container Registry kan du skapa, lagra och hantera containeravbildningar och artefakter i ett privat register för alla typer av containerdistributioner.

Artikeln beskriver hur du skapar ett privat containerregister i Azure och push-överför containeravbildningen till det privata containerregistret. Du kan sedan distribuera från det privata registret till ditt lokala Kubernetes-kluster som finns i AKS Arc.

Mer information om Azure Container Registry finns i Azure Container Registry dokumentationen.

Förutsättningar

Kontrollera att du har följande krav:

Skapa ett privat containerregister i Azure

Börja med en resursgrupp för att skapa ett containerregister. En Azure-resursgrupp är en logisk container där Azure-resurser distribueras och hanteras. Skapa en resursgrupp med kommandot az group create. I följande exempel skapas en resursgrupp i regionen eastus :

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

Skapa en Container Registry-instans med kommandot az acr create och ange ditt eget registernamn. Registernamnet måste vara unikt i Azure och innehålla 5 till 50 alfanumeriska tecken. I resten av den här artikeln <acrName> används som platshållare för containerregistrets namn, men du kan ange ett eget unikt registernamn. Basic-SKU:n är en kostnadsoptimerad startpunkt i utvecklingssyfte som ger en balans mellan lagring och dataflöde:

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

När du har skapat containerregistret använder du följande kommando för att skapa ett huvudnamn för tjänsten, så att du kan komma åt containerregistret från Kubernetes:

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 har stöd för tre åtkomstroller. Rollen Deltagare används oftast av programutvecklare. I verkliga scenarier kan du dock behöva skapa flera tjänsthuvudnamn beroende på vilken typ av åtkomst som behövs:

  • Deltagare: Den här rollen erbjuder push- och pull-åtkomst till lagringsplatsen.
  • Läsare: Den här rollen tillåter endast hämtningsåtkomst till lagringsplatsen.
  • Ägare: Med den här rollen kan du tilldela roller till andra användare, förutom push- och pull-åtkomst till lagringsplatsen.

Föregående kommando bör generera utdata som liknar följande text:

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

När tjänstens huvudnamn har skapats kopierar du appId och lösenordet på en säker plats för senare användning i distributionen.

Mer information om hur du arbetar med tjänsthuvudnamn och Azure Container Registry finns i avsnittet om Azure Container Registry-autentisering med tjänsthuvudnamn.

Logga in på det privata containerregistret

Om du vill använda Container Registry-instansen måste du först logga in. Du kan använda antingen Azure CLI eller Docker CLI för att logga in.

Alternativ 1: Logga in från Azure CLI

Använd kommandot az acr sign in och ange det unika namn som tilldelades containerregistret i föregående steg:

az acr login --name <REGISTRY_NAME>

Alternativ 2: Logga in från Docker CLI

Om du vill använda Docker CLI för att få åtkomst till containerregistret skriver du följande kommando i en Bash- eller PowerShell-terminal:

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

I båda alternativen ska kommandot returnera ett meddelande om att inloggningen lyckades när den har slutförts .

Skicka en avbildning till containerregistret

När du har loggat in kan du börja push-överföra avbildningen till Container Registry. Kör först kommandot docker images för att visa listan med avbildningar på den lokala datorn:

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

Kom igång genom att tagga avbildningen med kommandot docker tag och sedan använda docker push för att push-överföra den till containerregistret:

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

Kontrollera att avbildningen har taggats korrekt genom att köra kommandot docker images igen. När du har bekräftat det kör docker push du för att push-överföra till containerregistret enligt följande:

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

Kontrollera att avbildningen har push-överförts till containerregistret genom att köra följande kommando:

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

Distribuera en avbildning från containerregistret till AKS

Om du vill distribuera containeravbildningen från containerregistret till ditt Kubernetes-kluster skapar du Kubernetes-hemligheter för att lagra dina registerautentiseringsuppgifter. Kubernetes använder en avbildningshämtningshemlighet för att lagra information som behövs för att autentisera till registret. Om du vill skapa pull-hemligheten för ett containerregister anger du tjänstens huvudnamns-ID, lösenordet och registrets URL:

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

I följande tabell beskrivs indataparametrarna:

Värde Beskrivning
secret-name Namnet på avbildningen hämtar hemligheten; till exempel acr-secret.
namespace Kubernetes-namnrymd som hemligheten ska placeras i. Behövs bara om du vill placera hemligheten i ett annat namnområde än standardnamnområdet.
<REGISTRY_NAME> Namnet på containerregistret. Till exempel myregistry. --docker-server är det fullständigt kvalificerade namnet på registerinloggningsservern.
appId ID för tjänstens huvudnamn som Kubernetes använder för att komma åt registret.
password Lösenord för tjänstens huvudnamn.

När du har skapat avbildningens pull-hemlighet kan du använda den för att skapa Kubernetes-poddar och distributioner. Ange namnet på hemligheten under imagePullSecrets i distributionsfilen enligt följande exempel:

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

I det här exemplet poemfinder-app:v1.0 är namnet på avbildningen som ska hämtas från containerregistret och acr-secret är namnet på den pull-hemlighet som du skapade för att få åtkomst till registret. När du distribuerar podden hämtar Kubernetes automatiskt avbildningen från registret om avbildningen inte redan finns i klustret.

Du kan spara poddkonfigurationen ovan i en fil som pod-example.yaml och sedan distribuera den till Kubernetes enligt följande:

kubectl create -f pod-example.yaml

Kontrollera att podden har skapats med containeravbildningen från containerregistret genom att köra kubectl describe pod <POD_NAME>, som ska visa den containeravbildning som användes för att skapa podden.

Nästa steg