Pod 和 PodTemplates

最佳实践指南的这一部分讨论了在图表清单中格式化 Pod 和 PodTemplate 部分。

以下(非详尽)资源列表使用 PodTemplates

  • 部署
  • 复制控制器
  • 副本集
  • 守护进程集
  • 有状态集

镜像

容器镜像应使用固定标签或镜像的 SHA。它不应该使用 latestheadcanary 或其他旨在“浮动”的标签。

镜像可以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

同样,如果根本没有定义 imagePullPolicy,Kubernetes 将其默认设置为 IfNotPresent。如果您想要 IfNotPresent 以外的值,只需在 values.yaml 中将值更新为您的期望值。

PodTemplates 应声明选择器

所有 PodTemplate 部分都应指定选择器。例如

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

这是一种良好的做法,因为它使集合和 Pod 之间的关系变得清晰。

但对于 Deployment 这样的集合来说,这一点更为重要。如果没有选择器,所有标签集合将用于选择匹配的 Pod,如果您使用的是会更改的标签,比如版本或发布日期,那么这会导致问题。