ನೀವು ಹೆಲ್ಮ್ಫೈಲ್ ಬಗ್ಗೆ ಮತ್ತು ಅದರ ಬಳಕೆಯ ಉದಾಹರಣೆಗಳ ಬಗ್ಗೆ ಓದಬಹುದು
ಹೆಲ್ಮ್ಫೈಲ್ನಲ್ಲಿ ಬಿಡುಗಡೆಗಳನ್ನು ವಿವರಿಸಲು ಸ್ಪಷ್ಟವಲ್ಲದ ಮಾರ್ಗಗಳೊಂದಿಗೆ ನಾವು ಪರಿಚಯ ಮಾಡಿಕೊಳ್ಳುತ್ತೇವೆ
ನಾವು ಹೆಲ್ಮ್ ಚಾರ್ಟ್ಗಳ ಪ್ಯಾಕ್ ಅನ್ನು ಹೊಂದಿದ್ದೇವೆ ಎಂದು ಹೇಳೋಣ (ಉದಾಹರಣೆಗೆ, ಪೋಸ್ಟ್ಗ್ರೆಸ್ ಮತ್ತು ಕೆಲವು ಬ್ಯಾಕೆಂಡ್ ಅಪ್ಲಿಕೇಶನ್ ಎಂದು ಹೇಳೋಣ) ಮತ್ತು ಹಲವಾರು ಪರಿಸರಗಳು (ಹಲವಾರು ಕುಬರ್ನೆಟ್ ಕ್ಲಸ್ಟರ್ಗಳು, ಹಲವಾರು ನೇಮ್ಸ್ಪೇಸ್ಗಳು, ಅಥವಾ ಎರಡರಲ್ಲೂ ಹಲವಾರು). ನಾವು ಹೆಲ್ಮ್ಫೈಲ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ, ದಸ್ತಾವೇಜನ್ನು ಓದುತ್ತೇವೆ ಮತ್ತು ನಮ್ಮ ಪರಿಸರ ಮತ್ತು ಬಿಡುಗಡೆಗಳನ್ನು ವಿವರಿಸಲು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ:
.
├── 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