U ka bala ka helmfile ka boeona le mehlala ea tšebeliso ea eona ho
Re tla tloaelana le mekhoa e sa hlakang ea ho hlalosa litokollo ho helmfile
Ha re re re na le pakete ea lichate tsa helm (mohlala, ha re re li-postgres le ts'ebeliso e 'ngoe ea backend) le libaka tse' maloa (lihlopha tse 'maloa tsa kubernetes, libaka tse' maloa tsa mabitso, kapa tse 'maloa tsa tsona ka bobeli). Re nka helmfile, re bala litokomane ebe re qala ho hlalosa tikoloho le litokollo tsa rona:
.
├── 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
Re qetetse ka libaka tse 2: ntlafala, Tlhahiso - e 'ngoe le e' ngoe e na le boleng ba eona bakeng sa lichate tsa tokollo ea helm. Re tla bua ka bona ka tsela e latelang:
helmfile -n <namespace> -e <env> apply
Mefuta e fapaneng ea lichate tsa helm libakeng tse fapaneng
Ho thoe'ng haeba re hloka ho hlahisa mefuta e fapaneng ea backend libakeng tse fapaneng? Mokhoa oa ho etsa parameterize ea tokollo? Litekanyetso tsa tikoloho tse fumanehang ka {{ .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 }}
...
Lisebelisoa tse fapaneng libakeng tse fapaneng
E kholo, empa ho thoe'ng haeba re sa hloke production
re ntša li-postgres, hobane rea tseba hore ha ho hlokahale hore re sutumelletse database ho li-k8 mme ha re rekisa re na le sehlopha se setle se arohaneng sa postgres? Ho rarolla bothata bona re na le li-labels
helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply
Sena se setle, empa ka bonna ke khetha ho hlalosa hore na ke lits'ebetso life tse lokelang ho sebelisoa tikolohong u sa sebelise likhang tsa ho qala, empa ka tlhaloso ea libaka ka botsona. Se o lokelang ho se etsa? U ka beha litlhaloso tsa tokollo foldareng e arohaneng, u thehe lethathamo la litokollo tse hlokahalang tikolohong, 'me u "nka" litokollo tse hlokahalang feela, u iphapanyetse tse ling kaofela.
.
├── 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
Lengolo
Ho sebelisa bases:
hoa hlokahala ho sebelisa karohano ea yaml ---
, e le hore u ka khona ho hlahisa li-template (le likarolo tse ling, tse kang helmDefaults) ka litekanyetso tse tsoang libakeng
Tabeng ena, tokollo ea postgres e ke ke ea kenyelletsoa le tlhaloso ea tlhahiso. Haholo ka boiketlo!
Litheko tse fetelletseng tsa lefats'e bakeng sa litokollo
Ehlile, ho monate hore o ka beha litekanyetso bakeng sa lichate tsa helm bakeng sa tikoloho e 'ngoe le e' ngoe, empa ho thoe'ng haeba re na le libaka tse 'maloa tse hlalositsoeng,' me re batla, mohlala, ho beha se tšoanang bakeng sa bohle. affinity
, empa ha re batle ho e hlophisa ka ho sa feleng lichabeng ka boeona, tse bolokiloeng ka turnips.
Tabeng ena, bakeng sa tokollo e 'ngoe le e' ngoe re ka hlakisa lifaele tse 2 tse nang le boleng: ea pele e na le boleng ba kamehla, e tla khetholla boleng ba chate ka boeona, 'me ea bobeli e na le litekanyetso tsa tikoloho, e leng eona e tla feta tsa kamehla.
.
├── 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"
Ho hlalosa boleng ba lefats'e bakeng sa lichate tsa helm tsa likhatiso tsohle maemong a tikoloho
Ha re re re theha li-ingress tse 'maloa likhatisong tse' maloa - re ka hlalosa ka letsoho bakeng sa chate ka 'ngoe hosts:
, empa tabeng ea rōna sebaka sea tšoana, joale ke hobane’ng ha u sa e behe boemong bo bong bo fapaneng ba lefatše ebe u kenya boleng ba eona lichabeng? Ho etsa sena, lifaele tse nang le litekanyetso tseo re batlang ho li etsa parameter li tla tlameha ho ba le katoloso .gotmpl
, e le hore helmfile e tsebe hore e hloka ho tsamaisoa ka enjene ea template.
.
├── 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 }}
Lengolo
Ho hlakile hore ho kenella ka chate ea postgres ke ntho e belaetsang haholo, ka hona, sengoloa sena se fanoe feela e le mohlala o chitja ka har'a vacuum le molemong oa ho se hlahise tokollo e ncha ho sengoloa molemong oa ho hlalosa ingress.
Ho kenya liphiri ho tsoa ho litekanyetso tsa tikoloho
Ka papiso le mohlala o ka holimo, o ka kenya tse patiloeng u sebelisa
.
├── 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
Lengolo
Tseleng, getOrNil
- ts'ebetso e khethehileng bakeng sa ho ea litempele ho helmfile, eo, le haeba .Values.secrets
e ke ke ea e-ba teng, e ke ke ea lahla phoso, empa e tla lumella sephetho ho sebelisa mosebetsi default
boleng ba kamehla bo nkelang sebaka
fihlela qeto e
Lintho tse hlalositsoeng li bonahala li hlakile, empa tlhahisoleseling mabapi le tlhaloso e bonolo ea ho romelloa libakeng tse 'maloa ho sebelisa helmfile e haella haholo,' me ke rata IaC (Infrastructure-as-Code) 'me ke batla ho ba le tlhaloso e hlakileng ea boemo ba thomello.
Qetellong, ke rata ho kenyelletsa hore mefuta e fapaneng bakeng sa tikoloho ea kamehla e ka aroloa ka maemo a fapaneng a tikoloho ea OS ea semathi se itseng moo phallo e tla qalisoa, 'me kahoo e fumane maemo a matla.
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
Source: www.habr.com