Is féidir leat léamh faoi helmfile féin agus samplaí dá úsáid i
Cuirfimid aithne ar bhealaí neamhshoiléire chun cur síos a dhéanamh ar eisiúintí i helmfile
Ligean le rá go bhfuil paca cairteacha stiúrtha againn (mar shampla, abair linn postgres agus roinnt feidhmchláir backend) agus roinnt timpeallachtaí (roinnt braislí kubernetes, roinnt spásanna ainm, nó roinnt den dá cheann). Glacaimid an comhad helm, léimid na doiciméid agus cuirimid síos ar ár dtimpeallachtaí agus ar ár n-eisiúintí:
.
├── 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íochnaíomar suas le 2 timpeallacht: fhorbairt, táirgeadh — tá a luachanna féin ag gach ceann acu le haghaidh na gcairteacha scaoilte stiúrtha. Déanfaimid imscaradh chucu mar seo:
helmfile -n <namespace> -e <env> apply
Leaganacha éagsúla de chairteacha stiúrtha i dtimpeallachtaí éagsúla
Cad a tharlóidh má theastaíonn uainn leaganacha éagsúla den inneall a rolladh amach chuig timpeallachtaí éagsúla? Conas an leagan scaoilte a pharaiméadarú? Na luachanna comhshaoil atá ar fáil tríd {{ .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 }}
...
Sraith éagsúil d'iarratais i dtimpeallachtaí éagsúla
Go hiontach, ach cad mura bhfuil gá againn production
postgres a rolladh amach, mar tá a fhios againn nach gá dúinn an bunachar sonraí a bhrú isteach i k8s agus ar díol tá braisle postgres iontach ar leith againn? Chun an fhadhb seo a réiteach tá lipéid againn
helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply
Tá sé seo iontach, ach go pearsanta is fearr liom cur síos a dhéanamh ar na feidhmchláir atá le himscaradh sa chomhshaol gan úsáid a bhaint as argóintí seolta, ach sa chur síos ar na timpeallachtaí féin. Cad atá le déanamh? Is féidir leat na tuairiscí scaoilte a chur i bhfillteán ar leith, liosta de na heisiúintí riachtanacha a chruthú sa tuairisc timpeallachta agus "piocadh suas" na heisiúintí riachtanacha amháin, gan aird a thabhairt ar an gcuid eile
.
├── 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 nóta
Nuair a bheidh ag úsáid an bases:
is gá deighilteoir yaml a úsáid ---
, ionas gur féidir leat eisiúintí teimpléid (agus páirteanna eile, mar shampla helmDefaults) le luachanna ó thimpeallachtaí
Sa chás seo, ní bheidh an scaoileadh postgres san áireamh fiú sa tuairisc le haghaidh táirgeadh. An-chompordach!
Luachanna domhanda sáraitheacha maidir le heisiúintí
Ar ndóigh, tá sé iontach gur féidir leat luachanna a shocrú le haghaidh cairteacha stiúrtha do gach timpeallacht, ach cad má tá cur síos déanta ar roinnt timpeallachtaí againn, agus ba mhaith linn, mar shampla, an rud céanna a shocrú do chách. affinity
, ach nílimid ag iarraidh é a chumrú de réir réamhshocraithe sna cairteacha iad féin, a stóráiltear i tornapaí.
Sa chás seo, le haghaidh gach scaoileadh d'fhéadfaimis 2 chomhad a shonrú le luachanna: an chéad cheann le luachanna réamhshocraithe, a chinnfidh luachanna na cairte féin, agus an dara ceann le luachanna don chomhshaol, rud a sháróidh an cinn réamhshocraithe.
.
├── 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"
Luachanna domhanda a shainiú le haghaidh cairteacha stiúrtha de gach eisiúint ag leibhéal an chomhshaoil
Ligean le rá a chruthú dúinn dul isteach i roinnt eisiúintí - d'fhéadfadh muid a shainiú de láimh do gach cairt hosts:
, ach inár gcás tá an fearann mar an gcéanna, mar sin cén fáth nach gcuirfeá in athróg dhomhanda éigin é agus go simplí in ionad a luach sna cairteacha? Chun seo a dhéanamh, ní mór an síneadh a bheith ag na comhaid sin le luachanna a theastaíonn uainn a pharaiméadarú .gotmpl
, ionas go mbeidh a fhios ag helmfile gur gá é a reáchtáil tríd an inneall teimpléad.
.
├── 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 nóta
Ar ndóigh, is rud an-amhrasach é dul isteach sa chairt postgres, mar sin tugtar an t-alt seo go simplí mar shampla sféarúil i bhfolús agus ionas nach gcuirfear roinnt scaoileadh nua isteach san alt díreach ar mhaithe le cur síos a dhéanamh ar theacht isteach.
Rúin a chur in ionad luachanna comhshaoil
De réir analaí leis an sampla thuas, is féidir leat a chur in ionad cinn criptithe ag baint úsáide as
.
├── 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 nóta
Dála an scéil, getOrNil
- feidhm speisialta le haghaidh teimpléid dul i helmfile, a, fiú amháin más rud é .Values.secrets
ní bheidh ann, ní bheidh caith earráid, ach beidh an toradh a cheadú ag baint úsáide as an fheidhm default
ionad luach réamhshocraithe
Conclúid
Is cosúil go bhfuil na rudaí a gcuirtear síos orthu sách soiléir, ach tá faisnéis maidir le cur síos áisiúil ar imscaradh chuig roinnt timpeallachtaí ag baint úsáide as helmfile an-ghann, agus is breá liom IaC (Bonneagar-mar-Cód) agus ba mhaith liom cur síos soiléir a bheith agam ar staid an imscartha.
Mar fhocal scoir, ba mhaith liom a chur leis gur féidir, ar a seal, na hathróga don timpeallacht réamhshocraithe a pharaiméadar le hathróga timpeallachta an OS de rádala áirithe óna seolfar an t-imscaradh, agus dá bhrí sin timpeallachtaí dinimiciúla a fháil.
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
Foinse: will.com