Azonao atao ny mamaky momba ny helmfile sy ny ohatra amin'ny fampiasana azy ao
Hifankazatra amin'ny fomba tsy mazava isika hamaritana ny famoahana ao amin'ny helmfile
Andeha atao hoe manana sariitatra mitondra fiara izahay (ohatra, andao atao hoe postgres sy fampiharana backend sasany) ary tontolo maro (vondrona kubernetes maromaro, sehatra anarana maromaro, na maromaro amin'izy roa). Maka ny helmfile izahay, mamaky ny antontan-taratasy ary manomboka mamaritra ny tontolo iainantsika sy ny famoahana azy:
.
├── 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
Nifarana tamin'ny tontolo 2 izahay: serasera, famokarana - samy manana ny sandany manokana ho an'ny tabilao famotsorana ny familiana. Hanolotra azy ireo toy izao izahay:
helmfile -n <namespace> -e <env> apply
Dika samy hafa amin'ny sarin'ny familiana amin'ny tontolo samihafa
Ahoana raha mila mamoaka dikan-teny samihafa amin'ny backend amin'ny tontolo samihafa isika? Ahoana no hamaritana ny dikan-ny famoahana? Ny soatoavina ara-tontolo iainana azo avy amin'ny {{ .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 }}
...
Fampiharana samihafa amin'ny tontolo samihafa
Tsara, fa ahoana raha tsy mila izany isika production
esory ny postgres, satria fantatsika fa tsy mila manosika ny angon-drakitra ao amin'ny k8s isika ary amidy dia manana cluster postgres miavaka mahafinaritra isika? Mba hamahana ity olana ity dia manana labels izahay
helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply
Tsara izany, fa izaho manokana dia aleoko mamaritra hoe iza amin'ireo rindranasa hapetraka amin'ny tontolo tsy mampiasa hevitra fanombohana, fa amin'ny famaritana ny tontolo iainana. Ny hatao? Azonao atao ny mametraka ny famaritana ny famoahana ao anaty lahatahiry mitokana, mamorona lisitr'ireo famoahana ilaina amin'ny famaritana ny tontolo iainana ary "haka" ireo famoahana ilaina, tsy miraharaha ny ambiny.
.
├── 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
Ny naoty
Rehefa mampiasa bases:
ilaina ny mampiasa yaml separator ---
, mba hahafahanao mamoaka modely (sy ampahany hafa, toy ny helmDefaults) miaraka amin'ny sanda avy amin'ny tontolo iainana
Amin'ity tranga ity, ny famoahana postgres dia tsy ho tafiditra ao amin'ny famaritana ny famokarana. Tena mahazo aina!
Sanda manerantany azo ovaina ho an'ny famoahana
Mazava ho azy fa mahafinaritra ny ahafahanao mametraka soatoavina ho an'ny sarin'ny familiana ho an'ny tontolo tsirairay, fa ahoana kosa raha manana tontolo maromaro voafaritra isika, ary tianay, ohatra, ny hametraka izany ho an'ny rehetra. affinity
, saingy tsy te-hanamboatra azy amin'ny alàlan'ny default ao amin'ny tabilao mihitsy izahay, izay voatahiry ao anaty turnip.
Amin'ity tranga ity, ho an'ny famoahana tsirairay dia afaka mamaritra rakitra 2 misy soatoavina isika: ny voalohany miaraka amin'ny soatoavina default, izay hamaritra ny soatoavin'ny tabilao, ary ny faharoa miaraka amin'ny soatoavina ho an'ny tontolo iainana, izay hanapaka ny ireo default.
.
├── 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"
Famaritana ny soatoavina manerantany ho an'ny sarin'ny fitondrana ny famoahana rehetra amin'ny tontolo iainana
Andao atao hoe mamorona fidirana maromaro amin'ny famoahana maromaro - azontsika atao ny mamaritra ny tabilao tsirairay hosts:
, fa amin'ny tranga misy antsika dia mitovy ny sehatra, koa maninona raha apetraka amin'ny fari-pahalalana maneran-tany izy io ary asoloo fotsiny ny sandany amin'ny tabilao? Mba hanaovana izany, dia tsy maintsy manana ny fanitarana ireo rakitra misy soatoavina tiantsika hozaraina .gotmpl
, mba hahafantaran'ny helmfile fa mila mandeha amin'ny motera môdely izy io.
.
├── 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 }}
Ny naoty
Mazava ho azy fa tena mampiahiahy ny fidirana ao amin'ny tabilao postgres, ka ity lahatsoratra ity dia omena fotsiny ho ohatra boribory amin'ny banga ary mba tsy hampidirana famoahana vaovao ao amin'ilay lahatsoratra fotsiny mba hamaritana ny fidirana.
Fanoloana tsiambaratelo avy amin'ny soatoavin'ny tontolo iainana
Amin'ny alàlan'ny fanoharana amin'ny ohatra etsy ambony, azonao atao ny manolo ireo voatahiry mampiasa
.
├── 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
Ny naoty
Raha eny, getOrNil
- fiasa manokana ho an'ny template go ao amin'ny helmfile, izay, na dia .Values.secrets
tsy hisy, tsy hanipy fahadisoana, fa hamela ny vokatra mampiasa ny asa default
soloy ny sanda default
famaranana
Ny zavatra voalaza dia toa miharihary, fa ny fampahalalana momba ny famaritana mety amin'ny fametrahana amin'ny tontolo maro mampiasa helmfile dia tena zara raha misy, ary tiako ny IaC (Infrastructure-as-Code) ary te-hanana famaritana mazava momba ny fanjakana fametrahana.
Ho fehin-kevitra, tiako ny manampy fa ny fari-piadidiana ho an'ny tontolo iainana default dia azo faritana amin'ny fari-piainan'ny tontolo iainana amin'ny OS an'ny mpihazakazaka iray izay hanombohan'ny fametrahana, ary noho izany dia mahazo tontolo mavitrika.
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
Source: www.habr.com