Middle
Comment utiliser les modèles Helm?
sobes.tech IA
Réponse de l'IA
Les modèles Helm permettent de générer dynamiquement des manifestes Kubernetes basés sur des valeurs et des fonctions définies.
Composants principaux du modèle :
- Modèles (Templates): fichiers YAML de manifestes avec syntaxe intégrée de Go template.
- Valeurs (Values): fichiers YAML ou paramètres en ligne de commande contenant des données pour remplir les modèles.
- Fonctions (Functions): fonctions intégrées ou personnalisées de Go template pour la logique de traitement des valeurs et la génération de chaînes.
Exemple de modèle de 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 }}
Exemple de fichier de valeurs values.yaml :
replicaCount: 1
image:
repository: nginx
tag: latest
service:
port: 80
Utilisation d'aides (helpers) pour blocs de code réutilisables, généralement dans le fichier _helpers.tpl :
{{/*
Étiquettes communes
*/}}
{{- 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 }}
{{/*
Étiquettes de sélecteur
*/}}
{{- define "mychart.selectorLabels" -}}
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
Appel d'un helper dans le modèle :
labels:
{{ include "mychart.labels" . | nindent 4 }}
Fonctions principales du template Go dans Helm, souvent utilisées :
| Fonction | Description | Exemple |
|---|---|---|
include |
Insère le contenu d'un autre modèle. | {{ include "my.helper" . }} |
nindent |
Indente la sortie multilignes. | `{{ .Values.multiline |
quote |
Encadre la chaîne entre guillemets. | `{{ .Values.someString |
default |
Définit une valeur par défaut. | `{{ .Values.replicas |
required |
Rejette si la valeur est absente. | {{ required "Un mot de passe de base de données est requis!" .Values.database.password }} |
toJson |
Convertit les données en chaîne JSON. | `{{ .Values.config |
toYaml |
Convertit les données en chaîne YAML. | `{{ .Values.config |
Contrôle des espaces : - après {{ et avant }} supprime les espaces.
{{- range .Values.items }}
- name: {{ .name }}
value: {{ .value | quote }}
{{- end -}}
Logique conditionnelle et boucles :
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
...
{{- end }}
{{- range $key, $value := .Values.configMapData }}
{{ $key }}: {{ $value | quote }}
{{- end }}
Tests de modèles :
helm lint mychart # Vérification syntaxique de base
helm template mychart --values mychart/values.yaml # Rendu du modèle avec valeurs