Memasang dan mengelola Diagram Helm dapat memberi Anda beberapa komplikasi yang mungkin belum pernah Anda temui sebelumnya.
Helm Charts memaketkan aplikasi untuk dipasang ke dalam cluster Kubernetes. Memasang Diagram Helm agak mirip dengan peluncuran
, jadi pengembang Diagram Helm menghadapi beberapa masalah yang sama dengan yang dihadapi oleh pengembang yang membuat penginstal:
- Asumsi apa yang dapat Anda buat tentang lingkungan tempat Anda memasang?
- Bisakah aplikasi berinteraksi dengan aplikasi lain?
- Konfigurasi apa yang harus tersedia bagi pengguna dan bagaimana seharusnya ditawarkan?
Tetapi pertanyaan-pertanyaan ini terkait dengan spesifikasi Helm. Untuk memahami alasannya, mari kita mulai dengan gambaran tentang apa yang terjadi saat pengguna meluncurkannya helm install
. Kami kemudian dapat melanjutkan untuk melihat bagaimana beberapa grafik Kubernetes resmi mengatasi masalah ini.
Luncurkan gambarhelm install
Saya ingin menginstal MySQL di cluster saya. Tetapi saya tidak memerlukan versi MySQL yang stable/MySQL
diinstal di file values.yaml di repositori grafik resmi . Jadi, saya membuat file saya sendiri yang values.yaml
diberi nama mysql-values.yaml
hanya dengan satu baris:
imageTag: β5.7.10β
Lalu aku lari helm install stable/mysql --values=mysqlvalues.yaml
.
Helm (ignorant-camel
), MySQL . kubectl describe pod ignorant-camel-mysql-5dc6b947b-lf6p8
, imageTag
.
, , imageTag . helm install stabe/mysql --values=mysqlvalues.yaml --dry-run --debug
, Helm Kubernetes, .
Kubernetes , Helm Chart:
βββ Chart.yaml βββ README.md βββ templates β βββ NOTES.txt β βββ _helpers.tpl β βββ deployment.yaml β βββ secrets.yaml β βββ ...more yaml... βββ values.yaml
helm install stable/mysql
, values.yaml
Helm (, ) yaml , Kubernetes. helm install stable/mysql
, . , .
, values.yaml
β , , . , values.yaml
, , .
values.yaml
. , , . requirements.yaml
, , . , values.yaml
. , c Helm.
, ,
. , , β Helm Charts.
Helm
, Kubernetes . Helm Chart , , :
β’ , values.yaml
? , , , ?
β’ , , , ?
β’ , , (, )?
β’ , ?
, Helm Charts. , , , .
, , . Helm, . Helm , . .
, . , , , Helm 3 Lua. .
1.
, env, values.yaml
:
- name: ENV_VAR1 value: {{ .Values.var1 }} - name: ENV_VAR2 value: {{ .Values.var2 }}
values.yaml
--set var1=foo
. , ? , , (, ENV_VAR1
var1
)? , . , , ?
Helm Charts, configmap
. / . configmap, unbound.conf. , . configmap
, :
{{- range .Values.localRecords }} local-data: "{{ .name }} A {{ .ip }}" local-data-ptr: "{{ .ip }} {{ .name }}" {{- end }}
values.yaml localRecords
, :
localRecords: - name: "fake3.host.net" ip: "10.12.10.10" - name: "fake4.host.net" ip: "10.13.10.10"
Sonarqube chart , extraEnv
:
{{- range $key, $value := .Values.extraEnv }} β name: {{ $key }} value: {{ $value }} {{- end }}
values.yaml
, :
extraEnv: - ENV_VAR1: var1 - ENV_VAR2: var2
extraEnv
, . Buildkite , . values.yaml
:
{{- if .Values.extraEnv }} {{ toYaml .Values.extraEnv | indent 12 }} {{- end }}
, , , extraEnv
values.yaml
, (
) (
) , :
extraEnv: β name: ENV_VAR1 value: "var1" β name: ENV_VAR2 value: "var2"
Keycloak :
{{- with .Values.keycloak.extraEnv }} {{ tpl . $ | indent 12 }} {{- end }}
, extraEnv
, tpl
, , . , , :
extraEnv: | β name: KEYCLOAK_LOGLEVEL value: DEBUG β name: HOSTNAME value: {{ .Release.Name }}-keycloak
{{ .Release.Name }}
values.yaml
, , tpl
. , , , ( ). , values.yaml
, .
2.
, Helm, , ( ) . , , .
, , β . , Xray Postgres. , Postgres ( , , ):
{{- if .Values.postgresql.enabled }} β name: POSTGRES_USER value: {{ .Values.postgresql.postgresUser }} β name: POSTGRESS_PASSWORD valueFrom: secretKeyRef: name: {{ .Release.Name }}-postgresql key: postgres-password β name: POSTGRESS_DB value: {{ .Values.postgresql.postgresDatabase }} {{- else }} ...
Xray
, , Postgres. , , ? . ?
extraEnv
, Keycloak. extraEnv
, Postgres, . values.yaml
:
extraEnv: | β name: POSTGRES_USER value: {{ .Values.postgresql.postgresUser }} β name: POSTGRESS_PASSWORD valueFrom: secretKeyRef: name: {{ .Release.Name }}-postgresql key: postgres-password β name: POSTGRESS_DB value: {{ .Values.postgresql.postgresDatabase }}
|
, , tpl
.
, , configmap. β .Files.Get
. , values.yaml, , . , .Files.Get tpl. configmap , :
conf_file1: {{ tpl (.Files.Get "files/conf_file1") . | quote }}
Secret base64:
conf_file1: {{ tpl (.Files.Get "files/conf_file1") . | b64enc | quote }}
{{ (tpl (.Files.Glob "files/*").AsConfig . ) | indent 2 }}
AsSecret
, tpl
. , Glob Get :
{{ range $path, $bytes := .Files.Glob "files/*" }} {{ base $path }}: '{{ tpl ($root.Files.Get $path) . | b64enc }}' {{ end }}
3. -
extraEnv
Keycloak
, , , . , Keycloak Keycloak
, JSON
, Keycloak
. , extraVolumes
:
{{- with .Values.keycloak.extraVolumes }} {{ tpl . $ | indent 8 }} {{- end }}
extraVolumeMounts
:
volumeMounts: - name: scripts mountPath: /scripts {{- with .Values.keycloak.extraVolumeMounts }} {{ tpl . $ | indent 12 }} {{- end }}
extraVolumes: | β name: custom-secret secret: secretName: custom-secret extraVolumeMounts: | - name: custom-secret mountPath: "/realm/" readOnly: true
(volumes) volumeMounts
values.yaml
. , , initContainers
( sidecars
). , , .
Keycloak , preStartScript, :
{{- with .Values.keycloak.preStartScript }} echo 'Running custom pre-start script...' {{ . | indent 4 }} {{- end }}
, , .Values.keycloak.preStartScript
values.yaml
. , , .
4.
Helm, helm create
, (Service), Ingress. Ingress. , . , RabbitMQ, , Ingress :
{{- if .Values.ingress.enabled }} ... {{-end}
, RabbitMQ , (host-based):
rules: {{- if .Values.ingress.hostName }} - host: {{ .Values.ingress.hostName }} http: {{- else }} - http: {{- end }}
RabbitMQ ( else ). , (, RabbitMQ , ):
- path: {{ default "/" .path }} backend: serviceName: {{ template "rabbitmq.fullname" . }} servicePort: {{ .Values.rabbitmq.managerPort }}
, , .
{{- with .Values.ingress.annotations }} annotations: {{ toYaml . | indent 4 }} {{- end }}
values.yaml
, :
annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /
, .yaml , , . , , , . , NGINX :
annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/configuration-snippet: | more_set_headers 'Access-Control-Allow-Origin: $http_origin';
Art of the Helm Chart
Helm Chart , . , , . . , , , .
Ada masalah lain yang belum kami bahas, seperti pengujian dan keamanan. Itu hanya melihat bagian tertentu dari grafik resmi. Saya telah mencoba untuk fokus pada pola yang menurut saya sangat berguna untuk membuat pengguna melakukan apa yang mereka inginkan dengan bagan Anda. Bagan Kubernetes resmi sangat membantu saya saat mengerjakan bagan Helm untuk proyek Activity . Semoga penjelasan dalam posting ini akan membantu mendorong orang lain untuk terjun ke repo resmi dan mengambil inspirasi dari bagannya.