Репозиторій чартів

Цей розділ пояснює, як створювати та працювати з репозиторіями чартів Helm. На високому рівні, репозиторій чартів — це місце, де можуть зберігатися та розповсюджуватися упаковані чарти.

Розподілений репозиторій спільноти чартів Helm знаходиться на Artifact Hub та запрошує вас долучитися. Однак Helm також дозволяє вам створювати власні репозиторії чартів. Цей посібник пояснює, як це зробити.

Передумови

Створення репозиторію чартів

Репозиторій чартів — це HTTP-сервер, який містить файл index.yaml і, за бажанням, деякі упаковані чарти. Коли ви готові поділитися своїми чартами, найкращий спосіб зробити це — завантажити їх до репозиторію чартів.

З версії Helm 2.2.0 підтримується SSL-автентифікація клієнта для репозиторіїв. Інші протоколи автентифікації можуть бути доступні як втулки.

Оскільки репозиторій чартів може бути будь-яким HTTP-сервером, який може обслуговувати YAML і tar файли та відповідати на GET-запити, у вас є безліч варіантів для хостингу власного репозиторію чартів. Наприклад, ви можете використовувати Google Cloud Storage (GCS), Amazon S3, GitHub Pages або навіть розгорнути власний вебсервер.

Структура репозиторію чартів

Репозиторій чартів складається з упакованих чартів і спеціального файлу з назвою index.yaml, який містить індекс усіх чартів у репозиторії. Зазвичай чарти, описані в index.yaml, також розміщуються на тому ж сервері, як і файли походження.

Наприклад, структура репозиторію https://example.com/charts може виглядати так:

charts/
  |
  |- index.yaml
  |
  |- alpine-0.1.2.tgz
  |
  |- alpine-0.1.2.tgz.prov

У цьому випадку файл індексу міститиме інформацію про один чарт, Alpine, і надаватиме URL для завантаження https://example.com/charts/alpine-0.1.2.tgz для цього чарту.

Не обовʼязково, щоб пакет чарту розміщувався на тому ж сервері, що й файл index.yaml. Однак, це часто є найпростішим варіантом.

Файл індексу

Файл індексу — це YAML-файл з назвою index.yaml. Він містить деякі метадані про пакети, включаючи вміст файлу Chart.yaml чарту. Дійсний репозиторій чартів повинен мати файл індексу. Файл індексу містить інформацію про кожен чарт у репозиторії чартів. Команда helm repo index створить файл індексу на основі заданої локальної теки, яка містить упаковані чарти.

Приклад файлу індексу:

apiVersion: v1
entries:
  alpine:
    - created: 2016-10-06T16:23:20.499814565-06:00
      description: Deploy a basic Alpine Linux pod
      digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd
      home: https://helm.sh/helm
      name: alpine
      sources:
      - https://github.com/helm/helm
      urls:
      - https://technosophos.github.io/tscharts/alpine-0.2.0.tgz
      version: 0.2.0
    - created: 2016-10-06T16:23:20.499543808-06:00
      description: Deploy a basic Alpine Linux pod
      digest: 515c58e5f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cd78727
      home: https://helm.sh/helm
      name: alpine
      sources:
      - https://github.com/helm/helm
      urls:
      - https://technosophos.github.io/tscharts/alpine-0.1.0.tgz
      version: 0.1.0
  nginx:
    - created: 2016-10-06T16:23:20.499543808-06:00
      description: Create a basic nginx HTTP server
      digest: aaff4545f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cdffffff
      home: https://helm.sh/helm
      name: nginx
      sources:
      - https://github.com/helm/charts
      urls:
      - https://technosophos.github.io/tscharts/nginx-1.1.0.tgz
      version: 1.1.0
generated: 2016-10-06T16:23:20.499029981-06:00

Хостинг репозиторіїв чартів

У цьому розділі показано кілька способів хостингу репозиторію чартів.

Google Cloud Storage (GCS)

