Middle
Come usare i modelli Helm?
sobes.tech AI
Risposta dell'AI
I modelli Helm consentono di generare dinamicamente i manifesti Kubernetes basati su valori e funzioni definiti.
Componenti principali del modello:
- Modelli (Templates): file YAML di manifesti con sintassi Go template incorporata.
- Valori (Values): file YAML o parametri da riga di comando contenenti dati per compilare i modelli.
- Funzioni (Functions): funzioni integrate o personalizzate di Go template per la logica di elaborazione dei valori e la generazione di stringhe.
Esempio di modello di base 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 }}
Esempio di file di valori values.yaml:
replicaCount: 1
image:
repository: nginx
tag: latest
service:
port: 80
Utilizzo di helper (helpers) per blocchi di codice riutilizzabili, solitamente nel file _helpers.tpl:
{{/*
Etichette comuni
*/}}
{{- 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 }}
{{/*
Etichette di selettore
*/}}
{{- define "mychart.selectorLabels" -}}
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
Chiamata a helper nel modello:
labels:
{{ include "mychart.labels" . | nindent 4 }}
Funzioni principali del template Go in Helm, frequentemente usate:
| Funzione | Descrizione | Esempio |
|---|---|---|
include |
Inserisce il contenuto di un altro modello. | {{ include "my.helper" . }} |
nindent |
Indenta l'output multilines. | `{{ .Values.multiline |
quote |
Circonda la stringa tra virgolette. | `{{ .Values.someString |
default |
Imposta un valore di default. | `{{ .Values.replicas |
required |
Rifiuta se manca un valore. | {{ required "È richiesta una password del database!" .Values.database.password }} |
toJson |
Converte i dati in stringa JSON. | `{{ .Values.config |
toYaml |
Converte i dati in stringa YAML. | `{{ .Values.config |
Controllo degli spazi: - dopo {{ e prima di }} rimuove gli spazi.
{{- range .Values.items }}
- name: {{ .name }}
value: {{ .value | quote }}
{{- end -}}
Logica condizionale e cicli:
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
...
{{- end }}
{{- range $key, $value := .Values.configMapData }}
{{ $key }}: {{ $value | quote }}
{{- end }}
Test di template:
helm lint mychart # Verifica sintassi di base
helm template mychart --values mychart/values.yaml # Renderizza il template con i valori