ืืจื’ื•ืŸ ืคืจื™ืกื” ืœืกื‘ื™ื‘ื•ืช K8s ืžืจื•ื‘ื•ืช ื‘ืืžืฆืขื•ืช helmfile

Helmfile - ืขื˜ื™ืคื” ืขื‘ื•ืจ ื”ึถื’ึถื”, ื”ืžืืคืฉืจ ืœืš ืœืชืืจ ืฉื—ืจื•ืจื™ื ืจื‘ื™ื ืฉืœ ื”ื’ื” ื‘ืžืงื•ื ืื—ื“, ืœื”ื’ื“ื™ืจ ืคืจืžื˜ืจื™ื ืฉืœ ื”ืชืจืฉื™ืžื™ื ืฉืœื”ื ืขื‘ื•ืจ ืžืกืคืจ ืกื‘ื™ื‘ื•ืช, ื•ื’ื ืœืงื‘ื•ืข ืืช ืกื“ืจ ื”ืคืจื™ืกื” ืฉืœื”ื.

ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขืœ helfile ืขืฆืžื• ื•ื“ื•ื’ืžืื•ืช ืœืฉื™ืžื•ืฉ ื‘ื• ื‘ readme ะธ ืžื“ืจื™ืš ืœืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” ืžื•ืžืœืฆื•ืช.

ื ื›ื™ืจ ื“ืจื›ื™ื ืœื ื‘ืจื•ืจื•ืช ืœืชื™ืื•ืจ ืžื”ื“ื•ืจื•ืช ื‘-helmfile

ื ื ื™ื— ืฉื™ืฉ ืœื ื• ื—ื‘ื™ืœื” ืฉืœ ืชืจืฉื™ืžื™ ื”ื’ื” (ืœื“ื•ื’ืžื”, ื ื ื™ื— postgres ื•ื™ื™ืฉื•ื ืื—ื•ืจื™ ื›ืœืฉื”ื•) ื•ืžืกืคืจ ืกื‘ื™ื‘ื•ืช (ืžืกืคืจ ืืฉื›ื•ืœื•ืช kubernetes, ืžืกืคืจ ืžืจื—ื‘ื™ ืฉืžื•ืช, ืื• ื›ืžื” ืžืฉื ื™ื”ื). ืื ื—ื ื• ืœื•ืงื—ื™ื ืืช ืงื•ื‘ืฅ ื”ื”ื’ื”, ืงื•ืจืื™ื ืืช ื”ืชื™ืขื•ื“ ื•ืžืชื—ื™ืœื™ื ืœืชืืจ ืืช ื”ืกื‘ื™ื‘ื•ืช ื•ื”ืฉื—ืจื•ืจื™ื ืฉืœื ื•:

    .
    โ”œโ”€โ”€ envs
    โ”‚   โ”œโ”€โ”€ devel
    โ”‚   โ”‚   โ””โ”€โ”€ values
    โ”‚   โ”‚       โ”œโ”€โ”€ backend.yaml
    โ”‚   โ”‚       โ””โ”€โ”€ postgres.yaml
    โ”‚   โ””โ”€โ”€ production
    โ”‚       โ””โ”€โ”€ values
    โ”‚           โ”œโ”€โ”€ backend.yaml
    โ”‚           โ””โ”€โ”€ postgres.yaml
    โ””โ”€โ”€ helmfile.yaml

helmfile.yaml

environments:
  devel:
  production:

releases:
  - name: postgres
    labels:
      app: postgres
    wait: true
    chart: stable/postgresql
    version: 8.4.0
    values:
      - envs/{{ .Environment.Name }}/values/postgres.yaml
  - name: backend
    labels:
      app: backend
    wait: true
    chart: private-helm-repo/backend
    version: 1.0.5
    needs:
      - postgres
    values:
      - envs/{{ .Environment.Name }}/values/backend.yaml

