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


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

Область применения: AKS в Azure Local 22H2, AKS на Windows Server

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

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

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

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

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

  • Базовое понимание концепций Kubernetes.
  • Кластер AKS, работающий и работающий.
  • Установленный Azure CLI
  • kubectl Локальная среда, настроенная для указания кластера AKS. Для настройки кластера для доступа можно использовать kubectl PowerShell.

Создание частного реестра контейнеров в Azure

Чтобы создать реестр контейнеров, начните с группы ресурсов. Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. Создайте группу ресурсов с помощью команды PowerShell 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>

Реестр контейнеров поддерживает три роли доступа. Роль участника чаще всего используется разработчиками приложений. Однако в реальных сценариях может потребоваться создать несколько субъектов-служб в зависимости от типа доступа:

  • Участник. Эта роль предлагает отправку и доступ на вытягивание в репозиторий.
  • Читатель: эта роль позволяет только доступ на вытягивание репозиторию.
  • Владелец: эта роль позволяет назначать роли другим пользователям в дополнение к отправке и доступ на вытягивание репозиторию.

Предыдущая команда должна создать выходные данные, аналогичные следующему тексту:

{
 "appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "displayName": "akshci-service-principal",
 "name": "http://akshci-service-principal",
 "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

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

Дополнительные сведения о работе с субъектами-службами и реестром контейнеров см. в Реестр контейнеров 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 describe pod <POD_NAME>, которая должна показать образ контейнера, используемый для создания модуля pod.

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

Из этой статьи вы узнали, как развернуть образ контейнера из Реестр контейнеров Azure в AKS Arc. Далее можно: