ஹெல்ம்ஃபைல் மற்றும் அதன் பயன்பாட்டின் எடுத்துக்காட்டுகளைப் பற்றி நீங்கள் படிக்கலாம்
ஹெல்ம்ஃபைலில் வெளியீடுகளை விவரிக்க வெளிப்படையான வழிகளை நாங்கள் அறிந்துகொள்வோம்
எங்களிடம் ஹெல்ம் விளக்கப்படங்கள் (உதாரணமாக, போஸ்ட்கிரெஸ் மற்றும் சில பின்தள பயன்பாடு என்று வைத்துக்கொள்வோம்) மற்றும் பல சூழல்கள் (பல குபெர்னெட்ஸ் கிளஸ்டர்கள், பல பெயர்வெளிகள் அல்லது இரண்டிலும் பல) இருப்பதாக வைத்துக்கொள்வோம். நாங்கள் ஹெல்ம்ஃபைலை எடுத்து, ஆவணங்களைப் படித்து, எங்கள் சூழல்கள் மற்றும் வெளியீடுகளை விவரிக்கத் தொடங்குகிறோம்:
.
├── 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:
yaml பிரிப்பான் பயன்படுத்த வேண்டியது அவசியம் ---
, நீங்கள் சூழல்களில் இருந்து மதிப்புகளுடன் வெளியீடுகளை (மற்றும் ஹெல்ம் டிஃபால்ட்ஸ் போன்ற பிற பகுதிகள்) டெம்ப்ளேட் செய்யலாம்
இந்த வழக்கில், போஸ்ட்கிரெஸ் வெளியீடு உற்பத்திக்கான விளக்கத்தில் கூட சேர்க்கப்படாது. மிகவும் வசதியாக!
வெளியீடுகளுக்கான மேலெழுதக்கூடிய உலகளாவிய மதிப்புகள்
நிச்சயமாக, ஒவ்வொரு சூழலுக்கும் ஹெல்ம் விளக்கப்படங்களுக்கான மதிப்புகளை நீங்கள் அமைக்க முடியும் என்பது மிகவும் நல்லது, ஆனால் எங்களிடம் பல சூழல்கள் விவரிக்கப்பட்டால் என்ன செய்வது, எடுத்துக்காட்டாக, அனைவருக்கும் ஒரே மாதிரியாக அமைக்க விரும்புகிறோம். 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 }}
குறிப்பு
வெளிப்படையாக, postgres அட்டவணையில் உள்ளீடு மிகவும் சந்தேகத்திற்குரிய ஒன்று, எனவே இந்த கட்டுரை வெறுமனே ஒரு வெற்றிடத்தில் ஒரு கோள உதாரணமாக கொடுக்கப்பட்டுள்ளது மற்றும் நுழைவு விவரிக்கும் பொருட்டு கட்டுரையில் சில புதிய வெளியீடுகளை அறிமுகப்படுத்த வேண்டாம்.
சுற்றுச்சூழல் மதிப்புகளிலிருந்து இரகசியங்களை மாற்றுதல்
மேலே உள்ள உதாரணத்துடன் ஒப்புமை மூலம், நீங்கள் மறைகுறியாக்கப்பட்டவற்றைப் பயன்படுத்தி மாற்றலாம்
.
├── 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 (Infrastructure-as-Code) ஐ விரும்புகிறேன் மற்றும் வரிசைப்படுத்தல் நிலை பற்றிய தெளிவான விளக்கத்தைக் கொண்டிருக்க விரும்புகிறேன்.
முடிவில், இயல்புநிலை சூழலுக்கான மாறிகள், ஒரு குறிப்பிட்ட ரன்னரின் OS இன் சூழல் மாறிகளுடன் அளவுருவாக மாற்றப்படலாம், அதில் இருந்து வரிசைப்படுத்தல் தொடங்கப்படும், இதனால் டைனமிக் சூழல்களைப் பெறலாம்.
helmfile.yaml
environments:
default:
values:
- global:
clusterDomain: {{ env "CLUSTER_DOMAIN" | default "cluster.local" }}
ingressDomain: {{ env "INGRESS_DOMAIN" }}
ஆதாரம்: www.habr.com