تاسو کولی شئ پخپله د هیلم فایل او د هغې د کارولو مثالونه په اړه ولولئ
موږ به په هیلم فایل کې د ریلیزونو تشریح کولو لپاره غیر څرګند لارو سره آشنا شو
راځئ چې ووایو موږ د هیلم چارټونو یوه کڅوړه لرو (د مثال په توګه ، راځئ چې ووایو پوسټګریس او ځینې بیکینډ غوښتنلیک) او څو چاپیریالونه (د کبرنیټس کلسترونه ، څو نوم ځایونه ، یا ډیری دواړه). موږ هیلم فایل اخلو، اسناد ولولئ او زموږ د چاپیریال او خپرونو تشریح کول پیل کړئ:
.
├── 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
موږ د 2 چاپیریالونو سره پای ته ورسیدو: ډویل, تولید - هر یو د هیلم ریلیز چارټونو لپاره خپل ارزښتونه لري. موږ به دوی ته داسې ځای په ځای کړو:
helmfile -n <namespace> -e <env> apply
په مختلف چاپیریال کې د هیلم چارټونو مختلف نسخې
څه که موږ اړتیا لرو د پس منظر مختلف نسخې مختلف چاپیریالونو ته واړوو؟ د خوشې کولو نسخه څنګه پیرامیټریز کړئ؟ د چاپیریال ارزښتونو له لارې شتون لري {{ .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 }}
...
په مختلف چاپیریال کې د غوښتنلیکونو مختلف سیټ
ښه، مګر څه که موږ اړتیا نلرو production
پوسټګریس راوباسئ ، ځکه چې موږ پوهیږو چې موږ اړتیا نلرو ډیټابیس k8s ته واړوو او د پلور لپاره موږ په زړه پورې جلا پوسټګریس کلسټر لرو؟ د دې ستونزې د حل لپاره موږ لیبلونه لرو
helmfile -n <namespace> -e devel apply
helmfile -n <namespace> -e production -l app=backend apply
دا عالي دی ، مګر په شخصي توګه زه غوره کوم چې تشریح کړم چې کوم غوښتنلیکونه په چاپیریال کې ځای په ځای کول د لانچ دلیلونو په کارولو سره نه ، مګر پخپله د چاپیریال توضیحاتو کې. چې څه کول پکار دي؟ تاسو کولی شئ د ریلیز توضیحات په جلا فولډر کې ځای په ځای کړئ ، د چاپیریال توضیحاتو کې د اړینو ریلیزونو لیست رامینځته کړئ او یوازې اړین ریلیزونه "چوپ کړئ" ، پاتې نور له پامه غورځول.
.
├── 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
نوټ
کله چې کارول bases:
دا اړینه ده چې د یامل جلا کونکي وکاروئ ---
د دې لپاره چې تاسو کولی شئ ریلیزونه (او نورې برخې، لکه هیلم ډیفالټ) د چاپیریال څخه ارزښتونو سره
پدې حالت کې ، د پوسټ ګریس خوشې کول به حتی د تولید لپاره توضیحاتو کې شامل نشي. ډیر په آرامۍ سره!
د خپریدو لپاره د نه منلو وړ نړیوال ارزښتونه
البته، دا خورا ښه ده چې تاسو کولی شئ د هر چاپیریال لپاره د هیلم چارټونو لپاره ارزښتونه وټاکئ، مګر که چیرې موږ ډیری چاپیریالونه بیان کړو، او موږ غواړو، د بیلګې په توګه، د ټولو لپاره ورته ترتیب کړئ affinity
، مګر موږ نه غواړو دا پخپله په چارټونو کې د ډیفالټ له مخې تنظیم کړو ، کوم چې په شلو کې زیرمه شوي.
په دې حالت کې، د هرې خوشې کولو لپاره موږ کولی شو 2 فایلونه د ارزښتونو سره مشخص کړو: لومړی د ډیفالټ ارزښتونو سره، کوم چې به پخپله د چارټ ارزښتونه وټاکي، او دویم د چاپیریال لپاره ارزښتونو سره، چې په پایله کې به یې له منځه یوسي. ډیفالټ.
.
├── 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"
د چاپیریال په کچه د ټولو خپرونو د هیلم چارټونو لپاره د نړیوالو ارزښتونو تعریف کول
راځئ چې ووایو چې موږ په څو ریلیزونو کې څو ننوتل رامینځته کوو - موږ کولی شو په لاسي ډول د هر چارټ لپاره تعریف کړو hosts:
، مګر زموږ په قضیه کې ډومین یو شان دی، نو ولې دا په ځینې نړیوال متغیر کې نه اچوي او په ساده ډول یې په چارټونو کې د هغې ارزښت بدلوي؟ د دې کولو لپاره، هغه فایلونه چې د ارزښتونو سره چې موږ یې پیرامیټریز کول غواړو باید توسیع ولري .gotmpl
د دې لپاره چې هیلم فایل پوه شي چې دا د ټیمپلیټ انجن له لارې چلولو ته اړتیا لري.
.
├── 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 }}
نوټ
په ښکاره ډول ، د پوسټګریس چارټ کې ننوتل یو څه خورا شکمن دی ، نو دا مقاله په ساده ډول په خلا کې د کروي مثال په توګه ورکړل شوې او د دې لپاره چې مقاله کې ځینې نوي خوشې نه کړي یوازې د ننوتلو تشریح کولو لپاره.
د چاپیریال ارزښتونو څخه د رازونو ځای په ځای کول
د پورتني مثال سره په ورته والي سره ، تاسو کولی شئ د کوډ شوي ځای په کارولو سره ځای په ځای کړئ
.
├── 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
نوټ
په لاره کې، getOrNil
- په هیلم فایل کې د ګو ټیمپلیټونو لپاره ځانګړی فعالیت ، کوم چې حتی که .Values.secrets
موجود نه وي، کومه تېروتنه به ونه کړي، مګر د فنکشن په کارولو سره به پایلې ته اجازه ورکړي default
د اصلي ارزښت بدیل
پایلې
بیان شوي شیان خورا څرګند ښکاري ، مګر د هیلم فایل په کارولو سره ډیری چاپیریالونو ته د ګمارلو مناسب توضیحاتو په اړه معلومات خورا کم دي ، او زه IaC (انفراسټرکچر-اس-کوډ) خوښوم او غواړم د ځای پرځای کولو حالت روښانه توضیحات ولرم.
په پایله کې ، زه غواړم اضافه کړم چې د ډیفالټ چاپیریال لپاره متغیرونه کولی شي په پایله کې د یو ځانګړي رنر د OS د چاپیریال متغیرونو سره پیرامیټریټ شي چې له هغې څخه ګمارل به پیل شي ، او پدې توګه متحرک چاپیریال ترلاسه کوي.
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
سرچینه: www.habr.com