Предварительные условия
Кластер K8s
Helmfile
Docker (контейнер изображения Helmfile, необязательно)
Концепции
Helmfile позволяет объявить спецификацию для развертывания нескольких графиков Helm. Вся информация сохраняется в файле helmfile.yaml.
Вот преимущества использования Helmfile:
Держите каталог файлов значений диаграммы и сохраняйте изменения в управлении версиями.
Примените CI/CD к изменениям конфигурации.
Экологическая диаграмма продвижение.
Периодически синхронизируется, чтобы избежать перекоса в средах.
Установка
Скачать Helmfile Release: https://github.com/roboll/helmfile/releases
Скачать через Brew: Brew Install Helmfile
Используйте контейнер Docker:
docker run --rm --net=host -v "${HOME}/.kube:/root/.kube" -v "${HOME}/.config/helm:/root/.config/helm" -v "${PWD}:/data" --workdir /data quay.io/roboll/helmfile:helm3-v0.135.0 helmfile
- Используйте контейнер Docker (Cablespaghetti/Helmfile-Docker):
docker run --rm --net=host -v "${HOME}/.kube:/root/.kube" -v "${HOME}/.config/helm:/root/.config/helm" -v "${PWD}:/data" --workdir /data cablespaghetti/helmfile-docker helmfile
Начиная
Предположим, что Helmfile.yaml, представляющий желаемое состояние вашего руля, выглядит как:
releases: - name: prom-norbac-ubuntu namespace: prometheus chart: stable/prometheus set: - name: rbac.create value: false
Синхронизируйте свое состояние кластера Kubernetes с желаемой, работая:
# Sync all your chart releases helmfile sync # OR # Apply all your chart releases helmfile apply # OR # Sync all your chart releases (offline) helmfile charts
Расширенное использование
Несколько значений (для нескольких сред)
Dev Environment
# helmfile-dev.yaml repositories: - name: bitnami url: https://charts.bitnami.com/bitnami releases: - name: my-postgres namespace: my-namespace-dev chart: bitnami/postgres values: - ./values/postgres-dev-1.yaml - ./values/postgres-dev-2.yaml
# Sync all your chart releases helmfile -f helmfile-dev.yaml sync
Среда продувки
# helmfile-prod.yaml repositories: - name: bitnami url: https://charts.bitnami.com/bitnami releases: - name: my-postgres namespace: my-namespace-production chart: bitnami/postgres values: - ./values/postgres-prod-1.yaml - ./values/postgres-prod-2.yaml
# Sync all your chart releases helmfile -f helmfile-prod.yaml sync
Переменные среды
# helmfile-prod.yaml repositories: - name: bitnami url: https://charts.bitnami.com/bitnami releases: - name: {{ requiredEnv "NAME" }}-postgres namespace: {{ requiredEnv "NAME" }} chart: bitnami/postgres set: - name: image value: {{ requiredEnv "DOCKER_IMAGE" }} - name: version value: {{ requiredEnv "VERSION" }} values: - ./values/postgres-prod.yaml
# Sync all your chart releases NAME=my-project VERSION=1 DOCKER_IMAGE=postgres:latest helmfile -f helmfile-prod.yaml sync
Шаблоны
# helmfile.yaml releases: - name: {{ requiredEnv "NAME" }}-vault namespace: {{ requiredEnv "NAME" }} chart: roboll/vault-secret-manager values: - values.yaml.gotmpl
# values.yaml.gotmpl db: username: {{ requiredEnv "DB_USERNAME" }} password: {{ requiredEnv "DB_PASSWORD" }} proxy: domain: {{ requiredEnv "PLATFORM_ID" }}.my-domain.com scheme: {{ env "SCHEME" | default "https" }}
Файлы среды
# helmfile.yaml environments: production: values: - production.yaml releases: - name: myapp values: - values.yaml.gotmpl
# production.yaml domain: prod.example.com releaseName: prod
# values.yaml.gotmpl domain: {{ .Values | get "domain" "dev.example.com" }}
Секреты
# helmfile.yaml environments: production: secrets: - environments/production/secrets.yaml releases: - name: myapp chart: mychart values: - values.yaml.gotmpl
# environments/production/secrets.yaml foo.bar: "mysupersecretstring"
Значение можно использовать в ваших значениях.
{{ .Values.foo.bar }}
Примеры
repositories: - name: bitnami url: https://charts.bitnami.com/bitnami releases: - name: my-nginx namespace: my-namespace-production chart: bitnami/nginx values: - ./values/nginx-production.yaml - name: my-postgres namespace: my-namespace-production chart: bitnami/postgres values: - ./values/postgres-production.yaml
Ссылки
https://github.com/roboll/helmfile
https://github.com/roboll/helmfile/tree/master/examples
https://lyz-code.github.io/blue-book/devops/helmfile/#:~:text=Helmfile%20is%20a%20declarative%20spec,Environmental%20chart%20promotion.
https://github.com/wkrzywiec/k8s-helm-helmfile
https://hub.docker.com/r/cablespaghetti/helmfile-docker
https://alexsimonjones.medium.com/helmfile-post-v3-helm-519c82a29c6a
Оригинал: «https://dev.to/javidjms/helmfile-deploy-multiple-charts-in-your-cluster-k8s-422j»