Koj tuaj yeem nyeem txog Helmfile nws tus kheej thiab cov piv txwv ntawm nws siv hauv
Peb yuav tau paub txog txoj hauv kev tsis pom tseeb los piav qhia txog kev tshaj tawm hauv helmfile
Cia peb hais tias peb muaj ib pob ntawm cov kab kos duab (piv txwv li, cia peb hais tias postgres thiab qee daim ntawv thov rov qab) thiab ntau qhov chaw (ntau lub kubernetes pawg, ob peb lub npe, lossis ob peb ntawm ob qho tib si). Peb coj lub helmfile, nyeem cov ntaub ntawv thiab pib piav qhia txog peb qhov chaw thiab tso tawm:
.
├── 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
Peb xaus nrog 2 ib puag ncig: nqis, ntau lawm - txhua tus muaj nws tus kheej qhov tseem ceeb rau cov kab kos tso tawm. Peb yuav xa mus rau lawv li no:
helmfile -n <namespace> -e <env> apply
Txawv versions ntawm cov kab kos kab kos nyob rau hauv ntau qhov chaw
Yuav ua li cas yog tias peb yuav tsum dov tawm txawv versions ntawm lub backend rau txawv ib puag ncig? Yuav ua li cas parameterize qhov tso tawm version? Cov txiaj ntsig ib puag ncig muaj los ntawm {{ .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 }}
...
Cov txheej txheem sib txawv ntawm cov ntawv thov sib txawv
Zoo heev, tab sis yuav ua li cas yog tias peb tsis xav tau production
dov tawm postgres, vim peb paub tias peb tsis tas yuav thawb lub database rau hauv k8s thiab kev muag khoom peb muaj ib tug zoo kawg nkaus cais postgres pawg? Txhawm rau daws qhov teeb meem no peb muaj cov ntawv sau
helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply
Qhov no zoo heev, tab sis tus kheej kuv xav piav qhia txog cov ntawv thov twg los siv rau hauv ib puag ncig tsis siv cov lus sib cav, tab sis hauv kev piav qhia ntawm ib puag ncig lawv tus kheej. Yuav ua li cas? Koj tuaj yeem tso cov lus piav qhia tso rau hauv ib lub nplaub tshev cais, tsim cov npe ntawm qhov tsim nyog tso tawm nyob rau hauv ib puag ncig kev piav qhia thiab "siv" tsuas yog qhov tsim nyog tso tawm, tsis quav ntsej qhov seem.
.
├── 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
Daim ntawv
Thaum siv bases:
Nws yog tsim nyog los siv yaml separator ---
, kom koj tuaj yeem tsim cov qauv tso tawm (thiab lwm qhov chaw, xws li helmDefaults) nrog cov txiaj ntsig los ntawm ib puag ncig
Nyob rau hauv cov ntaub ntawv no, lub postgres tso tawm yuav tsis txawm muaj nyob rau hauv cov lus piav qhia rau ntau lawm. Yooj yim heev!
Overridable ntiaj teb no tus nqi rau kev tso tawm
Tau kawg, nws yog qhov zoo uas koj tuaj yeem tsim qhov tseem ceeb rau daim duab kos duab rau txhua qhov chaw, tab sis yuav ua li cas yog tias peb muaj ntau qhov chaw piav qhia, thiab peb xav tau, piv txwv li, teeb tsa tib yam rau txhua tus. affinity
, tab sis peb tsis xav teeb tsa nws los ntawm lub neej ntawd hauv cov kab kos lawv tus kheej, uas tau khaws cia rau hauv turnips.
Nyob rau hauv rooj plaub no, rau txhua qhov kev tso tawm peb tuaj yeem qhia 2 cov ntaub ntawv nrog qhov tseem ceeb: thawj zaug nrog cov nqi pib, uas yuav txiav txim siab qhov tseem ceeb ntawm daim ntawv nws tus kheej, thiab qhov thib ob nrog qhov tseem ceeb rau ib puag ncig, uas nyob rau hauv lem yuav override lub cov 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"
Kev txhais cov txiaj ntsig thoob ntiaj teb rau cov kab kos duab ntawm txhua qhov kev tshaj tawm ntawm ib puag ncig qib
Cia peb hais tias peb tsim ntau qhov ingress hauv ntau qhov kev tshaj tawm - peb tuaj yeem txhais tau tus kheej rau txhua daim ntawv hosts:
, tab sis nyob rau hauv peb cov ntaub ntawv tus sau yog tib yam, yog li vim li cas ho tsis muab tso rau hauv ib co ntiaj teb no sib txawv thiab tsuas hloov nws tus nqi rau hauv cov kab kos? Ua li no, cov ntaub ntawv nrog qhov tseem ceeb uas peb xav kom parameterize yuav tsum muaj qhov txuas ntxiv .gotmpl
, kom helmfile paub tias nws yuav tsum tau khiav los ntawm lub cav 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 }}
Daim ntawv
Obviously, ingress nyob rau hauv daim ntawv qhia postgres yog ib yam dab tsi tsis tshua muaj neeg dubious, yog li tsab xov xwm no tsuas yog muab raws li ib tug spherical piv txwv nyob rau hauv lub tshuab nqus tsev vacuum thiab thiaj li tsis mus qhia ib co tshiab tso rau hauv tsab xov xwm tsuas yog rau lub hom phiaj ntawm kev piav qhia txog ingress.
Hloov cov secrets los ntawm ib puag ncig muaj nuj nqis
Los ntawm kev sib piv nrog cov piv txwv saum toj no, koj tuaj yeem hloov cov encrypted siv
.
├── 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
Daim ntawv
Los ntawm txoj kev, getOrNil
- muaj nuj nqi tshwj xeeb rau cov qauv mus rau hauv helmfile, uas, txawm tias .Values.secrets
yuav tsis muaj nyob, yuav tsis pov qhov yuam kev, tab sis yuav tso cai rau qhov tshwm sim uas siv cov haujlwm default
hloov tus nqi pib
xaus
Cov khoom tau piav qhia zoo li pom tseeb, tab sis cov ntaub ntawv ntawm kev piav qhia yooj yim ntawm kev xa mus rau ntau qhov chaw siv helmfile yog qhov tsawg heev, thiab kuv nyiam IaC (Infrastructure-as-Code) thiab xav kom muaj cov lus piav qhia meej ntawm lub xeev xa mus.
Hauv kev xaus, kuv xav ntxiv tias qhov hloov pauv rau qhov chaw nyob ib puag ncig tuaj yeem, dhau los, ua rau muaj qhov sib txawv ntawm ib puag ncig ntawm OS ntawm qee tus neeg khiav dej num los ntawm qhov kev xa tawm yuav raug xa tawm, thiab yog li tau txais cov chaw nyob ib puag ncig.
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
Tau qhov twg los: www.hab.com