Aller au contenu principal
Version: 3.19.0

Pods et PodTemplates

Cette partie du guide des bonnes pratiques aborde le formatage des sections Pod et PodTemplate dans les manifestes de chart.

La liste suivante (non exhaustive) de ressources utilise des PodTemplates :

  • Deployment
  • ReplicationController
  • ReplicaSet
  • DaemonSet
  • StatefulSet

Images

Une image de conteneur doit utiliser un tag fixe ou le SHA de l'image. Elle ne doit pas utiliser les tags latest, head, canary, ou d'autres tags conçus pour être « flottants ».

Les images peuvent être définies dans le fichier values.yaml pour faciliter le remplacement des images.

image: {{ .Values.redisImage | quote }}

Une image et un tag peuvent être définis dans values.yaml comme deux champs séparés :

image: "{{ .Values.redisImage }}:{{ .Values.redisTag }}"

ImagePullPolicy

helm create définit imagePullPolicy sur IfNotPresent par défaut en ajoutant ce qui suit dans votre deployment.yaml :

imagePullPolicy: {{ .Values.image.pullPolicy }}

Et dans values.yaml :

image:
pullPolicy: IfNotPresent

De la même façon, Kubernetes définit par défaut imagePullPolicy sur IfNotPresent s'il n'est pas défini du tout. Si vous souhaitez une valeur autre que IfNotPresent, modifiez simplement la valeur dans values.yaml pour la valeur souhaitée.

Les PodTemplates doivent déclarer des sélecteurs

Toutes les sections PodTemplate doivent spécifier un sélecteur. Par exemple :

selector:
matchLabels:
app.kubernetes.io/name: MyName
template:
metadata:
labels:
app.kubernetes.io/name: MyName

C'est une bonne pratique car elle établit clairement la relation entre l'ensemble et le pod.

Mais cela est encore plus important pour les ressources comme Deployment. Sans cela, l'ensemble complet des labels est utilisé pour sélectionner les pods correspondants, ce qui peut poser problème si vous utilisez des labels qui changent, comme la version ou la date de release.