Grafik Seni Helm: Pola dari Grafik Resmi Kubernetes

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 }}
      
      





ConfigMap



, .Files.Glob



:







{{ (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 }}
      
      





( JSON) values.yaml:







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 .)







RabbitMQ ( else ). , (, RabbitMQ , ):







- path: {{ default "/" .path }}
  backend:
    serviceName: {{ template "rabbitmq.fullname" . }}
    servicePort: {{ .Values.rabbitmq.managerPort }}
      
      





, , .







toYaml:







{{- 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.








All Articles