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:
- En grundläggande förståelse för Kubernetes-begrepp.
- Ett AKS-kluster som är igång.
- Azure CLI installerat
- Din lokala kubectl-miljö som konfigurerats för att peka på ditt AKS-kluster.
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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för