ืกื™ื™ืžื ื• ืขื 2 ืกื‘ื™ื‘ื•ืช: ืœื”ืชืคืชื—, ื”ืคืงื” - ื›ืœ ืื—ื“ ืžื›ื™ืœ ืขืจื›ื™ื ืžืฉืœื• ืขื‘ื•ืจ ื˜ื‘ืœืื•ืช ืฉื—ืจื•ืจ ื”ื”ื’ื”. ืื ื• ื ืคืจื•ืก ืœื”ื ื›ืš:

helmfile -n <namespace> -e <env> apply

ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ ืชืจืฉื™ืžื™ ื”ื’ื” ื‘ืกื‘ื™ื‘ื•ืช ืฉื•ื ื•ืช

ืžื” ืื ื ืฆื˜ืจืš ืœื”ื•ืฆื™ื ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ ื”-backend ืœืกื‘ื™ื‘ื•ืช ืฉื•ื ื•ืช? ื›ื™ืฆื“ ืœื”ื’ื“ื™ืจ ืคืจืžื˜ืจื™ื ืœื’ืจืกืช ื”ืฉื—ืจื•ืจ? ื”ืขืจื›ื™ื ื”ืกื‘ื™ื‘ืชื™ื™ื ื”ื–ืžื™ื ื™ื ื“ืจืš {{ .Values }}

helmfile.yaml

environments:
  devel:
+   values:
+   - charts:
+       versions:
+         backend: 1.1.0
  production:
+   values:
+   - charts:
+       versions:
+         backend: 1.0.5
...
  - name: backend
    labels:
      app: backend
    wait: true
    chart: private-helm-repo/backend
-   version: 1.0.5
+   version: {{ .Values.charts.versions.backend }}
...

ืกื˜ ืฉื•ื ื” ืฉืœ ื™ื™ืฉื•ืžื™ื ื‘ืกื‘ื™ื‘ื•ืช ืฉื•ื ื•ืช

ื ื”ื“ืจ, ืื‘ืœ ืžื” ืื ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื production ืœื’ืœื’ืœ ืืช postgres, ื›ื™ ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœื“ื—ื•ืฃ ืืช ืžืกื“ ื”ื ืชื•ื ื™ื ืœ-k8s ื•ืœืžื›ื™ืจื” ื™ืฉ ืœื ื• ืืฉื›ื•ืœ postgres ื ืคืจื“ ื ืคืœื? ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื• ื™ืฉ ืœื ื• ืชื•ื•ื™ื•ืช

helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply

ื–ื” ื ื”ื“ืจ, ืื‘ืœ ื‘ืื•ืคืŸ ืื™ืฉื™ ืื ื™ ืžืขื“ื™ืฃ ืœืชืืจ ืื™ืœื• ืืคืœื™ืงืฆื™ื•ืช ืœืคืจื•ืก ื‘ืกื‘ื™ื‘ื” ืœื ื‘ืืžืฆืขื•ืช ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ื”ืฉืงื”, ืืœื ื‘ืชื™ืื•ืจ ื”ืกื‘ื™ื‘ื•ืช ืขืฆืžืŸ. ืžื” ืœืขืฉื•ืช? ืืชื” ื™ื›ื•ืœ ืœืžืงื ืืช ืชื™ืื•ืจื™ ื”ืฉื—ืจื•ืจ ื‘ืชื™ืงื™ื™ื” ื ืคืจื“ืช, ืœื™ืฆื•ืจ ืจืฉื™ืžื” ืฉืœ ื”ืžื”ื“ื•ืจื•ืช ื”ื ื—ื•ืฆื•ืช ื‘ืชื™ืื•ืจ ื”ืกื‘ื™ื‘ื” ื•"ืœืืกื•ืฃ" ืจืง ืืช ื”ืžื”ื“ื•ืจื•ืช ื”ื ื“ืจืฉื•ืช, ืชื•ืš ื”ืชืขืœืžื•ืช ืžื”ืฉืืจ

    .
    โ”œโ”€โ”€ envs
    โ”‚   โ”œโ”€โ”€ devel
    โ”‚   โ”‚   โ””โ”€โ”€ values
    โ”‚   โ”‚       โ”œโ”€โ”€ backend.yaml
    โ”‚   โ”‚       โ””โ”€โ”€ postgres.yaml
    โ”‚   โ””โ”€โ”€ production
    โ”‚       โ””โ”€โ”€ values
    โ”‚           โ”œโ”€โ”€ backend.yaml
    โ”‚           โ””โ”€โ”€ postgres.yaml
