Hiki iā ʻoe ke heluhelu e pili ana i ka helmfile ponoʻī a me nā hiʻohiʻona o kona hoʻohana ʻana ma
E kamaʻāina mākou i nā ala ʻike ʻole e wehewehe i nā hoʻokuʻu ʻana ma ka helmfile
E ʻōlelo kākou he pūʻulu o nā pakuhi helm (no ka laʻana, e ʻōlelo kākou i nā postgres a me kekahi noi hope) a me kekahi mau kaiapuni (he mau puʻupuʻu kubernetes, nā inoa inoa, a i ʻole kekahi o nā mea ʻelua). Lawe mākou i ka helmfile, heluhelu i ka palapala a hoʻomaka e wehewehe i ko mākou mau kaiapuni a me nā hoʻokuʻu:
.
├── 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
Ua hoʻopau mākou me 2 kaiapuni: hoʻomohala, ? iecaianoaaiiuo — Loaʻa i kēlā me kēia me kāna mau waiwai ponoʻī no nā palapala hoʻokuʻu helm. E hoʻolaha mākou iā lākou e like me kēia:
helmfile -n <namespace> -e <env> apply
Nā mana like ʻole o nā pakuhi helm i nā kaiapuni like ʻole
He aha inā pono mākou e ʻōwili i nā ʻano like ʻole o ke kua i nā kaiapuni like ʻole? Pehea e hoʻohālikelike ai i ka mana hoʻokuʻu? Loaʻa nā waiwai kaiapuni ma o {{ .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 }}
...
Hoʻonohonoho ʻokoʻa o nā noi i nā kaiapuni like ʻole
Nui, akā pehea inā ʻaʻole pono mākou production
ʻōwili i nā postgres, no ka mea, ʻike mākou ʻaʻole pono mākou e hoʻolei i ka waihona i k8s a no ke kūʻai aku, loaʻa iā mākou kahi puʻupuʻu postgres kaʻawale? No ka hoʻoponopono i kēia pilikia, loaʻa iā mākou nā lepili
helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply
He mea maikaʻi kēia, akā makemake wau e wehewehe i nā noi e kau ʻia i loko o ke kaiapuni ʻaʻole me ka hoʻohana ʻana i nā hoʻopaʻapaʻa hoʻomaka, akā i ka wehewehe ʻana i nā kaiapuni ponoʻī. He aha ka hana? Hiki iā ʻoe ke kau i nā wehewehe hoʻokuʻu i loko o kahi waihona ʻokoʻa, hana i kahi papa inoa o nā hoʻokuʻu e pono ai i ka wehewehe ʻana i ke kaiapuni a "ʻohi" wale i nā hoʻokuʻu pono, me ka nānā ʻole i ke koena.
.
├── 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
ʻO ka leka
Ke hoʻohana nei bases:
pono e hoʻohana i ka yaml separator ---
, i hiki iā ʻoe ke hoʻopuka i nā hoʻolaha (a me nā ʻāpana ʻē aʻe, e like me helmDefaults) me nā waiwai mai nā kaiapuni
I kēia hihia, ʻaʻole e hoʻokomo ʻia ka hoʻokuʻu postgres i ka wehewehe no ka hana ʻana. ʻoluʻolu loa!
ʻO nā waiwai honua hiki ke hoʻokuʻu ʻia
ʻOiaʻiʻo, maikaʻi ia e hiki iā ʻoe ke hoʻonohonoho i nā waiwai no nā pakuhi helm no kēlā me kēia kaiapuni, akā pehea inā he nui nā kaiapuni i wehewehe ʻia, a makemake mākou, no ka laʻana, e hoʻonohonoho like no nā mea āpau. affinity
, akā ʻaʻole makemake mākou e hoʻonohonoho iā ia ma ke ʻano maʻamau i nā pakuhi iā lākou iho, i mālama ʻia i nā turnips.
I kēia hihia, no kēlā me kēia hoʻokuʻu hiki iā mākou ke kuhikuhi i nā faila 2 me nā waiwai: ʻo ka mua me nā koina paʻamau, e hoʻoholo ai i nā waiwai o ka pakuhi ponoʻī, a ʻo ka lua me nā waiwai no ke kaiapuni, a laila e hoʻopau i ka nā mea paʻamau.
.
├── 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"
ʻO ka wehewehe ʻana i nā waiwai honua no nā pakuhi helm o nā hoʻokuʻu āpau ma ka pae kaiapuni
E ʻōlelo mākou e hana mākou i kekahi mau komo i loko o kekahi mau hoʻokuʻu - hiki iā mākou ke wehewehe lima no kēlā me kēia pakuhi hosts:
, akā, i ko mākou hihia, ua like ka domain, no laila, no ke aha e hoʻokomo ʻole ai i kekahi mau mea hoʻololi honua a hoʻololi wale i kona waiwai i nā pakuhi? No ka hana ʻana i kēia, ʻo kēlā mau faila me nā waiwai a mākou e makemake ai e hoʻohālikelike i ka hoʻonui .gotmpl
, i ʻike ʻo helmfile pono e holo ma o ka mīkini 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 }}
ʻO ka leka
ʻIke loa, ʻo ka komo ʻana i ka pakuhi postgres he mea kānalua loa, no laila ua hāʻawi ʻia kēia ʻatikala ma ke ʻano he hiʻohiʻona spherical i loko o kahi hakahaka a i ʻole e hoʻokomo i kahi hoʻokuʻu hou i loko o ka ʻatikala no ka wehewehe ʻana i ka komo ʻana.
Hoʻololi i nā mea huna mai nā waiwai kaiapuni
Ma ka hoʻohālikelike me ka laʻana i luna, hiki iā ʻoe ke hoʻololi i nā mea i hoʻopili ʻia me ka hoʻohana ʻana
.
├── 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
ʻO ka leka
Ma ke ala, getOrNil
- he hana kūikawā no ka hele ma ka helmfile, ʻoiai inā .Values.secrets
ʻaʻole e noho, ʻaʻole e hoʻolei i kahi hewa, akā e ʻae i ka hopena me ka hoʻohana ʻana i ka hana default
e pani i ka waiwai paʻamau
hopena
ʻIke ʻia nā mea i wehewehe ʻia, akā ʻo ka ʻike e pili ana i ka wehewehe kūpono o ka hoʻopili ʻana i kekahi mau kaiapuni e hoʻohana ana i ka helmfile he mea liʻiliʻi loa, a makemake wau iā IaC (Infrastructure-as-Code) a makemake wau e loaʻa kahi wehewehe wehewehe o ka mokuʻāina.
I ka hopena, makemake wau e hoʻohui i nā mea hoʻololi no ke kaiapuni paʻamau, hiki ke hoʻohālikelike ʻia me nā ʻano hoʻololi o ke kaiapuni o ka OS o kahi mea holo mai kahi e hoʻomaka ai ka hoʻolaha ʻana, a no laila e loaʻa ai nā kaiapuni ikaika.
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
Source: www.habr.com