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


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

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

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

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

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

Необходимые компоненты

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

  • Базовое понимание концепций Kubernetes.
  • Кластер AKS, работающий и работающий.
  • Установленный Azure CLI
  • Локальная среда 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"
}

После успешного создания субъекта-службы скопируйте идентификатор приложения и пароль в безопасном расположении, чтобы использовать его позже в развертывании.

Дополнительные сведения о работе с субъектами-службами и Реестром контейнеров Azure см. в статье Аутентификация в реестре контейнеров Azure с помощью субъектов-служб.

Вход в частный реестр контейнеров

Чтобы использовать экземпляр реестра контейнеров, необходимо сначала войти. Для входа можно использовать Azure CLI или Интерфейс командной строки Docker.

Вариант 1. Вход из Azure CLI

Используйте команду az acr sign in и укажите уникальное имя, назначенное реестру контейнеров на предыдущем шаге:

az acr login --name <REGISTRY_NAME>

Вариант 2. Вход из Интерфейса командной строки Docker

Чтобы использовать интерфейс командной строки 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

В этом примере имя образа для poemfinder-app:v1.0 извлечения из реестра контейнеров и acr-secret имя секрета извлечения, созданного для доступа к реестру. При развертывании модуля pod Kubernetes автоматически извлекает образ из реестра, если образ еще не присутствует в кластере.

Вы можете сохранить указанную выше конфигурацию pod в файле, например pod-example.yaml , а затем развернуть его в Kubernetes следующим образом:

kubectl create -f pod-example.yaml

Чтобы убедиться, что модуль pod был успешно создан с помощью образа контейнера из реестра контейнеров, запустите kubectl описать <pod POD_NAME>, который должен показать образ контейнера, используемый для создания модуля pod.

Следующие шаги