Pod 和 PodTemplates
最佳实践指南的这一部分讨论了在图表清单中格式化 Pod 和 PodTemplate 部分。
以下(非详尽)资源列表使用 PodTemplates
- 部署
- 复制控制器
- 副本集
- 守护进程集
- 有状态集
镜像
容器镜像应使用固定标签或镜像的 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
同样,如果根本没有定义 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,如果您使用的是会更改的标签,比如版本或发布日期,那么这会导致问题。