Π ΡΠ°ΠΌΠΎΠΌ helmfile ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π²
ΠΡ ΠΆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π»ΠΈΠ·Ρ Π² helmfile
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠ°ΡΠΊΠ° helm-ΡΠ°ΡΡΠΎΠ² (Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΡΡΡ Π±ΡΠ΄Π΅Ρ postgres ΠΈ Π½Π΅ΠΊΠΎΠ΅ backend ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ kubernetes ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ², Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ namespace’ΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈ ΡΠΎΠ³ΠΎ, ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ). ΠΠ΅ΡΡΠΌ helmfile, ΡΠΈΡΠ°Π΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π°ΡΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅Π»ΠΈΠ·Ρ:
.
βββ 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 ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ: devel, production β Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ helm ΡΠ°ΡΡΠΎΠ² ΡΠ΅Π»ΠΈΠ·ΠΎΠ². ΠΡ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ Π² Π½ΠΈΡ ΡΠ°ΠΊ:
helmfile -n <namespace> -e <env> apply
Π Π°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ helm ΡΠ°ΡΡΠΎΠ² Π² ΡΠ°Π·Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π²ΡΠΊΠ°ΡΡΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π±ΡΠΊΠ΅Π½Π΄Π° Π² ΡΠ°Π·Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ? ΠΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΡ ΡΠ΅Π»ΠΈΠ·Π°? ΠΠ° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π· {{ .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? ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π½Π°Ρ Π΅ΡΡΡ Π»Π΅ΠΉΠ±Π»Ρ (labels)
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 ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ---
, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ releases (ΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ, ΡΠΈΠΏΠ° helmDefaults) Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΠ· environments
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅Π»ΠΈΠ· postgres Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄ΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π»Ρ production. ΠΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ!
ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΅Π»ΠΈΠ·ΠΎΠ²
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π·Π΄ΠΎΡΠΎΠ²ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ helm ΡΠ°ΡΡΠΎΠ², Π½ΠΎ ΡΡΠΎ Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ, ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, Π·Π°Π΄Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ
affinity
, Π½ΠΎ Π½Π΅ Ρ
ΠΎΡΠΈΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΠ°ΠΌΠΈΡ
ΡΠ°ΡΡΠ°Ρ
, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ
ΡΠ°Π½ΡΡΡΡ Π² ΡΠ΅ΠΏΠ°Ρ
.
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° Π·Π°Π΄Π°ΡΡ 2 ΡΠ°ΠΉΠ»Π° Ρ values: ΠΏΠ΅ΡΠ²ΡΠΉ Ρ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ°ΡΡΠ°, Π° Π²ΡΠΎΡΠΎΠΉ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠ΅.
.
βββ 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"
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ helm ΡΠ°ΡΡΠΎΠ² Π²ΡΠ΅Ρ ΡΠ΅Π»ΠΈΠ·ΠΎΠ² Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ΅Π»ΠΈΠ·Π°Ρ
ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ingress β ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²ΡΡΡΠ½ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ hosts:
, Π½ΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΠΌΠ΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅, ΡΠ°ΠΊ ΠΏΠΎΡΠ΅ΠΌΡ ΠΆΠ΅ Π΅Π³ΠΎ Π½Π΅ Π²ΡΠ½Π΅ΡΡΠΈ Π² Π½Π΅ΠΊΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡ Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΡΡΡ? ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Ρ values, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°ΡΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ .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 }}
ΠΠ°ΠΌΠ΅ΡΠΊΠ°
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ingress Π² ΡΠ°ΡΡΠ΅ postgres β ΡΡΠΎ Π½Π΅ΡΡΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠΎΠΌΠ½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΡΠ°ΡΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ ΠΏΡΠΎΡΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π² Π²Π°ΠΊΡΡΠΌΠ΅ ΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡΡ Π² ΡΡΠ°ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π½ΠΎΠ²ΡΠΉ ΡΠ΅Π»ΠΈΠ· ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π΄ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ingress
ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΠΊΡΠ΅ΡΠΎΠ² (secrets) ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡ ΠΈ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
.
βββ 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(Infrastructure-as-Code) ΠΈ Ρ ΠΎΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΡΠ° Π΄Π΅ΠΏΠ»ΠΎΡ.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ default ΠΌΠΎΠΆΠ½ΠΎ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΠ‘ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ ΡΠ°Π½Π½Π΅ΡΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π΄Π΅ΠΏΠ»ΠΎΠΉ, ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com