Wdrażanie z prywatnego rejestru kontenerów w lokalnym rozwiązaniu Kubernetes przy użyciu usług Azure Container Registry i AKS Arc
Dotyczy: Azure Stack HCI, wersja 23H2
W tym artykule opisano sposób wdrażania obrazów kontenerów z prywatnego rejestru kontenerów przy użyciu Azure Container Registry, które można uruchomić we własnym centrum danych we wdrożeniach usługi AKS Arc. Wdrożenie jest wdrażane w lokalnym klastrze Kubernetes hostowanym przez usługę AKS. Usługa Azure Container Registry umożliwia kompilowanie i przechowywanie obrazów kontenerów oraz artefaktów w rejestrze prywatnym dla wszystkich typów wdrożeń kontenerów, a także zarządzanie nimi.
W tym artykule opisano sposób tworzenia prywatnego rejestru kontenerów na platformie Azure i wypychania obrazu kontenera do prywatnego rejestru kontenerów. Następnie można wdrożyć z rejestru prywatnego w lokalnym klastrze Kubernetes hostowanym w usłudze AKS Arc.
Aby uzyskać więcej informacji na temat Azure Container Registry, zobacz dokumentację Azure Container Registry.
Wymagania wstępne
Sprawdź, czy masz następujące wymagania:
- Podstawowa wiedza na temat pojęć związanych z platformą Kubernetes.
- Klaster usługi AKS, który jest uruchomiony.
- Zainstalowany interfejs wiersza polecenia platformy Azure
- Lokalne środowisko kubectl skonfigurowane do wskazywania klastra usługi AKS.
Tworzenie prywatnego rejestru kontenerów na platformie Azure
Aby utworzyć rejestr kontenerów, zacznij od grupy zasobów. Grupa zasobów platformy Azure to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi. Utwórz grupę zasobów za pomocą polecenia az group create
. Poniższy przykład tworzy grupę zasobów w regionie eastus :
az group create --name <RESOURCE_GROUP_NAME> --location eastus
Utwórz wystąpienie usługi Container Registry za pomocą polecenia az acr create i podaj własną nazwę rejestru. Nazwa rejestru musi być unikatowa na platformie Azure i zawierać od 5 do 50 znaków alfanumerycznych. W pozostałej części tego artykułu <acrName>
jest używany jako symbol zastępczy nazwy rejestru kontenerów, ale możesz podać własną unikatową nazwę rejestru.
Podstawowa jednostka SKU to zoptymalizowany pod względem kosztów punkt wejścia do celów programistycznych, który zapewnia równowagę magazynu i przepływności:
az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic
Po utworzeniu rejestru kontenerów użyj następującego polecenia, aby utworzyć jednostkę usługi, aby uzyskać dostęp do rejestru kontenerów z poziomu platformy 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 obsługuje trzy role dostępu. Rola Współautor jest najczęściej używana przez deweloperów aplikacji. Jednak w rzeczywistych scenariuszach może być konieczne utworzenie wielu jednostek usługi w zależności od wymaganego typu dostępu:
- Współautor: ta rola oferuje dostęp wypychania i ściągania do repozytorium.
- Czytelnik: ta rola zezwala tylko na dostęp ściągania do repozytorium.
- Właściciel: Ta rola umożliwia przypisywanie ról innym użytkownikom oprócz dostępu wypychanego i ściągania do repozytorium.
Poprzednie polecenie powinno wygenerować dane wyjściowe podobne do następującego tekstu:
{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
Po pomyślnym utworzeniu jednostki usługi skopiuj identyfikator appId i hasło w bezpiecznej lokalizacji, aby użyć jej później we wdrożeniu.
Aby uzyskać więcej informacji na temat pracy z jednostkami usługi i usługą Azure Container Registry, zobacz Uwierzytelnianie w usłudze Azure Container Registry przy użyciu jednostek usługi.
Zaloguj się do prywatnego rejestru kontenerów
Aby użyć wystąpienia usługi Container Registry, musisz najpierw się zalogować. Aby się zalogować, możesz użyć interfejsu wiersza polecenia platformy Azure lub interfejsu wiersza polecenia platformy Docker.
Opcja 1. Logowanie z poziomu interfejsu wiersza polecenia platformy Azure
Użyj polecenia az acr sign in i podaj unikatową nazwę przypisaną do rejestru kontenerów w poprzednim kroku:
az acr login --name <REGISTRY_NAME>
Opcja 2. Logowanie z poziomu interfejsu wiersza polecenia platformy Docker
Aby uzyskać dostęp do rejestru kontenerów za pomocą interfejsu wiersza polecenia platformy Docker, wpisz następujące polecenie w terminalu powłoki Bash lub programu PowerShell:
docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>
W każdej z opcji polecenie powinno zwrócić komunikat o pomyślnym zalogowaniu po zakończeniu.
Wypychanie obrazu do rejestru kontenerów
Po pomyślnym zalogowaniu możesz rozpocząć wypychanie obrazu do rejestru kontenerów. Najpierw uruchom polecenie docker images, aby wyświetlić listę obrazów na komputerze lokalnym:
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
Aby rozpocząć, otaguj obraz za pomocą polecenia platformy Docker tag
, a następnie użyj platformy Docker push
, aby wypchnąć go do rejestru kontenerów:
docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Sprawdź, czy obraz został poprawnie otagowany, uruchamiając ponownie polecenie docker images. Po potwierdzeniu uruchom polecenie docker push
, aby wypchnąć do rejestru kontenerów w następujący sposób:
docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Aby potwierdzić, że obraz został pomyślnie wypchnięty do rejestru kontenerów, uruchom następujące polecenie:
az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table
Wdrażanie obrazu z rejestru kontenerów w usłudze AKS
Aby wdrożyć obraz kontenera z rejestru kontenerów w klastrze Kubernetes, utwórz wpisy tajne Kubernetes w celu przechowywania poświadczeń rejestru. Platforma Kubernetes używa wpisu tajnego ściągania obrazu do przechowywania informacji potrzebnych do uwierzytelnienia w rejestrze. Aby utworzyć klucz tajny ściągnięcia dla rejestru kontenerów, podaj identyfikator jednostki usługi, hasło i adres URL rejestru:
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>
W poniższej tabeli opisano parametry wejściowe:
Wartość | Opis |
---|---|
secret-name |
Nazwa obrazu ściąga wpis tajny; na przykład acr-secret . |
namespace |
Przestrzeń nazw kubernetes, do której należy umieścić wpis tajny. Wymagane tylko wtedy, gdy chcesz umieścić wpis tajny w przestrzeni nazw innej niż domyślna przestrzeń nazw. |
<REGISTRY_NAME> |
Nazwa rejestru kontenerów. Na przykład myregistry . Jest --docker-server to w pełni kwalifikowana nazwa serwera logowania rejestru. |
appId |
Identyfikator jednostki usługi używanej przez platformę Kubernetes do uzyskiwania dostępu do rejestru. |
password |
Hasło jednostki usługi. |
Po utworzeniu wpisu tajnego ściągania obrazu można go użyć do tworzenia zasobników i wdrożeń platformy Kubernetes. Podaj nazwę wpisu tajnego w imagePullSecrets
pliku wdrożenia, jak pokazano w poniższym przykładzie:
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
W tym przykładzie jest nazwą obrazu do poemfinder-app:v1.0
pobrania z rejestru kontenerów i acr-secret
jest nazwą wpisu tajnego ściągania utworzonego w celu uzyskania dostępu do rejestru. Po wdrożeniu zasobnika platforma Kubernetes automatycznie ściąga obraz z rejestru, jeśli obraz nie jest jeszcze obecny w klastrze.
Powyższej konfiguracji zasobnika można zapisać w pliku, takim jak pod-example.yaml , a następnie wdrożyć go w usłudze Kubernetes w następujący sposób:
kubectl create -f pod-example.yaml
Aby potwierdzić, że zasobnik został pomyślnie utworzony przy użyciu obrazu kontenera z rejestru kontenerów, uruchom polecenie kubectl describe pod <POD_NAME>, który powinien pokazywać obraz kontenera użyty do utworzenia zasobnika.