Pod и PodTemplate
Эта часть руководства по лучшим практикам посвящена форматированию секций Pod и PodTemplate в манифестах чартов.
Следующий (неполный) список ресурсов использует PodTemplate:
- 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
по умолчанию, если оно не задано вообще. Если вам нужно значение, отличное от
IfNotPresent, просто обновите значение в values.yaml на желаемое.
Секции PodTemplate должны объявлять селекторы
Все секции PodTemplate должны указывать селектор. Например:
selector:
matchLabels:
app.kubernetes.io/name: MyName
template:
metadata:
labels:
app.kubernetes.io/name: MyName
Это хорошая практика, поскольку она явно определяет связь между набором и Pod.
Но это ещё более важно для таких ресурсов, как Deployment. Без этого для выбора соответствующих Pod будет использоваться весь набор меток, что приведёт к сбоям, если вы используете метки, которые изменяются, например версию или дату релиза.