Развертывание из частного реестра контейнеров в локальную среду Kubernetes с помощью Реестр контейнеров Azure и AKS Arc
Область применения: Azure Stack HCI, версия 23H2
В этой статье описывается развертывание образов контейнеров из частного реестра контейнеров с помощью Реестр контейнеров Azure, которые можно запускать в собственном центре обработки данных в развертываниях AKS Arc. Развертывание выполняется в локальном кластере Kubernetes, размещенном в AKS. Реестр контейнеров Azure позволяет создавать, хранить и администрировать образы и артефакты контейнеров в частном реестре для всех типов развертываний контейнеров.
В этой статье описывается, как создать частный реестр контейнеров в Azure и отправить образ контейнера в частный реестр контейнеров. Затем можно выполнить развертывание из частного реестра в локальный кластер Kubernetes, размещенный в AKS Arc.
Дополнительные сведения о Реестр контейнеров Azure см. в документации по Реестр контейнеров Azure.
Предварительные требования
Убедитесь, что у вас есть следующие требования:
- Базовое понимание концепций Kubernetes.
- Запущенный и работающий кластер AKS.
- Установленный Интерфейс командной строки Azure
- Локальная среда kubectl настроена для указания на кластер AKS.
Создание частного реестра контейнеров в Azure
Чтобы создать реестр контейнеров, начните с группы ресурсов. Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. Создайте группу ресурсов с помощью команды az group create
. В следующем примере создается группа ресурсов в регионе eastus :
az group create --name <RESOURCE_GROUP_NAME> --location eastus
Создайте экземпляр Реестра контейнеров с помощью команды az acr create и укажите собственное имя реестра. Имя реестра должно быть уникальным в пределах Azure и содержать от 5 до 50 буквенно-цифровых символов. В оставшейся части этой статьи <acrName>
используется в качестве заполнителя для имени реестра контейнеров, но вы можете указать собственное уникальное имя реестра. SKU "Базовый " — это оптимизированная для затрат точка входа для целей разработки, которая обеспечивает баланс между хранилищем и пропускной способностью:
az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic
После создания реестра контейнеров используйте следующую команду, чтобы создать субъект-службу, чтобы получить доступ к реестру контейнеров из 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 поддерживает три роли доступа. Роль Участника чаще всего используется разработчиками приложений. Однако в реальных сценариях может потребоваться создать несколько субъектов-служб в зависимости от типа необходимого доступа:
- Участник. Эта роль предлагает отправку и доступ на вытягивание в репозиторий.
- Читатель. Эта роль разрешает только доступ на вытягивание в репозиторий.
- Владелец. Эта роль позволяет назначать роли другим пользователям в дополнение к отправке и доступ на вытягивание в репозиторий.
Предыдущая команда должна вывести выходные данные, аналогичные следующему тексту:
{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
После успешного создания субъекта-службы скопируйте appId и пароль в безопасное расположение, чтобы использовать их позже в развертывании.
Дополнительные сведения о работе с субъектами-службами и Реестром контейнеров Azure см. в статье Аутентификация в реестре контейнеров Azure с помощью субъектов-служб.
Вход в частный реестр контейнеров
Чтобы использовать экземпляр Реестра контейнеров, необходимо сначала войти в систему. Для входа можно использовать Azure CLI или Интерфейс командной строки Docker.
Вариант 1. Вход с помощью Azure CLI
Используйте команду az acr sign in и укажите уникальное имя, присвоенное реестру контейнеров на предыдущем шаге:
az acr login --name <REGISTRY_NAME>
Вариант 2. Вход с помощью Docker CLI
Чтобы использовать Интерфейс командной строки Docker для доступа к реестру контейнеров, введите следующую команду в терминале Bash или PowerShell:
docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>
В любом из этих вариантов команда должна возвращать сообщение об успешном входе после завершения.
Отправка образа в реестр контейнеров
После успешного входа в систему можно приступить к отправке образа в Реестр контейнеров. Сначала выполните команду docker images, чтобы просмотреть список образов на локальном компьютере:
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
Чтобы приступить к работе, пометьте образ с помощью команды docker tag
, а затем отправьте его в реестр контейнеров с помощью docker push
:
docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Убедитесь, что образ помечен правильно, выполнив команду docker images еще раз. После подтверждения выполните команду docker push
для отправки в реестр контейнеров следующим образом:
docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Чтобы убедиться, что образ успешно отправлен в реестр контейнеров, выполните следующую команду:
az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table
Развертывание образа из реестра контейнеров в AKS
Чтобы развернуть образ контейнера из реестра контейнеров в кластере Kubernetes, создайте секреты Kubernetes для хранения учетных данных реестра. Kubernetes использует секрет для извлечения образа с целью хранения сведений, необходимых для проверки подлинности реестра. Чтобы создать секрет по запросу для реестра контейнеров, укажите идентификатор субъекта-службы, пароль и URL-адрес реестра:
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>
В следующей таблице описаны входные параметры:
Значение | Описание |
---|---|
secret-name |
Имя образа извлекает секрет; например, acr-secret . |
namespace |
Пространство имен Kubernetes, в которое нужно поместить секрет. Требуется только в том случае, если вы хотите поместить секрет в пространство имен, отличное от пространства имен по умолчанию. |
<REGISTRY_NAME> |
Имя реестра контейнеров. Например, myregistry . — --docker-server это полное имя сервера входа в реестр. |
appId |
Идентификатор субъекта-службы, который Kubernetes использует для доступа к реестру. |
password |
Пароль субъекта-службы. |
После создания секрета извлечения образа его можно использовать для создания модулей pod и развертываний Kubernetes. Укажите имя секрета imagePullSecrets
в файле развертывания, как показано в следующем примере:
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
В этом примере — это имя образа, извлекаемого из реестра контейнеров, а acr-secret
— имя секрета извлечения, poemfinder-app:v1.0
созданного для доступа к реестру. При развертывании модуля pod Kubernetes автоматически извлекает образ из реестра, если он еще не присутствует в кластере.
Вы можете сохранить описанную выше конфигурацию pod в файле , например pod-example.yaml , а затем развернуть ее в Kubernetes следующим образом:
kubectl create -f pod-example.yaml
Чтобы убедиться, что модуль pod успешно создан с помощью образа контейнера из реестра контейнеров, выполните команду kubectl describe pod <POD_NAME>, в которой должен отображаться образ контейнера, используемый для создания модуля pod.