рдЖрдкрдг рд╣реЗрд▓реНрдордлрд╛рдЗрд▓рдмрджреНрджрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ рд╡рд╛рдЪреВ рд╢рдХрддрд╛
рдЖрдореНрд╣реА рд╣реЗрд▓реНрдордлрд╛рдЗрд▓рдордзреНрдпреЗ рд░рд┐рд▓реАрдЭрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдорд╛рд░реНрдЧрд╛рдВрд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдК
рд╕рдордЬрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯреНрд╕рдЪрд╛ рдПрдХ рдкреЕрдХ рдЖрд╣реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдЖрдгрд┐ рдХрд╛рд╣реА рдмреЕрдХрдПрдВрдб рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдореНрд╣рдгреВ рдпрд╛) рдЖрдгрд┐ рдЕрдиреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдгреЗ (рдЕрдиреЗрдХ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░реНрд╕, рдЕрдиреЗрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд┐рдВрд╡рд╛ рджреЛрдиреНрд╣реАрдкреИрдХреА рдЕрдиреЗрдХ). рдЖрдореНрд╣реА рд╣реЗрд▓реНрдордлрд╛рдЗрд▓ рдШреЗрддреЛ, рдХрд╛рдЧрджрдкрддреНрд░реЗ рд╡рд╛рдЪрддреЛ рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдЪреЗ рдЖрдгрд┐ рдкреНрд░рдХрд╛рд╢рдирд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░рд╡рд╛рдд рдХрд░рддреЛ:
.
тФЬтФАтФА 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 }}
рдЪрд┐рдареНрдареА
рд╕рд╛рд╣рдЬрд┐рдХрдЪ, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдЪрд╛рд░реНрдЯрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреЗ рд╣реА рдЧреЛрд╖реНрдЯ рдЕрддреНрдпрдВрдд рд╕рдВрд╢рдпрд╛рд╕реНрдкрдж рдЖрд╣реЗ, рдореНрд╣рдгреВрди рд╣рд╛ рд▓реЗрдЦ рдХреЗрд╡рд│ рд╡реНрд╣реЕрдХреНрдпреВрдордордзреНрдпреЗ рдЧреЛрд▓рд╛рдХрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рджрд┐рд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдХреЗрд╡рд│ рдкреНрд░рд╡реЗрд╢рд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╣реЗрддреВрдиреЗ рд▓реЗрдЦрд╛рдд рдХрд╛рд╣реА рдирд╡реАрди рдкреНрд░рдХрд╛рд╢рди рд╕рд╛рджрд░ рдХрд░реВ рдирдпреЗ.
рдкрд░реНрдпрд╛рд╡рд░рдг рдореВрд▓реНрдпрд╛рдВрдордзреВрди рд░рд╣рд╕реНрдпреЗ рдмрджрд▓рдгреЗ
рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рд╢реА рд╕рд╛рдзрд░реНрдореНрдп рд╕рд╛рдзреВрди, рддреБрдореНрд╣реА рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб рд╡рд╛рдкрд░реВрди рдмрджрд▓реВ рд╢рдХрддрд╛
.
тФЬтФАтФА 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