Поделиться через


Развертывание из частного реестра контейнеров в локальную среду Kubernetes с помощью Реестр контейнеров Azure и AKS Arc

Область применения: Azure Stack HCI, версия 23H2

В этой статье описывается развертывание образов контейнеров из частного реестра контейнеров с помощью Реестр контейнеров Azure, которые можно запускать в собственном центре обработки данных в развертываниях AKS Arc. Развертывание выполняется в локальном кластере Kubernetes, размещенном в AKS. Реестр контейнеров Azure позволяет создавать, хранить и администрировать образы и артефакты контейнеров в частном реестре для всех типов развертываний контейнеров.

В этой статье описывается, как создать частный реестр контейнеров в Azure и отправить образ контейнера в частный реестр контейнеров. Затем можно выполнить развертывание из частного реестра в локальный кластер Kubernetes, размещенный в AKS Arc.

Дополнительные сведения о Реестр контейнеров Azure см. в документации по Реестр контейнеров Azure.

Предварительные требования

Убедитесь, что у вас есть следующие требования:

Создание частного реестра контейнеров в 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.

Дальнейшие действия