เจนเฉˆเจฒเจฎเจซเจพเจˆเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฎเจฒเจŸเฉ€เจชเจฒ k8s เจตเจพเจคเจพเจตเจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจคเฉˆเจจเจพเจคเฉ€ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจง เจ•เจฐเจจเจพ

เจนเฉˆเจฒเจฎเจซเจพเจˆเจฒ - เจฒเจˆ เจฐเฉˆเจชเจฐ เจšเจพเจฒ, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฅเจพเจ‚ 'เจคเฉ‡ เจ•เจˆ เจนเฉˆเจฒเจฎ เจฐเฉ€เจฒเฉ€เจœเจผเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจจ, เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจšเจพเจฐเจŸ เจจเฉ‚เฉฐ เจ•เจˆ เจตเจพเจคเจพเจตเจฐเจฃเจพเจ‚ เจฒเจˆ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจˆเจœเจผ เจ•เจฐเจจ, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจคเฉˆเจจเจพเจคเฉ€ เจฆเจพ เจ•เฉเจฐเจฎ เจตเฉ€ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจคเฉเจธเฉ€เจ‚ เจนเฉˆเจฒเจฎเจซเจพเจˆเจฒ เจฌเจพเจฐเฉ‡ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฌเจพเจฐเฉ‡ เจชเฉœเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹ README ะธ เจตเจงเฉ€เจ† เจ…เจญเจฟเจ†เจธ เจ—เจพเจˆเจก.

เจ…เจธเฉ€เจ‚ เจนเฉˆเจฒเจฎเจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฐเจฟเจฒเฉ€เจœเจผเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจจ เจฆเฉ‡ เจ—เฉˆเจฐ-เจธเจชเฉฑเจธเจผเจŸ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเจพเจฒ เจœเจพเจฃเฉ‚ เจนเฉ‹เจตเจพเจ‚เจ—เฉ‡

เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจนเฉˆเจฒเจฎ เจšเจพเจฐเจŸ เจฆเจพ เจ‡เฉฑเจ• เจชเฉˆเจ• เจนเฉˆ (เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจˆ, เจ†เจ“ เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจ…เจคเฉ‡ เจ•เฉเจ เจฌเฉˆเจ•เจเจ‚เจก เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ•เจนเฉ€เจ) เจ…เจคเฉ‡ เจ•เจˆ เจตเจพเจคเจพเจตเจฐเจฃ (เจ•เจˆ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ, เจ•เจˆ เจจเฉ‡เจฎเจธเจชเฉ‡เจธ, เจœเจพเจ‚ เจฆเฉ‹เจตเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เจˆ)เฅค เจ…เจธเฉ€เจ‚ เจนเฉˆเจฒเจฎเจซเจพเจˆเจฒ เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจพเจ‚, เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ†เจชเจฃเฉ‡ เจตเจพเจคเจพเจตเจฐเจจ เจ…เจคเฉ‡ เจฐเฉ€เจฒเฉ€เจœเจผเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

    .
    โ”œโ”€โ”€ 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

เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš เจนเฉˆเจฒเจฎ เจšเจพเจฐเจŸ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉฐเจธเจ•เจฐเจฃ

