เดนเต†เตฝเด‚เดซเดฏเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ k8s เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดจเตเดฏเดพเดธเด‚ เดธเด‚เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดนเต†เตฝเด‚เดซเดฟเตฝ - เดตเต‡เดฃเตเดŸเดฟ เดชเตŠเดคเดฟเดฏเตเด• เดšเตเด•เตเด•เดพเตป, เดจเดฟเดฐเดตเดงเดฟ เดนเต†เตฝเด‚ เดฑเดฟเดฒเต€เดธเตเด•เตพ เด’เดฐเดฟเดŸเดคเตเดคเต เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดตเดฏเตเดŸเต† เดšเดพเตผเดŸเตเดŸเตเด•เตพ เดจเดฟเดฐเดตเดงเดฟ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด…เดตเดฏเตเดŸเต† เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเตเดฑเต† เด•เตเดฐเดฎเด‚ เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.

เดนเต†เตฝเด‚เดซเดฏเดฒเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ เดฎเต€ ะธ เดฎเดฟเด•เดšเตเดš เดชเดฐเดฟเดถเต€เดฒเดจ เด—เตˆเดกเต.

เดนเต†เตฝเด‚เดซเดฏเดฒเดฟเตฝ เดฑเดฟเดฒเต€เดธเตเด•เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเตเดฏเด•เตเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดตเดดเดฟเด•เตพ เดžเด™เตเด™เตพ เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเตเด‚

เดจเดฎเตเด•เตเด•เต เดนเต†เตฝเด‚ เดšเดพเตผเดŸเตเดŸเตเด•เดณเตเดŸเต† เด’เดฐเต เดชเดพเดฏเตเด•เตเด•เต เด‰เดฃเตเดŸเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเต‹เดธเตเดฑเตเดฑเตโ€Œเด—เตเดฐเต†เดธเตเด‚ เดšเดฟเดฒ เดฌเดพเด•เตเด•เต†เตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด‚ เดชเดฑเดฏเดพเด‚) เด•เต‚เดŸเดพเดคเต† เดจเดฟเดฐเดตเดงเดฟ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เดณเตเด‚ (เดจเดฟเดฐเดตเดงเดฟ เด•เตเดฏเต‚เดฌเตผเดจเต†เดฑเตเดฑเตเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเตเด•เตพ, เดจเดฟเดฐเดตเดงเดฟ เดจเต†เดฏเดฟเด‚เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเตเด•เตพ, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฐเดฃเตเดŸเดฟเดฒเตเด‚ เดชเดฒเดคเตเด‚). เดžเด™เตเด™เตพ เดนเต†เตฝเด‚เดซเดฏเตฝ เดŽเดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เดณเตเด‚ เดฑเดฟเดฒเต€เดธเตเด•เดณเตเด‚ เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

    .
    โ”œโ”€โ”€ 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 เดชเต‹เดธเตเดฑเตเดฑเตโ€Œเด—เตเดฐเต†เดธเต เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เตเด•, เด•เดพเดฐเดฃเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต k8-เด•เดณเดฟเดฒเต‡เด•เตเด•เต เดคเดณเตเดณเต‡เดฃเตเดŸ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒเต†เดจเตเดจเตเด‚ เดตเดฟเตฝเดชเตเดชเดจเดฏเตโ€Œเด•เตเด•เต เดžเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเดถเดฏเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดชเต‹เดธเตเดฑเตเดฑเตโ€Œเด—เตเดฐเต†เดธเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด‰เดฃเตเดŸเต†เดจเตเดจเตเด‚ เด…เดฑเดฟเดฏเดพเดฎเต‹? เดˆ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เดฒเต‡เดฌเดฒเตเด•เตพ เด‰เดฃเตเดŸเต

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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•