Використання OCI-реєстрів
Цю сторінку ще не було оновлено для Helm 4. Деякі відомості можуть бути неточними або не стосуватися Helm 4. Докладнішу інформацію про нові функції, вдосконалення та істотні зміни в Helm 4 див. в Огляді Helm 4.
Рекомендується використовувати реєстри контейнерів з підтримкою OCI для зберігання та обміну пакетами чартів.
Використання OCI-реєстрів
Репозиторії Helm в OCI-реєстрах
Репозиторій Helm — це спосіб зберігання та розповсюдження пакетів чартів Helm. OCI-реєстр може містити нуль або більше репозиторіїв Helm, а кожен з цих репозиторіїв може містити нуль або більше пакетів чартів Helm.
Використання послуг реєстрів
Існує кілька реєстрів контейнерів з підтримкою OCI, які ви можете використовувати для ваших чартів Helm. Наприклад:
- Amazon ECR
- Azure Container Registry
- Cloudsmith
- Docker Hub
- Google Artifact Registry
- Harbor
- IBM Cloud Container Registry
- JFrog Artifactory
- RepoFlow
Щоб створити та налаштувати реєстр з підтримкою OCI, дотримуйтесь документації постачальника реєстру контейнерів на хостингу.
Ви можете використовувати Docker Registry або zot, які є реєстрами з підтримкою OCI, на вашому компʼютері для розробки. Запуск реєстру з підтримкою OCI на вашому компʼютері, де відбувається розробка, слід використовувати лише для тестування.
Використання sigstore для підписування чартів з підтримкою OCI
Втулок helm-sigstore дозволяє використовувати Sigstore для підписування чартів Helm тими ж інструментами, що й для підписування образів контейнерів. Це є альтернативою перевірки походження на основі GPG, що підтримуються класичними репозиторіями чартів.
Детальнішу інформацію про використання втулка helm sigstore дивіться в документації проєкту Sigstore.
Команди для роботи з реєстрами
Команда registry
login
Вхід до реєстру (зручний варіант з ручним введенням пароля)
$ helm registry login -u myuser localhost:5000
Password:
Login succeeded
logout
Вихід з реєстру
$ helm registry logout localhost:5000
Logout succeeded
Команда push
Завантажити чарт до реєстру на основі OCI:
$ helm push mychart-0.1.0.tgz oci://localhost:5000/helm-charts
Pushed: localhost:5000/helm-charts/mychart:0.1.0
Digest: sha256:ec5f08ee7be8b557cd1fc5ae1a0ac985e8538da7c93f51a51eff4b277509a723
Команда push може використовуватися тільки для .tgz файлів, створених заздалегідь за допомогою helm package.
При використанні helm push для завантаження чарту до реєстру OCI, посилання має починатися з oci:// і не повинно містити базове імʼя або теґ.
Базове імʼя посилання на реєстр визначається з імені чарту, а теґ визначається з семантичної версії чарту. Це наразі є строгими вимогами.
Деякі реєстри вимагають, щоб репозиторій та/або простір імен (якщо вказано) були створені заздалегідь. В іншому випадку під час операції helm push буде згенеровано помилку.
Якщо ви створили файл походження (.prov) і він знаходиться поруч із файлом чарту .tgz, він буде автоматично завантажений до реєстру при виконанні команди push. Це призведе до створення додаткового шару в маніфесті чарту Helm.
Користувачі втулка helm-push (для завантаження чартів до ChartMuseum) можуть зіткнутися з проблемами, оскільки втулок конфліктує з новою вбудованою функцією push. Починаючи з версії v0.10.0, втулок було перейменовано на cm-push.
Інші команди
Підтримка протоколу oci:// також доступна в різних інших командах. Ось повний список:
helm pullhelm pushhelm showhelm templatehelm installhelm upgrade
Базова назва (назва чарту) посилання реєстру включається для будь-якого типу дії, повʼязаної із завантаженням чарту (на відміну від helm push, де вона не вказується).
Ось декілька прикладів використання перерахованих вище команд для чартів з підтримкою OCI:
$ helm pull oci://localhost:5000/helm-charts/mychart --version 0.1.0
Pulled: localhost:5000/helm-charts/mychart:0.1.0
Digest: sha256:0be7ec9fb7b962b46d81e4bb74fdcdb7089d965d3baca9f85d64948b05b402ff
$ helm show all oci://localhost:5000/helm-charts/mychart --version 0.1.0
apiVersion: v2
appVersion: 1.16.0
description: A Helm chart for Kubernetes
name: mychart
...
$ helm template myrelease oci://localhost:5000/helm-charts/mychart --version 0.1.0
---
# Source: mychart/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
...
$ helm install myrelease oci://localhost:5000/helm-charts/mychart --version 0.1.0
NAME: myrelease
LAST DEPLOYED: Wed Oct 27 15:11:40 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
...
$ helm upgrade myrelease oci://localhost:5000/helm-charts/mychart --version 0.2.0
Release "myrelease" has been upgraded. Happy Helming!
NAME: myrelease
LAST DEPLOYED: Wed Oct 27 15:12:05 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
...
Вказання залежностей
Залежності чарту можна витягнути з реєстру за допомогою команди dependency update.
Поле repository для певного запису в Chart.yaml вказується як посилання на реєстр без базового імені:
dependencies:
- name: mychart
version: "2.7.0"
repository: "oci://localhost:5000/myrepo"
Це завантажить oci://localhost:5000/myrepo/mychart:2.7.0, коли виконується dependency update.
Маніфест Helm чарту
Приклад маніфесту Helm чарту, представленого в реєстрі (зверніть увагу на поля mediaType):
{
"schemaVersion": 2,
"config": {
"mediaType": "application/vnd.cncf.helm.config.v1+json",
"digest": "sha256:8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690fdb68c2111",
"size": 117
},
"layers": [
{
"mediaType": "application/vnd.cncf.helm.chart.content.v1.tar+gzip",
"digest": "sha256:1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db39af6e1617",
"size": 2487
}
]
}
Наступний приклад містить файл походження (зверніть увагу на додатковий шар):
{
"schemaVersion": 2,
"config": {
"mediaType": "application/vnd.cncf.helm.config.v1+json",
"digest": "sha256:8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690fdb68c2111",
"size": 117
},
"layers": [
{
"mediaType": "application/vnd.cncf.helm.chart.content.v1.tar+gzip",
"digest": "sha256:1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db39af6e1617",
"size": 2487
},
{
"mediaType": "application/vnd.cncf.helm.chart.provenance.v1.prov",
"digest": "sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a",
"size": 643
}
]
}
Міграція з репозиторіїв чартів
Міграція з класичних репозиторіїв чартів (репозиторіїв на основі index.yaml) є простим процесом: використовуйте helm pull, а потім helm push, щоб завантажити отримані файли .tgz до реєстру.