+   โ”œโ”€โ”€ releases
+   โ”‚   โ”œโ”€โ”€ backend.yaml
+   โ”‚   โ””โ”€โ”€ postgres.yaml
    โ””โ”€โ”€ helmfile.yaml

helmfile.yaml


  environments:
    devel:
      values:
      - charts:
          versions:
            backend: 1.1.0
      - apps:
        - postgres
        - backend

    production:
      values:
      - charts:
          versions:
            backend: 1.0.5
      - apps:
        - backend

- releases:
-    - name: postgres
-      labels:
-        app: postgres
-      wait: true
-      chart: stable/postgresql
-      version: 8.4.0
-      values:
-        - envs/{{ .Environment.Name }}/values/postgres.yaml
-    - name: backend
-      labels:
-        app: backend
-      wait: true
-      chart: private-helm-repo/backend
-     version: {{ .Values.charts.versions.backend }}
-     needs:
-       - postgres
-     values:
-       - envs/{{ .Environment.Name }}/values/backend.yaml
+ ---
+ bases:
+ {{- range .Values.apps }}
+   - releases/{{ . }}.yaml
+ {{- end }}

releases/postgres.yaml

releases:
  - name: postgres
    labels:
      app: postgres
    wait: true
    chart: stable/postgresql
    version: 8.4.0
    values:
      - envs/{{ .Environment.Name }}/values/postgres.yaml

releases/backend.yaml

releases:
  - name: backend
    labels:
      app: backend
    wait: true
    chart: private-helm-repo/backend
    version: {{ .Values.charts.versions.backend }}
    needs:
      - postgres
    values:
      - envs/{{ .Environment.Name }}/values/backend.yaml

ื”ืคืชืง

ื‘ืขืช ืฉื™ืžื•ืฉ bases: ื™ืฉ ืฆื•ืจืš ืœื”ืฉืชืžืฉ ื‘ืžืคืจื™ื“ yaml ---, ื›ื“ื™ ืฉืชื•ื›ืœื• ืœืฉื—ืจืจ ืชื‘ื ื™ืช (ื•ื—ืœืงื™ื ืื—ืจื™ื, ื›ื’ื•ืŸ helmDefaults) ืขื ืขืจื›ื™ื ืžืกื‘ื™ื‘ื•ืช

ื‘ืžืงืจื” ื–ื”, ืฉื—ืจื•ืจ postgres ืืคื™ืœื• ืœื ื™ื™ื›ืœืœ ื‘ืชื™ืื•ืจ ืœื”ืคืงื”. ื‘ื ื•ื—ื•ืช ืจื‘ื”!

ืขืจื›ื™ื ื’ืœื•ื‘ืœื™ื™ื ืฉื ื™ืชื ื™ื ืœื‘ื™ื˜ื•ืœ ืขื‘ื•ืจ ืžื”ื“ื•ืจื•ืช

