Pods та PodTemplates

Цей розділ посібника з найкращих практик обговорює форматування частин Pod та PodTemplate у маніфестах чарту.

Наступний (неповний) список ресурсів використовує PodTemplates:

  • Deployment
  • ReplicationController
  • ReplicaSet
  • DaemonSet
  • StatefulSet

Образи

Образи контейнера повинні використовувати фіксовану мітку або SHA образу. Не слід використовувати мітки latest, head, canary або інші мітки, які призначені для "плаваючих" версій.

Образи можуть бути визначені у файлі values.yaml, щоб спростити заміну образів.

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

Образи та мітка можуть бути визначені в values.yaml як два окремих поля:

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

ImagePullPolicy

helm create стандартно встановлює imagePullPolicy на IfNotPresent, роблячи це у вашому deployment.yaml:

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

А у values.yaml:

image:
  pullPolicy: IfNotPresent

Аналогічно, Kubernetes стандартно встановлює imagePullPolicy на IfNotPresent, якщо він зовсім не визначений. Якщо вам потрібне інше значення, просто оновіть його в values.yaml на потрібне значення.

PodTemplates повинні оголошувати селектори

Усі секції PodTemplate повинні вказувати селектор. Наприклад:

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

Це гарна практика, оскільки вона робить відносини між набором і pod чіткішими.

Але це ще важливіше для таких наборів, як Deployment. Без цього, весь набір міток використовується для вибору відповідних pod, і це може зламатися, якщо ви використовуєте мітки, які змінюються, такі як версія або дата релізу.