Першим кроком є створення кошика GCS. Назвемо його fantastic-charts.

Створення кошика GCS

Далі, зробіть свій кошик публічним, редагувавши дозволи кошику.

Редагування дозволів

Додайте цей пункт, щоб зробити кошик публічним:

Зробити кошик публічним

Вітаємо, тепер у вас є порожній кошик GCS, готовий для обслуговування чартів!

Ви можете завантажити свій репозиторій чартів за допомогою командного рядка Google Cloud Storage або через вебінтерфейс GCS. Доступ до публічного кошика GCS можна отримати через простий HTTPS за цією адресою: https://bucket-name.storage.googleapis.com/.

Cloudsmith

Ви також можете налаштувати репозиторії чартів за допомогою Cloudsmith. Дізнайтеся більше про репозиторії чартів з Cloudsmith тут.

JFrog Artifactory

Аналогічно, ви можете налаштувати репозиторії чартів за допомогою JFrog Artifactory. Дізнайтеся більше про репозиторії чартів з JFrog Artifactory тут.

Приклад GitHub Pages

Подібним чином ви можете створити репозиторій чартів за допомогою GitHub Pages.

GitHub дозволяє обслуговувати статичні вебсторінки двома різними способами:

  • Налаштувавши проєкт на обслуговування вмісту його теки docs/
  • Налаштувавши проєкт на обслуговування певної гілки

Ми скористаємося другим підходом, хоча перший також простий.

Перший крок — створити гілку gh-pages. Ви можете зробити це локально:

$ git checkout -b gh-pages

Або через веббраузер, використовуючи кнопку Branch у вашому репозиторії GitHub:

Створення гілки GitHub Pages

Далі потрібно переконатися, що ваша гілка gh-pages налаштована як GitHub Pages. Для цього натисніть у вашому репо кнопку Settings і прокрутіть до розділу GitHub pages і налаштуйте його, як показано нижче:

Налаштування гілки GitHub Pages

Стандартно Source зазвичай встановлюється на gh-pages branch. Якщо це не встановлено, виберіть його.

Ви можете використовувати власний домен, якщо бажаєте.

І переконайтеся, що Enforce HTTPS відмічено, щоб HTTPS використовувався під час обслуговування чартів.

У такому налаштуванні ви можете використовувати основну гілку для зберігання коду чартів, а гілку gh-pages як репозиторій чартів, наприклад: https://USERNAME.github.io/REPONAME. Демонстраційний репозиторій TS Charts доступний за адресою https://technosophos.github.io/tscharts/.

Якщо ви вирішили використовувати GitHub Pages для хостингу репозиторію чартів, ознайомтеся з Chart Releaser Action. Chart Releaser Action — це робочий процес GitHub Action, який перетворює проєкт GitHub у репозиторій чартів Helm, використовуючи CLI-інструмент helm/chart-releaser.

Звичайні вебсервери

Щоб налаштувати звичайний вебсервер для обслуговування чартів Helm, вам просто потрібно зробити наступне:

  • Помістіть ваш індекс і чарти в теку, яку сервер може обслуговувати
  • Переконайтеся, що файл index.yaml доступний без необхідності автентифікації
  • Переконайтеся, що файли yaml обслуговуються з правильним типом вмісту (text/yaml або text/x-yaml)

Наприклад, якщо ви хочете обслуговувати свої чарти з теки $WEBROOT/charts, переконайтеся, що у вашому вебкорені є тека charts/, і помістіть туди файл індексу та чарти.

Сервер репозиторію ChartMuseum

ChartMuseum — це сервер репозиторію чартів Helm з відкритим кодом, написаний на Go (Golang), з підтримкою хмарних сховищ, включаючи Google Cloud Storage, Amazon S3, Microsoft Azure Blob Storage, Alibaba Cloud OSS Storage, Openstack Object Storage, Oracle Cloud Infrastructure Object Storage, Baidu Cloud BOS Storage, Tencent Cloud Object Storage, DigitalOcean Spaces, Minio та etcd.

