TLDR: Полные команды можно найти в конце статьи.
Недавно я начал изучать Helm и подумал о возможности размещения графиков на GitHub Container Registry (GHCR), поскольку графики соответствуют стандарту OCI (Open Container Image), который также используется в образах контейнеров Docker. В связи с этим я попытался понять, какие шаги необходимы для размещения моих графиков на GHCR, поскольку публичные графики / контейнеры бесплатны. В следующем посте будут описаны необходимые шаги. Итак, давайте погрузимся в процесс.
Helm
Прежде всего, убедитесь, что у вас установлен Helm версии >3.8
, поскольку поддержка OCI до этой версии является экспериментальной. Использовать функцию до версии 3.8
можно, установив переменную окружения HELM_EXPERIMENTAL_OCI=1
.
Если у вас еще не установлен Helm, вы можете сделать это через brew install helm
на macOS. Для других операционных систем, пожалуйста, ознакомьтесь с документацией Helm для получения дополнительной информации о вариантах установки 1.
Для целей презентации я буду использовать график по умолчанию, созданный Helm, который является результатом выполнения команды helm create <chart-name>
. Для этого сообщения я назову его helm create example-chart
. Содержимое созданной директории не является темой этого сообщения, но более подробную информацию можно найти в документации Helm 2.
Чтобы упаковать все это и сделать готовым для отправки в GHCR, Helm предоставляет команду helm package
, которая принимает аргумент каталога для упаковки. В родительском каталоге графика. Так что использование команды helm package example-chart
создаст новый пакет с именем example-chart-0.1.0.tgz
. Номер версии можно изменить в example-chart/Chart.yaml
в атрибуте version
.
Подготовка реестра контейнеров GitHub
Для отправки в GitHub Container Registry нам необходимо пройти аутентификацию с помощью Personal Access Token. Если вы никогда не создавали его, вы можете выполнить следующие шаги, описанные здесь 3. Убедитесь, что ваш токен имеет следующие права доступа:
read:packages
write:packages
delete:packages
Вы можете либо просто экспортировать ваш Токен доступа для терминальной сессии и использовать export GHCR_PAT=ghp_...
с вашим Токеном после знака =
, либо использовать ваш .zshrc
или .bashrc
. Для этого отредактируйте свой файл, например, с помощью nano .zshrc
и добавьте строку экспорта в свой файл. Нужная вам оболочка зависит от вашей текущей оболочки по умолчанию. Чтобы узнать, какой из них используется по умолчанию, используйте echo $SHELL
в терминале.
После сохранения и закрытия редактора с помощью ctrl
+ x
и подтверждения y
вы должны перезагрузить ваш .zshrc
с помощью source .zshrc
. После этого токен должен быть доступен для использования.
Вход в систему
Чтобы проверить, все ли работает, используйте echo $GHCR_PAT | docker login ghcr.io -u <GITHUB-USERNAME> --password-stdin
с вашим именем пользователя после флага -u
.
Если все настроено правильно, вы должны получить ответ Login Succeeded
.
Нажатие на GHCR
Продвижение теперь очень простое. Получите текущую версию графика и используйте Helm для перехода на GHCR:
export CHART_VERSION=$(grep 'version:' ./example-chart/Chart.yaml | tail -n1 | awk '{ print $2}')
helm push example-chart-${CHART_VERSION}.tgz oci://ghcr.io/niklasmtj
Вы должны получить что-то похожее на следующее:
Pushed: ghcr.io/niklasmtj/example-chart:0.1.0
Digest: sha256:c13e9bc40b48460a7b3af6a5df78b4faeff6af7d0688333124884117478be18c
Теперь ваш пакет загружен, и вы можете проверить его через свой профиль на вкладке «Пакеты». Например, этот пример графика можно найти в разделе https://github.com/users/niklasmtj/packages/container/package/example-chart.
Вот как вы можете разместить свои графики Helm на GitHub’s Container Registry.
Спасибо за прочтение,
Никлас
Коротко о командах
helm create <chart-name>
helm package <chart-name>
echo $GHCR_PAT | docker login ghcr.io -u <GITHUB-USERNAME> --password-stdin
export CHART_VERSION=$(grep 'version:' ./path/to/Chart.yaml | tail -n1 | awk '{ print $2 }')
helm push <chart-name>-${CHART_VERSION}.tgz oci://ghcr.io/<GITHUB-USERNAME>
-
https://helm.sh/docs/intro/install/
-
https://helm.sh/docs/chart_template_guide/getting_started/
-
https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry