Рубрики
Uncategorized

Helmfile: Развернуть несколько диаграмм в кластере K8s

Предварительные условия Cluster K8S Helmfile Docker (контейнер с изображением Helmfile, необязательно) … Помечено Kubernetes, DevOps, производительность, WebDev.

Предварительные условия

  • Кластер K8s

  • Helmfile

  • Docker (контейнер изображения Helmfile, необязательно)

Концепции

Helmfile позволяет объявить спецификацию для развертывания нескольких графиков Helm. Вся информация сохраняется в файле helmfile.yaml.

Вот преимущества использования Helmfile:

  • Держите каталог файлов значений диаграммы и сохраняйте изменения в управлении версиями.

  • Примените CI/CD к изменениям конфигурации.

  • Экологическая диаграмма продвижение.

  • Периодически синхронизируется, чтобы избежать перекоса в средах.

Установка

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»