Имеется Helm chart, который запускает API-бекенд нашего приложения, для работы которого требуется
memcached
.
Что бы не создавать отдельный деплоймент и не добавлять в Jenkins вторую джобу с helm install – добавим memcached
как dependency для нашего чарта: тогда при установке самого приложения, Helm загрузит архив с чартом memcached
, и установит его вместе с чартом нашего приложения.
Сейчас структура каталогов нашего чарта выглядит так:
При установке зависимостей – они попадут в каталог charts
, который сейчас пустой.
Учитывайте, что:
- сабчарты являются независимыми от родительского чарта, и не могут зависеть от него
- по этой причине сабчарт не может получить доступ к родительским values
- но родитель может переопределить значения values для сабчарта
- однако, у Helm имеются global values, к которым есть доступ у всех чартов
Документация – Charts, Subcharts and Global Values, Subcharts and Global Values.
Содержание
Helm repo
Документация – Helm Repo.
Сначала найдём в Helm-репозитория чарт с memcached
, который можно использовать.
По-умолчанию после установки Helm никаких репозиториев не добавляет:
Доабвляем с именем Google-репозиторий, сохраняем с именем stable:
Проверям:
Ищем memcached
:
Есть memcached
версии 3.2.3 в репозитории stable – используем его.
Helm dependency
Документация – Dependencies.
Для описания зависимостей используем dependencies
в корневом Chart.yaml
:
dependencies: - name: memcached version: ~3.2.3 repository: "@stable"
Тут:
name
: имя пакетаversion
: версия для установки, рекомендуется использовать~
(range), в данном случае 3.2.3 значит установку версии выше 3.2.3 и ниже 3.3.0.repository
: полный адрес в виде URL (https://kubernetes-charts.storage.googleapis.com
), файла (file://../dependency_chart/nginx
), или алиас (@stable
)
Ошибка “found in Chart.yaml, but missing in charts/ directory”
Зависимость мы описали, но если запустить установку приложения сейчас – то получим ошибку:
Обновляем списки пакетов в репозиториях, и устанавливаем архив сабчарта в каталог charts/
:
Проверяем:
В каталоге charts
появился архив memcached-3.2.3.tgz
.
Запускаем установку своего чарта повторно:
Проверяем поды:
Поды с memcached
появились, отлично.
Subcharts values
Но мне не надо 3 пода – пока хватит и одного.
Смотрим файл values.yaml
нашего сабчарта, находим параметры replicaCount
и pdbMinAvailable
– их нам и надо переопределить, что бы вместо дефолтного значения в 3 пода задать 1.
В родительском values.yam
добавляем параметры для сабчарта:
... memcached: replicaCount: 1 pdbMinAvailable: 1
Передеплоиваем, проверяем:
Остаётся один под.
Проверим коннект и вообще работу memcached
– находим его Service
:
(см. Headless services)
И выполняем запрос из пода с нашим приложением к мемкешу:
Также, имеет смысл в .gitignore
добавить charts/
и Chart.lock
, что бы не пушнуть их обратно в репозиторий.
Similar posts
Also published on Medium.