Zum Hauptinhalt springen
Version: 3.19.0

Pods und PodTemplates

Dieser Teil des Best-Practices-Leitfadens behandelt die Formatierung von Pod- und PodTemplate-Bereichen in Chart-Manifesten.

Die folgende (nicht vollständige) Liste von Ressourcen verwendet PodTemplates:

  • Deployment
  • ReplicationController
  • ReplicaSet
  • DaemonSet
  • StatefulSet

Images

Ein Container-Image sollte einen festen Tag oder den SHA des Images verwenden. Es sollte nicht die Tags latest, head, canary oder andere „Floating Tags" verwenden, die auf wechselnde Versionen verweisen.

Images können in der values.yaml-Datei definiert werden, um Images einfach auszutauschen.

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

Ein Image und ein Tag können in values.yaml als zwei separate Felder definiert werden:

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

ImagePullPolicy

helm create setzt die imagePullPolicy standardmäßig auf IfNotPresent durch folgenden Eintrag in Ihrer deployment.yaml:

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

Und in values.yaml:

image:
pullPolicy: IfNotPresent

Ebenso setzt Kubernetes die imagePullPolicy standardmäßig auf IfNotPresent, wenn sie überhaupt nicht definiert ist. Wenn Sie einen anderen Wert als IfNotPresent wünschen, aktualisieren Sie einfach den Wert in values.yaml auf den gewünschten Wert.

PodTemplates sollten Selektoren deklarieren

Alle PodTemplate-Bereiche sollten einen Selektor angeben. Zum Beispiel:

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

Dies ist eine gute Praxis, da sie die Beziehung zwischen Set und Pod deutlich macht.

Bei Sets wie Deployment ist dies besonders wichtig. Ohne Selektor werden alle Labels verwendet, um passende Pods zu finden. Das führt zu Problemen, wenn Sie Labels verwenden, die sich ändern, wie Version oder Release-Datum.