Ви також можете використовувати сервер ChartMuseum для хостингу репозиторію чартів з локальної файлової системи.

Реєстр пакетів GitLab

З GitLab ви можете публікувати чарти Helm у реєстрі пакетів вашого проєкту. Дізнайтеся більше про налаштування репозиторію пакетів Helm за допомогою GitLab тут.

Управління репозиторіями чартів

Тепер, коли у вас є репозиторій чартів, остання частина цього посібника пояснює, як підтримувати чарти в цьому репозиторії.

Зберігання чартів у вашому репозиторії чартів

Тепер, коли у вас є репозиторій чартів, завантажимо чарти та файл індексу до репозиторію. Чарти в репозиторії мають бути запаковані (helm package chart-name/) та правильно версійовані (відповідно до рекомендацій SemVer 2).

Наступні кроки складають приклад робочого процесу, але ви можете використовувати будь-який зручний вам процес для зберігання та оновлення чартів у вашому репозиторії.

Як тільки у вас є готовий запакований чарт, створіть нову теку і перемістіть туди ваш запакований чарт.

$ helm package docs/examples/alpine/
$ mkdir fantastic-charts
$ mv alpine-0.1.0.tgz fantastic-charts/
$ helm repo index fantastic-charts --url https://fantastic-charts.storage.googleapis.com

Остання команда бере шлях до щойно створеної локальної теки та URL вашого віддаленого репозиторію чартів і створює файл index.yaml у вказаній теці.

Тепер ви можете завантажити чарт і файл індексу у ваш репозиторій чартів, використовуючи інструмент синхронізації або вручну. Якщо ви використовуєте Google Cloud Storage, ознайомтеся з цим прикладом робочого процесу, що використовує клієнт gsutil. Для GitHub ви можете просто помістити чарти у відповідну гілку призначення.

Додавання нових чартів до наявного репозиторію

Щоразу, коли ви хочете додати новий чарт у ваш репозиторій, потрібно перестворити індекс. Команда helm repo index повністю перебудовує файл index.yaml з нуля, включаючи лише ті чарти, які вона знаходить локально.

Однак, ви можете використовувати прапорець --merge для поступового додавання нових чартів до наявного файлу index.yaml (чудовий варіант під час роботи з віддаленим репозиторієм, як-от GCS). Виконайте команду helm repo index --help, щоб дізнатися більше.

Переконайтеся, що ви завантажили як оновлений файл index.yaml, так і чарт. Якщо ви згенерували файл підтвердження цілісності, завантажте і його.

Поділитися чартами з іншими

Коли ви готові поділитися чартами, просто повідомте комусь URL вашого репозиторію.

Після цього вони додадуть репозиторій до свого клієнта helm через команду helm repo add [NAME] [URL] з будь-яким імʼям, яке вони хочуть використовувати для позначення репозиторію.

$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com
$ helm repo list
fantastic-charts    https://fantastic-charts.storage.googleapis.com

Якщо чарти захищені за допомогою базової автентифікації HTTP, ви також можете вказати імʼя користувача та пароль тут:

$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com --username my-username --password my-password
$ helm repo list
fantastic-charts    https://fantastic-charts.storage.googleapis.com

Примітка: Репозиторій не буде додано, якщо він не містить дійсний файл index.yaml.

Примітка: Якщо ваш репозиторій helm, наприклад, використовує самопідписний сертифікат, ви можете використовувати helm repo add --insecure-skip-tls-verify ..., щоб пропустити перевірку CA.

Після цього ваші користувачі зможуть шукати серед ваших чартів. Після того, як ви оновите репозиторій, вони можуть використовувати команду helm repo update, щоб отримати найновішу інформацію про чарт.

Під капотом команди helm repo add і helm repo update завантажують файл index.yaml і зберігають його в теці $XDG_CACHE_HOME/helm/repository/cache/. Саме тут функція helm search знаходить інформацію про чарти.