Faodaidh tu leughadh mu dheidhinn helmfile fhèin agus eisimpleirean air a chleachdadh ann an
Gheibh sinn eòlas air dòighean nach eil follaiseach airson cunntas a thoirt air fiosan ann an helmfile
Canaidh sinn gu bheil pasgan de chlàran-stiùiridh againn (mar eisimpleir, canaidh sinn postgres agus cuid de chleachdadh backend) agus grunn àrainneachdan (grunn chlàran kubernetes, grunn àiteachan ainm, no grunn den dà chuid). Gabhaidh sinn am faidhle helm, leugh sinn na sgrìobhainnean agus tòisichidh sinn a’ toirt cunntas air na h-àrainneachdan agus na fiosan againn:
.
├── 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
Chrìochnaich sinn le 2 àrainneachd: leasaich, riochdachaidh - tha a luachan fhèin aig gach fear airson na clàran fuasglaidh stiùir. Bidh sinn gan cleachdadh mar seo:
helmfile -n <namespace> -e <env> apply
Diofar dhreachan de chlàran stiùir ann an diofar àrainneachdan
Dè ma dh’ fheumas sinn dreachan eadar-dhealaichte den backend a sgaoileadh gu diofar àrainneachdan? Ciamar a parameterize an dreach release? Na luachan àrainneachd a tha rim faighinn troimhe {{ .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 }}
...
Seata de thagraidhean eadar-dhealaichte ann an diofar àrainneachdan
Sgoinneil, ach dè mura h-eil feum againn production
cuir postgres a-mach, oir tha fios againn nach fheum sinn an stòr-dàta a phutadh gu k8s agus airson a reic tha cruinneachadh postgres air leth math againn? Gus an duilgheadas seo fhuasgladh tha bileagan againn
helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply
Tha seo fìor mhath, ach gu pearsanta is fheàrr leam cunntas a thoirt air na tagraidhean a bu chòir a chleachdadh san àrainneachd gun a bhith a’ cleachdadh argamaidean tòiseachaidh, ach anns an tuairisgeul air na h-àrainneachdan fhèin. Dè a nì thu? Faodaidh tu na tuairisgeulan fuasglaidh a chuir ann am pasgan air leth, liosta de na fiosan riatanach a chruthachadh ann an tuairisgeul na h-àrainneachd agus “togail” dìreach na fiosan riatanach, a ’seachnadh a’ chòrr
.
├── 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
An nota
Nuair a bhios tu a 'cleachdadh bases:
feumar yaml separator a chleachdadh ---
, gus an urrainn dhut fiosan teamplaid (agus pàirtean eile, leithid helmDefaults) le luachan bho àrainneachdan
Anns a 'chùis seo, cha bhi an sgaoileadh postgres eadhon air a ghabhail a-steach san tuairisgeul airson cinneasachadh. Gu math comhfhurtail!
Luachan cruinne thar-ghnèitheach airson sgaoilidhean
Gu dearbh, tha e math gun urrainn dhut luachan a shuidheachadh airson clàran stiùir airson gach àrainneachd, ach dè ma tha grunn àrainneachdan air am mìneachadh, agus tha sinn airson, mar eisimpleir, an aon rud a shuidheachadh dha na h-uile. affinity
, ach chan eil sinn airson a rèiteachadh gu bunaiteach anns na clàran fhèin, a tha air an stòradh ann an snèapan.
Anns a 'chùis seo, airson gach sgaoilidh b' urrainn dhuinn faidhlichean 2 a shònrachadh le luachan: a 'chiad fhear le luachan bunaiteach, a cho-dhùineas luachan a' chlàir fhèin, agus an dàrna fear le luachan airson na h-àrainneachd, a bhios an uair sin a 'dol thairis air an feadhainn bunaiteach.
.
├── 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"
A’ mìneachadh luachan cruinneil airson clàran stiùiridh de gach sgaoileadh aig ìre na h-àrainneachd
Canaidh sinn gun cruthaich sinn grunn ingress ann an grunn fiosan - b’ urrainn dhuinn mìneachadh le làimh airson gach cairt hosts:
, ach anns a’ chùis againn tha an àrainn mar an ceudna, mar sin carson nach cuir thu ann an caochladair cruinneil e agus dìreach cuir a luach anns na clàran? Gus seo a dhèanamh, feumaidh an leudachadh a bhith aig na faidhlichean sin le luachan a tha sinn airson paramadair .gotmpl
, gus am bi fios aig helmfile gum feum e a bhith air a ruith tron einnsean teamplaid.
.
├── 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 }}
An nota
Gu dearbh, tha dol a-steach sa chairt postgres rudeigin uamhasach amharasach, agus mar sin tha an artaigil seo air a thoirt seachad dìreach mar eisimpleir spherical ann am falamh agus gus nach toir thu beagan brath ùr a-steach don artaigil dìreach airson cunntas a thoirt air ingress.
Cur an àite dìomhaireachdan bho luachan àrainneachd
Le co-chosmhail ris an eisimpleir gu h-àrd, faodaidh tu feadhainn crioptaichte a chur an àite a’ cleachdadh
.
├── 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
An nota
Air an t-slighe, getOrNil
- gnìomh sònraichte airson teamplaidean falbh ann an helmfile, a tha, eadhon ged a bhiodh .Values.secrets
cha bhith e ann, cha tilg mearachd, ach leigidh e leis an toradh a bhith a’ cleachdadh a’ ghnìomh default
cuir an àite luach bunaiteach
co-dhùnadh
Tha na rudan a chaidh a mhìneachadh a’ coimhead gu math follaiseach, ach tha fiosrachadh mu thuairisgeul goireasach air cleachdadh gu grunn àrainneachdan a’ cleachdadh helmfile gu math gann, agus tha gaol agam air IaC (Bun-structar-mar-Còd) agus tha mi airson tuairisgeul soilleir a bhith agam air an staid cleachdadh.
Gu crìch, bu mhath leam a chuir ris gum faod na caochladairean airson na h-àrainneachd àbhaisteach a bhith air am paramadair, an uair sin, le caochladairean àrainneachd an OS de ruitheadair sònraichte às an tèid an cleachdadh a chuir air bhog, agus mar sin àrainneachdan fiùghantach fhaighinn.
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
Source: www.habr.com