Отправка и извлечение чартов Helm в Реестр контейнеров Azure
Для быстрого развертывания приложений и управления ими в Kubernetes можно использовать диспетчер пакетов Helm с открытым исходным кодом. При использовании Helm пакеты приложений определяются как чарты, хранящиеся в репозитории чартов Helm.
В этой статье показано, как разместить репозитории чартов Helm в Реестре контейнеров Azure с помощью команд Helm 3 и сохранения чартов в виде артефактов OCI. Во многих случаях для разрабатываемых приложений можно создавать и отправлять собственные чарты. Дополнительные сведения о создании собственных чартов Helm см. в разделе Руководство разработчика шаблона чарта. Можно также сохранить существующий чарт Helm из другого репозитория Helm.
Примечание.
Эта статья обновлена с помощью команд Helm 3. Helm 3.7 включает изменения в командах CLI Helm и поддержку OCI, реализованную в более ранних версиях Helm 3. Путем разработки helm
обновлений версий. Рекомендуется использовать версию 3.7.2 или более позднюю версию.
Внимание
- В ноябре 2020 года Helm 2 достигла конца жизни. Начиная с 30 марта 2025 г. Реестр контейнеров Azure больше не будет поддерживать Helm 2. Поэтому устаревшие функции "Репозитории Helm" также будут прекращены. Мы рекомендуем немедленно перейти на Helm 3.
- Начиная с 21 января 2025 года команда CLI az acr helm push будет прекращена, чтобы предотвратить отправку новых диаграмм Helm в устаревшие репозитории Helm.
- Начиная с 30 марта 2025 г. группа команд CLI az acr helm будет прекращена, завершив все устаревшие возможности репозитория Helm в Реестр контейнеров Azure.
- Все диаграммы Helm, не хранящиеся в качестве артефакта OCI, будут удалены из Реестр контейнеров Azure 30 марта 2025 года.
- Узнайте, как найти все диаграммы Helm, хранящиеся в репозитории Helm здесь: az acr helm list. Если используется используемая диаграмма Helm, она хранится в устаревшем репозитории Helm и подвержена риску удаления.
Helm 3 или Helm 2?
Для хранения, установки чартов Helm и управления ими используются команды в интерфейсе командной строки Helm. Основные выпуски Helm включают Helm 3 и Helm 2. Дополнительные сведения о различиях версий см. в разделе часто задаваемых вопросов о версии.
Для размещения чартов Helm в Реестре контейнеров Azure следует использовать Helm 3. Возможности Helm 3:
- Хранение чатов Helm в репозиториях в Реестре контейнеров Azure и управление ими
- Чарты Helm хранятся в реестре как артефакты OCI. Реестр контейнеров Azure предоставляет общедоступную поддержку артефактов OCI, включая чарты Helm.
- Проверка подлинности в реестре с помощью команды
helm registry login
илиaz acr login
. - Использование команд
helm
для отправки, извлечения чартов Helm в реестре и управления ими. - Использование
helm install
для установки чартов в кластер Kubernetes из реестра.
Поддерживаемые компоненты
Реестр контейнеров Azure поддерживает определенные функции управления чартами Helm в зависимости от того, используется ли Helm 3 (текущая версия) или Helm 2 (нерекомендуемая версия).
Функция | Helm 2 | Helm 3 |
---|---|---|
Управление чартами с помощью команд az acr helm |
✔️ | |
Хранение чартов в виде артефактов OCI | ✔️ | |
Управление чартами с помощью команд az acr repository и колонки Репозитории на портале Azure |
✔️ |
Совместимость версий чартов
Следующие версии чартов Helm могут храниться в Реестре контейнеров Azure и устанавливаться клиентами Helm 2 и Helm 3.
Версия | Helm 2 | Helm 3 |
---|---|---|
apiVersion v1 | ✔️ | ✔️ |
apiVersion v2 | ✔️ |
Переход с Helm 2 на Helm 3
Если вы ранее сохранили и развернули чарты с помощью Helm 2 и Реестра контейнеров Azure, мы рекомендуем перейти на Helm 3. См.
- Переход с Helm 2 на 3 в документации по Helm.
- Перенос реестра для хранения артефактов OCI Helm (далее в этой статье)
Необходимые компоненты
Для сценария, описанного в этой статье, необходимы следующие ресурсы.
- Реестр контейнеров Azure в подписке Azure. При необходимости создайте реестр с помощью портала Azure или Azure CLI.
- Клиент Helm версии 3.7 или более поздней — выполните команду
helm version
, чтобы узнать текущую версию. Дополнительные сведения о том, как установить и обновить Helm, см. здесь. При обновлении более ранней версии Helm 3 ознакомьтесь с заметками о выпуске. - Кластер Kubernetes, куда будет установлен чарт Helm. При необходимости создайте кластер AKS с помощью Azure CLI, с помощью Azure PowerShell или с помощью портал Azure.
- Azure CLI версии 2.0.71 или более поздней. Выполните команду
az --version
, чтобы узнать номер версии. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Настройка клиента Helm
Используйте команду helm version
, чтобы убедиться, что Helm 3 установлен:
helm version
Примечание.
Указанная версия должна быть не ниже 3.8.0, так как поддержка OCI в более ранних версиях была экспериментальной.
Задайте следующие переменные среды для целевого реестра. ACR_NAME — это имя ресурса реестра. Если URL-адрес реестра ACR — myregistry.azurecr.io, задайте для ACR_NAME значение myregistry
ACR_NAME=<container-registry-name>
Создание примера чарта
Создайте тестовый чарт с помощью следующих команд:
mkdir helmtest
cd helmtest
helm create hello-world
В качестве базового примера измените каталог на папку templates
и сначала удалите содержимое:
cd hello-world/templates
rm -rf *
В папке templates
создайте файл с именем configmap.yaml
, выполнив следующую команду:
cat <<EOF > configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: hello-world-configmap
data:
myvalue: "Hello World"
EOF
Дополнительные сведения о создании и выполнении этого примера см. в разделе Начало работы в документации по Helm.
Сохраните диаграмму в локальный архив
Измените каталог на подкаталог hello-world
. Затем выполните команду helm package
, чтобы сохранить диаграмму в локальном архиве.
В следующем примере диаграмма сохраняется с именем и версией в Chart.yaml
.
cd ..
helm package .
Она выводит выходные данные следующего вида:
Successfully packaged chart and saved it to: /my/path/hello-world-0.1.0.tgz
Проверка подлинности в реестре
Выполните команду helm registry login
для проверки подлинности в реестре. Можно передать учетные данные реестра, соответствующие вашему сценарию, например, учетные данные субъекта-службы, идентификатор пользователя или маркер безопасности в области репозитория.
- Проверка подлинности с помощью субъекта-службы Microsoft Entra с разрешениями на вытягивание и отправку (роль AcrPush) в реестр.
SERVICE_PRINCIPAL_NAME=<acr-helm-sp> ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv) PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME \ --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \ --role acrpush \ --query "password" --output tsv) USER_NAME=$(az identity show -n $SERVICE_PRINCIPAL_NAME -g $RESOURCE_GROUP_NAME --subscription $SUBSCRIPTION_ID --query "clientId" -o tsv)
- Проверка подлинности с помощью отдельного удостоверения Microsoft Entra для отправки и извлечения диаграмм Helm с помощью маркера AD.
USER_NAME="00000000-0000-0000-0000-000000000000" PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)
- Проверка подлинности с помощью токена уровня репозитория (предварительная версия)
USER_NAME="helmtoken" PASSWORD=$(az acr token create -n $USER_NAME \ -r $ACR_NAME \ --scope-map _repositories_admin \ --only-show-errors \ --query "credentials.passwords[0].value" -o tsv)
- Укажите учетные данные в
helm registry login
.helm registry login $ACR_NAME.azurecr.io \ --username $USER_NAME \ --password $PASSWORD
Передача диаграммы в реестр в качестве артефакта OCI
В CLI Helm 3 выполните команду helm push
, чтобы отправить архив диаграммы в полный целевой репозиторий: Разделите слова в названиях диаграмм и используйте только строчные буквы и цифры. В следующем примере пространство имен целевого репозитория — helm/hello-world
, а диаграмма помечена как 0.1.0
:
helm push hello-world-0.1.0.tgz oci://$ACR_NAME.azurecr.io/helm
После успешной отправки выходные данные выглядят примерно так:
Pushed: <registry>.azurecr.io/helm/hello-world:0.1.0
digest: sha256:5899db028dcf96aeaabdadfa5899db02589b2899b025899b059db02
Вывод списка диаграмм в репозитории
Как и в случае с образами, хранящимися в реестре контейнеров Azure, можно использовать команды az acr repository, чтобы отобразить репозитории, в которых размещены чарты, а также теги и манифесты чарта.
Например, выполните команду az acr repository show, чтобы просмотреть свойства репозитория, созданного на предыдущем шаге.
az acr repository show \
--name $ACR_NAME \
--repository helm/hello-world
Она выводит выходные данные следующего вида:
{
"changeableAttributes": {
"deleteEnabled": true,
"listEnabled": true,
"readEnabled": true,
"writeEnabled": true
},
"createdTime": "2021-10-05T12:11:37.6701689Z",
"imageName": "helm/hello-world",
"lastUpdateTime": "2021-10-05T12:11:37.7637082Z",
"manifestCount": 1,
"registry": "mycontainerregistry.azurecr.io",
"tagCount": 1
}
Чтобы просмотреть сведения о чарте, хранящемся в репозитории, выполните команду az acr manifest list-metadata. Например:
az acr manifest list-metadata \
--registry $ACR_NAME \
--name helm/hello-world
В выходных данных, сокращенных в этом примере, отображается configMediaType
для application/vnd.cncf.helm.config.v1+json
:
[
{
[...]
"configMediaType": "application/vnd.cncf.helm.config.v1+json",
"createdTime": "2021-10-05T12:11:37.7167893Z",
"digest": "sha256:0c03b71c225c3ddff53660258ea16ca7412b53b1f6811bf769d8c85a1f0663ee",
"imageSize": 3301,
"lastUpdateTime": "2021-10-05T12:11:37.7167893Z",
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"tags": [
"0.1.0"
]
Установка чарта Helm
Выполните команду helm install
, чтобы установить диаграмму Helm, отправленную в реестр. Тег диаграммы передается с помощью параметра --version
. Укажите имя выпуска, например myhelmtest, или передайте параметр --generate-name
. Например:
helm install myhelmtest oci://$ACR_NAME.azurecr.io/helm/hello-world --version 0.1.0
Выходные данные после успешной установки чарта аналогичны следующим:
NAME: myhelmtest
LAST DEPLOYED: Tue Oct 4 16:59:51 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Проверьте правильность установки, выполнив команду helm get manifest
.
helm get manifest myhelmtest
Команда возвращает данные YAML в файле шаблона configmap.yaml
.
Выполните команду helm uninstall
, чтобы удалить выпуск чарта в кластере:
helm uninstall myhelmtest
Вытягивание диаграммы в локальный архив
При необходимости можно извлечь диаграмму из реестра контейнеров в локальный архив с помощью helm pull
. Тег диаграммы передается с помощью параметра --version
. Если локальный архив доступен по текущему пути, эта команда перезаписывает его.
helm pull oci://$ACR_NAME.azurecr.io/helm/hello-world --version 0.1.0
Удаление чарта из реестра
Чтобы удалить чарт из реестра контейнеров, используйте команду az acr repository delete. Выполните следующую команду и подтвердите операцию при появлении соответствующего запроса:
az acr repository delete --name $ACR_NAME --image helm/hello-world:0.1.0
Перенос реестра для хранения артефактов OCI Helm
Если вы ранее настроили реестр контейнеров Azure в качестве репозитория чартов с помощью Helm 2 и команд az acr helm
, рекомендуем обновить клиент для Helm 3. Затем выполните следующие действия, чтобы сохранить диаграммы в виде артефактов OCI в реестре.
Внимание
- После завершения перехода с репозитория чартов Helm 2 (на основе файла index.yaml) на репозитории артефактов OCI используйте интерфейс командной строки Helm и команды
az acr repository
для управления чартами. См. предыдущие разделы данной статьи. - Репозитории артефактов OCI Helm не обнаруживаются с помощью таких команд Helm, как
helm search
иhelm repo list
. Дополнительные сведения о командах Helm, используемых для хранения чартов в качестве артефактов OCI, см. в документации по Helm.
Включение поддержки OCI (включено по умолчанию в Helm версии 3.8.0)
Убедитесь, что вы используете клиент Helm 3:
helm version
Если вы используете Helm версии 3.8.0 или более поздней версии, эта функция включена по умолчанию. Если вы используете более раннюю версию, можно включить поддержку OCI, задав переменную среды:
export HELM_EXPERIMENTAL_OCI=1
Вывод списка текущих чартов
Выведите список чартов, хранящихся в реестре, с именем myregistry:
helm search repo myregistry
В выходных данных показаны чарты и их версии:
NAME CHART VERSION APP VERSION DESCRIPTION
myregistry/ingress-nginx 3.20.1 0.43.0 Ingress controller for Kubernetes...
myregistry/wordpress 9.0.3 5.3.2 Web publishing platform for building...
[...]
Локальное вытягивание архивов диаграммы
Для каждой диаграммы в репозитории выполните локальное вытягивание архива диаграммы и запишите имя файла:
helm pull myregisry/ingress-nginx
ls *.tgz
Создается локальный архив диаграммы, например ingress-nginx-3.20.1.tgz
.
Передача диаграмм как артефактов OCI в реестр
Войдите в реестр:
az acr login --name $ACR_NAME
Передайте каждую диаграмму в реестр: Пример:
helm push ingress-nginx-3.20.1.tgz oci://$ACR_NAME.azurecr.io/helm
После отправки чарта убедитесь, что он хранится в реестре:
az acr repository list --name $ACR_NAME
После отправки всех чартов при необходимости удалите репозиторий чартов Helm 2 из реестра. Это сокращает объем хранилища в реестре:
helm repo remove $ACR_NAME
Следующие шаги
- Дополнительные сведения о создании и развертывании собственных диаграмм Helm см. в разделе документации, посвященном разработке диаграмм Helm.
- Дополнительные сведения об установке приложений с помощью Helm в Службе Azure Kubernetes (AKS) см. здесь.
- Диаграммы Helm можно использовать в процессе создания контейнеров. Дополнительные сведения см. в статье Автоматизация установки исправлений ОС и платформы с помощью задач Реестра контейнеров Azure.