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ʼів, і це може зламатися, якщо ви використовуєте мітки, які змінюються, такі як версія або дата релізу.