Sobes.tech
Middle

Как да използваме шаблоните Helm?

sobes.tech AI

Отговор от AI

Шаблоните Helm позволяват динамично генериране на манифести за Kubernetes въз основа на зададени стойности и функции.

Основни компоненти на шаблонизирането:

  • Шаблони (Templates): YAML файлове с вградена синтаксис Go template.
  • Стойности (Values): YAML файлове или параметри на командния ред, съдържащи данни за попълване на шаблоните.
  • Функции (Functions): Вградени или потребителски функции на Go template за логика на обработка на стойности и генериране на низове.

Пример за основен шаблон deployment.yaml:

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: {{ .Release.Name }}-{{ .Chart.Name }}  
spec:  
  replicas: {{ .Values.replicaCount }}  
  selector:  
    matchLabels:  
      app: {{ .Chart.Name }}  
  template:  
    metadata:  
      labels:  
        app: {{ .Chart.Name }}  
    spec:  
      containers:  
        - name: {{ .Chart.Name }}  
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"  
          ports:  
            - containerPort: {{ .Values.service.port }}

Пример за файл с стойности values.yaml:

replicaCount: 1  
image:  
  repository: nginx  
  tag: latest  
service:  
  port: 80

Използване на помощници (helpers) за повторно използваеми блокове код, обикновено в файл _helpers.tpl:

{{/*  
Общи етикети  
*/}}  
{{- define "mychart.labels" -}}  
helm.sh/chart: {{ include "mychart.chart" . }}  
{{ include "mychart.selectorLabels" . }}  
{{- if .Chart.AppVersion }}  
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}  
{{- end }}  
app.kubernetes.io/instance: {{ .Release.Name }}  
app.kubernetes.io/managed-by: {{ .Release.Service }}  
{{- end }}  

{{/*  
Selector етикети  
*/}}  
{{- define "mychart.selectorLabels" -}}  
app.kubernetes.io/name: {{ include "mychart.name" . }}  
app.kubernetes.io/instance: {{ .Release.Name }}  
{{- end }}

Обаждане на помощник в шаблон:

labels:  
  {{ include "mychart.labels" . | nindent 4 }}

Основни функции на Helm с Go templates:

Функция Описание Пример
include Вмъква съдържанието на друг шаблон. {{ include "my.helper" . }}
nindent Отстъпва многострочен изход. `{{ .Values.multiline
quote Обгръща низ в кавички. `{{ .Values.someString
default Задава стойност по подразбиране. `{{ .Values.replicas
required Отказва, ако липсва стойност. {{ required "A database password is required!" .Values.database.password }}
toJson Преобразува данни в JSON низ. `{{ .Values.config
toYaml Преобразува данни в YAML низ. `{{ .Values.config

Проверка за празни стойности: - след {{ и пред }} премахва интервалите.

{{- range .Values.items }}  
- name: {{ .name }}  
  value: {{ .value | quote }}  
{{- end -}}

Логика на условни изрази и цикли:

{{- if .Values.ingress.enabled }}  
apiVersion: networking.k8s.io/v1  
kind: Ingress  
...  
{{- end }}  

{{- range $key, $value := .Values.configMapData }}  
  {{ $key }}: {{ $value | quote }}  
{{- end }}

Тестване на шаблони:

helm lint mychart  # Проверка на синтаксиса  
helm template mychart --values mychart/values.yaml  # Генериране на шаблон с стойности