ื›ืžื•ื‘ืŸ, ื–ื” ื ื”ื“ืจ ืฉืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืขืจื›ื™ื ืขื‘ื•ืจ ืชืจืฉื™ืžื™ ื”ื’ื” ืขื‘ื•ืจ ื›ืœ ืกื‘ื™ื‘ื”, ืื‘ืœ ืžื” ืื ื™ืฉ ืœื ื• ื›ืžื” ืกื‘ื™ื‘ื•ืช ืžืชื•ืืจื•ืช, ื•ืื ื—ื ื• ืจื•ืฆื™ื, ืœืžืฉืœ, ืœื”ื’ื“ื™ืจ ืืช ืื•ืชื• ื”ื“ื‘ืจ ืขื‘ื•ืจ ื›ื•ืœื affinity, ืื‘ืœ ืื ื—ื ื• ืœื ืจื•ืฆื™ื ืœื”ื’ื“ื™ืจ ืื•ืชื• ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ืชืจืฉื™ืžื™ื ืขืฆืžื, ื”ืžืื•ื—ืกื ื™ื ื‘ืœืคืช.

ื‘ืžืงืจื” ื–ื”, ืขื‘ื•ืจ ื›ืœ ืžื”ื“ื•ืจื” ื ื•ื›ืœ ืœืฆื™ื™ืŸ 2 ืงื‘ืฆื™ื ืขื ืขืจื›ื™ื: ื”ืจืืฉื•ืŸ ืขื ืขืจื›ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ, ืฉื™ืงื‘ืขื• ืืช ืขืจื›ื™ ื”ืชืจืฉื™ื ืขืฆืžื•, ื•ื”ืฉื ื™ ืขื ืขืจื›ื™ื ืขื‘ื•ืจ ื”ืกื‘ื™ื‘ื”, ืืฉืจ ื‘ืชื•ืจื ื™ืขืงืคื• ืืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

    .
    โ”œโ”€โ”€ envs
+   โ”‚   โ”œโ”€โ”€ default
+   โ”‚   โ”‚   โ””โ”€โ”€ values
+   โ”‚   โ”‚       โ”œโ”€โ”€ backend.yaml
+   โ”‚   โ”‚       โ””โ”€โ”€ postgres.yaml
    โ”‚   โ”œโ”€โ”€ devel
    โ”‚   โ”‚   โ””โ”€โ”€ values
    โ”‚   โ”‚       โ”œโ”€โ”€ backend.yaml
    โ”‚   โ”‚       โ””โ”€โ”€ postgres.yaml
    โ”‚   โ””โ”€โ”€ production
    โ”‚       โ””โ”€โ”€ values
    โ”‚           โ”œโ”€โ”€ backend.yaml
    โ”‚           โ””โ”€โ”€ postgres.yaml
    โ”œโ”€โ”€ releases
    โ”‚   โ”œโ”€โ”€ backend.yaml
    โ”‚   โ””โ”€โ”€ postgres.yaml
    โ””โ”€โ”€ helmfile.yaml

releases/backend.yaml

releases:
  - name: backend
    labels:
      app: backend
    wait: true
    chart: private-helm-repo/backend
    version: {{ .Values.charts.versions.backend }}
    needs:
      - postgres
    values:
+     - envs/default/values/backend.yaml
      - envs/{{ .Environment.Name }}/values/backend.yaml

envs/default/values/backend.yaml

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 1
      podAffinityTerm:
        labelSelector:
          matchExpressions:
          - key: app.kubernetes.io/name
            operator: In
            values:
            - backend
        topologyKey: "kubernetes.io/hostname"

ื”ื’ื“ืจืช ืขืจื›ื™ื ื’ืœื•ื‘ืœื™ื™ื ืขื‘ื•ืจ ืชืจืฉื™ืžื™ ื”ื”ื’ื” ืฉืœ ื›ืœ ื”ืžื”ื“ื•ืจื•ืช ื‘ืจืžืช ื”ืกื‘ื™ื‘ื”

