Sobes.tech
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