เจ•เฉ€ เจœเฉ‡ เจธเจพเจจเฉ‚เฉฐ เจฌเฉˆเจ•เจเจ‚เจก เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจพเจคเจพเจตเจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจฐเฉ‹เจฒ เจ†เจŠเจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ? เจฐเฉ€เจฒเฉ€เจœเจผ เจธเฉฐเจธเจ•เจฐเจฃ เจจเฉ‚เฉฐ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจˆเจœเจผ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเฉ€เจ? เจฆเฉเจ†เจฐเจพ เจ‰เจชเจฒเจฌเจง เจตเจพเจคเจพเจตเจฐเจฃเจ• เจฎเฉเฉฑเจฒ {{ .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 เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจจเฉ‚เฉฐ เจฐเฉ‹เจฒ เจ†เจŠเจŸ เจ•เจฐเฉ‹, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ…เจธเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจกเจพเจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ k8s เจตเจฟเฉฑเจš เจงเฉฑเจ•เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ…เจคเฉ‡ เจตเจฟเจ•เจฐเฉ€ เจฒเจˆ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจธเจผเจพเจจเจฆเจพเจฐ เจตเฉฑเจ–เจฐเจพ เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจนเฉˆ? เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจฒเฉ‡เจฌเจฒ เจนเจจ

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 เจตเจฟเจญเจพเจœเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ ---, เจคเจพเจ‚ เจœเฉ‹ เจคเฉเจธเฉ€เจ‚ เจตเจพเจคเจพเจตเจฐเจจ เจคเฉ‹เจ‚ เจฎเฉเฉฑเจฒเจพเจ‚ เจจเจพเจฒ เจฐเฉ€เจฒเฉ€เจœเจผเจพเจ‚ (เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจญเจพเจ—เจพเจ‚, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจนเฉˆเจฒเจฎเจกเจฟเจซเจพเจฒเจŸเจธ) เจจเฉ‚เฉฐ เจŸเฉˆเจชเจฒเฉ‡เจŸ เจ•เจฐ เจธเจ•เฉ‹

เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจฐเฉ€เจฒเฉ€เจœเจผ เจจเฉ‚เฉฐ เจ‰เจคเจชเจพเจฆเจจ เจฆเฉ‡ เจตเจฐเจฃเจจ เจตเจฟเฉฑเจš เจตเฉ€ เจธเจผเจพเจฎเจฒ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค เจฌเจนเฉเจค เจ†เจฐเจพเจฎ เจจเจพเจฒ!

เจฐเฉ€เจฒเฉ€เจœเจผเจพเจ‚ เจฒเจˆ เจ“เจตเจฐเจฐเจพเจˆเจกเฉ‡เจฌเจฒ เจ—เจฒเฉ‹เจฌเจฒ เจฎเฉเฉฑเจฒ

เจฌเฉ‡เจธเจผเฉฑเจ•, เจ‡เจน เจฌเจนเฉเจค เจตเจงเฉ€เจ† เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจนเจฐเฉ‡เจ• เจตเจพเจคเจพเจตเจฐเจฃ เจฒเจˆ เจนเฉˆเจฒเจฎ เจšเจพเจฐเจŸ เจฒเจˆ เจฎเฉเฉฑเจฒ เจธเฉˆเฉฑเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจ•เฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพ เจœเฉ‡เจ•เจฐ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ•เจˆ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฐเจฃเจฟเจค เจนเจจ, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจธเจพเจฐเจฟเจ†เจ‚ เจฒเจˆ เจ‡เฉฑเจ•เฉ‹ เจœเจฟเจนเจพ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจเจพ 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, เจคเจพเจ‚ เจ•เจฟ เจนเฉˆเจฒเจฎเจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเจคเจพ เจนเฉ‹เจตเฉ‡ เจ•เจฟ เจ‡เจธเจจเฉ‚เฉฐ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจ‡เฉฐเจœเจฃ เจฆเฉเจ†เจฐเจพ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

    .
    โ”œโ”€โ”€ 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 - เจนเฉˆเจฒเจฎเจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจ—เฉ‹ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸเจธ เจฒเจˆ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจซเฉฐเจ•เจธเจผเจจ, เจœเฉ‹ เจ•เจฟ, เจญเจพเจตเฉ‡เจ‚ .Values.secrets เจฎเฉŒเจœเฉ‚เจฆ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจ•เฉ‹เจˆ เจ—เจฒเจคเฉ€ เจจเจนเฉ€เจ‚ เจธเฉเฉฑเจŸเฉ‡เจ—เจพ, เจชเจฐ เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจจเจคเฉ€เจœเฉ‡ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจตเฉ‡เจ—เจพ default เจกเจฟเจซเจพเจฒเจŸ เจฎเฉเฉฑเจฒ เจฌเจฆเจฒเฉ‹

เจธเจฟเฉฑเจŸเจพ

เจตเจฐเจฃเจจ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจ•เจพเจซเจผเฉ€ เจธเจชเฉฑเจธเจผเจŸ เจœเจพเจชเจฆเฉ€เจ†เจ‚ เจนเจจ, เจชเจฐ เจนเฉˆเจฒเจฎเจซเจพเจˆเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ•เจˆ เจตเจพเจคเจพเจตเจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจคเฉˆเจจเจพเจคเฉ€ เจฆเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจตเจฐเจฃเจจ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจนเฉˆ, เจ…เจคเฉ‡ เจฎเฉˆเจ‚ IaC (เจ‡เจจเจซเจฐเจพเจธเจŸเจฐเฉฑเจ•เจšเจฐ-เจเจœเจผ-เจ•เฉ‹เจก) เจจเฉ‚เฉฐ เจชเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ เจคเฉˆเจจเจพเจคเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเจพ เจธเจชเจธเจผเจŸ เจตเจฐเจฃเจจ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚เฅค

เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจ‡เจน เจœเฉ‹เฉœเจจเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ เจกเจฟเจซเฉŒเจฒเจŸ เจตเจพเจคเจพเจตเจฐเจฃ เจฒเจˆ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ, เจฌเจฆเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจ–เจพเจธ เจฐเจจเจฐ เจฆเฉ‡ OS เจฆเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจˆเจœเจผ เจ•เฉ€เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจ เจœเจฟเจธ เจคเฉ‹เจ‚ เจคเฉˆเจจเจพเจคเฉ€ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€, เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจตเจพเจคเจพเจตเจฐเจฃ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

helmfile.yaml

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

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