ื ื ื™ื— ืฉืื ื• ื™ื•ืฆืจื™ื ืžืกืคืจ ื›ื ื™ืกื” ื‘ืžืกืคืจ ืžื”ื“ื•ืจื•ืช - ื ื•ื›ืœ ืœื”ื’ื“ื™ืจ ื™ื“ื ื™ืช ืขื‘ื•ืจ ื›ืœ ืชืจืฉื™ื hosts:, ืื‘ืœ ื‘ืžืงืจื” ืฉืœื ื• ื”ืชื—ื•ื ื–ื”ื”, ืื– ืœืžื” ืœื ืœืฉื™ื ืื•ืชื• ื‘ืื™ื–ื” ืžืฉืชื ื” ื’ืœื•ื‘ืœื™ ื•ืคืฉื•ื˜ ืœื”ื—ืœื™ืฃ ืืช ื”ืขืจืš ืฉืœื• ื‘ืชืจืฉื™ืžื™ื? ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืงื‘ืฆื™ื ืขื ืขืจื›ื™ื ืฉืื ื• ืจื•ืฆื™ื ืœื”ื’ื“ื™ืจ ืคืจืžื˜ืจื™ื ื™ืฆื˜ืจื›ื• ืœืงื‘ืœ ืืช ื”ืกื™ื•ืžืช .gotmpl, ื›ืš ืฉื”-helmfile ื™ื•ื“ืข ืฉืฆืจื™ืš ืœื”ืจื™ืฅ ืื•ืชื• ื“ืจืš ืžื ื•ืข ื”ืชื‘ื ื™ืช.

    .
    โ”œโ”€โ”€ envs
    โ”‚   โ”œโ”€โ”€ default
    โ”‚   โ”‚   โ””โ”€โ”€ values
-   โ”‚   โ”‚       โ”œโ”€โ”€ backend.yaml
-   โ”‚   โ”‚       โ”œโ”€โ”€ postgres.yaml
+   โ”‚   โ”‚       โ”œโ”€โ”€ backend.yaml.gotmpl
+   โ”‚   โ”‚       โ””โ”€โ”€ postgres.yaml.gotmpl
    โ”‚   โ”œโ”€โ”€ devel
    โ”‚   โ”‚   โ””โ”€โ”€ values
    โ”‚   โ”‚       โ”œโ”€โ”€ backend.yaml
    โ”‚   โ”‚       โ””โ”€โ”€ postgres.yaml
    โ”‚   โ””โ”€โ”€ production
    โ”‚       โ””โ”€โ”€ values
    โ”‚           โ”œโ”€โ”€ backend.yaml
    โ”‚           โ””โ”€โ”€ postgres.yaml
    โ”œโ”€โ”€ releases
    โ”‚   โ”œโ”€โ”€ backend.yaml
    โ”‚   โ””โ”€โ”€ postgres.yaml
    โ””โ”€โ”€ helmfile.yaml

helmfile.yaml

  environments:
    devel:
      values:
      - charts:
          versions:
            backend: 1.1.0
      - apps:
        - postgres
        - backend
+     - global:
+         ingressDomain: k8s.devel.domain

    production:
      values:
      - charts:
          versions:
            backend: 1.0.5
      - apps:
        - backend
+     - global:
+         ingressDomain: production.domain
  ---
  bases:
  {{- range .Values.apps }}
    - releases/{{ . }}.yaml
  {{- end }}

envs/default/values/backend.yaml.gotmpl

ingress:
  enabled: true
  paths:
    - /api
  hosts:
    - {{ .Values.global.ingressDomain }}

envs/default/values/postgres.yaml.gotmpl

ingress:
  enabled: true
  paths:
    - /
  hosts:
    - postgres.{{ .Values.global.ingressDomain }}

ื”ืคืชืง

ื‘ืจื•ืจ ืฉื”ื›ื ื™ืกื” ืœืชืจืฉื™ื ื”ืคื•ืกื˜-ื’ืจืก ื”ื™ื ืžืฉื”ื• ืžืคื•ืงืคืง ื‘ื™ื•ืชืจ, ืื– ืžืืžืจ ื–ื” ื ื™ืชืŸ ืคืฉื•ื˜ ื›ื“ื•ื’ืžื” ื›ื“ื•ืจื™ืช ื‘ื—ืœืœ ืจื™ืง ื•ื›ื“ื™ ืœื ืœื”ื›ื ื™ืก ืื™ื–ื” ืžื”ื“ื•ืจื” ื—ื“ืฉื” ืœืžืืžืจ ืจืง ื‘ืฉื‘ื™ืœ ืœืชืืจ ืืช ื”ื›ื ื™ืกื”.

ื”ื—ืœืคืช ืกื•ื“ื•ืช ืžืขืจื›ื™ ื”ืกื‘ื™ื‘ื”

ื‘ืื ืœื•ื’ื™ื” ืœื“ื•ื’ืžื ืœืขื™ืœ, ืืชื” ื™ื›ื•ืœ ืœื”ื—ืœื™ืฃ ืžื•ืฆืคื ื™ื ื‘ืืžืฆืขื•ืช ืกื•ื“ื•ืช ื”ื”ื’ื” ืžืฉืžืขื•ื™ื•ืช. ื‘ืžืงื•ื ืœื™ืฆื•ืจ ืงื•ื‘ืฅ ืกื•ื“ื•ืช ืžืฉืœื ื• ืขื‘ื•ืจ ื›ืœ ืžื”ื“ื•ืจื”, ืฉื‘ื• ื ื•ื›ืœ ืœื”ื’ื“ื™ืจ ืขืจื›ื™ื ืžื•ืฆืคื ื™ื ืœืชืจืฉื™ื, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืคืฉื•ื˜ ืœื”ื’ื“ื™ืจ ื‘ื’ืจืกื” default.yaml.gotmpl ืืช ื”ืขืจื›ื™ื ืฉื™ื™ืงื—ื• ืžื”ืžืฉืชื ื™ื ื”ืžื•ื’ื“ืจื™ื ื‘- ืจืžืช ื”ืกื‘ื™ื‘ื”. ื•ืืช ื”ืขืจื›ื™ื ืฉืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœื”ืกืชื™ืจ ืžืืฃ ืื—ื“ ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืžื—ื“ืฉ ื‘ืงืœื•ืช ื‘ืขืจื›ื™ ื”ืฉื—ืจื•ืจ ื‘ืกื‘ื™ื‘ื” ืกืคืฆื™ืคื™ืช.

    .
    โ”œโ”€โ”€ envs
    โ”‚   โ”œโ”€โ”€ default
    โ”‚   โ”‚   โ””โ”€โ”€ values
    โ”‚   โ”‚       โ”œโ”€โ”€ backend.yaml
    โ”‚   โ”‚       โ””โ”€โ”€ postgres.yaml
    โ”‚   โ”œโ”€โ”€ devel
    โ”‚   โ”‚   โ”œโ”€โ”€ values
    โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ backend.yaml
    โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ postgres.yaml
+   โ”‚   โ”‚   โ””โ”€โ”€ secrets.yaml
    โ”‚   โ””โ”€โ”€ production
    โ”‚       โ”œโ”€โ”€ values
    โ”‚       โ”‚   โ”œโ”€โ”€ backend.yaml
    โ”‚       โ”‚   โ””โ”€โ”€ postgres.yaml
+   โ”‚       โ””โ”€โ”€ secrets.yaml
    โ”œโ”€โ”€ releases
    โ”‚   โ”œโ”€โ”€ backend.yaml
    โ”‚   โ””โ”€โ”€ postgres.yaml
    โ””โ”€โ”€ helmfile.yaml

helmfile.yaml

  environments:
    devel:
      values:
      - charts:
          versions:
            backend: 1.1.0
      - apps:
        - postgres
        - backend
      - global:
          ingressDomain: k8s.devel.domain
+     secrets:
+       - envs/devel/secrets.yaml

    production:
      values:
      - charts:
          versions:
            backend: 1.0.5
      - apps:
        - backend
      - global:
          ingressDomain: production.domain
+     secrets:
+       - envs/production/secrets.yaml
  ---
  bases:
  {{- range .Values.apps }}
    - releases/{{ . }}.yaml
  {{- end }}

envs/devel/secrets.yaml

secrets:
    elastic:
        password: ENC[AES256_GCM,data:hjCB,iv:Z1P6/6xBJgJoKLJ0UUVfqZ80o4L84jvZfM+uH9gBelc=,tag:dGqQlCZnLdRAGoJSj63rBQ==,type:int]
...

envs/production/secrets.yaml

secrets:
    elastic:
        password: ENC[AES256_GCM,data:ZB/VpTFk8f0=,iv:EA//oT1Cb5wNFigTDOz3nA80qD9UwTjK5cpUwLnEXjs=,tag:hMdIUaqLRA8zuFBd82bz6A==,type:str]
...

envs/default/values/backend.yaml.gotmpl

elasticsearch:
  host: elasticsearch
  port: 9200
  password: {{ .Values | getOrNil "secrets.elastic.password" | default "password" }}

envs/devel/values/backend.yaml

elasticsearch:
  host: elastic-0.devel.domain

envs/production/values/backend.yaml

elasticsearch:
  host: elastic-0.production.domain

ื”ืคืชืง

ืื’ื‘, getOrNil - ืคื•ื ืงืฆื™ื” ืžื™ื•ื—ื“ืช ืขื‘ื•ืจ ืชื‘ื ื™ื•ืช go ื‘-helmfile, ืืฉืจ, ื’ื ืื .Values.secrets ืœื ื™ื”ื™ื” ืงื™ื™ื, ืœื ื™ื–ืจื•ืง ืฉื’ื™ืื”, ืื‘ืœ ื™ืืคืฉืจ ืืช ื”ืชื•ืฆืื” ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” default ืชื—ืœื™ืฃ ืœืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ

ืžืกืงื ื”

ื”ื“ื‘ืจื™ื ื”ืžืชื•ืืจื™ื ื ืจืื™ื ื“ื™ ื‘ืจื•ืจื™ื, ืื‘ืœ ืžื™ื“ืข ืขืœ ืชื™ืื•ืจ ื ื•ื— ืฉืœ ืคืจื™ืกื” ืœืžืกืคืจ ืกื‘ื™ื‘ื•ืช ื‘ืืžืฆืขื•ืช helmfile ื”ื•ื ื“ืœ ืžืื•ื“, ื•ืื ื™ ืื•ื”ื‘ ืืช IaC (ืชืฉืชื™ืช ื›ืงื•ื“) ื•ืจื•ืฆื” ืœืงื‘ืœ ืชื™ืื•ืจ ื‘ืจื•ืจ ืฉืœ ืžืฆื‘ ื”ืคืจื™ืกื”.

ืœืกื™ื›ื•ื, ืื ื™ ืจื•ืฆื” ืœื”ื•ืกื™ืฃ ืฉืืช ื”ืžืฉืชื ื™ื ืฉืœ ืกื‘ื™ื‘ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืืคืฉืจ, ื‘ืชื•ืจื, ืœื”ื™ื•ืช ื ื™ืชื ื™ื ืœืคืจืžื˜ืจื™ื ืขื ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืœ ืจืฅ ืžืกื•ื™ื ืฉืžืžื ื• ืชื•ืฉืง ื”ืคืจื™ืกื”, ื•ื›ืš ืœืงื‘ืœ ืกื‘ื™ื‘ื•ืช ื“ื™ื ืžื™ื•ืช

helmfile.yaml

environments:
  default:
    values:
    - global:
        clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
        ingressDomain: {{ env "INGRESS_DOMAIN" }}

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”