ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【笔记】Helm-4 最佳实践-6 pod和pod模板

2026/9/16 22:48:29 拓冰建站 浏览量
【笔记】Helm-4 最佳实践-6 pod和pod模板

pod和pod模板

最佳实践的这部分讨论在chart清单中格式化Pod和Pod模板部分。

以下(非详尽的)资源列表使用Pod模板:

Deployment

ReplicationController

ReplicaSet

DaemonSet

StatefulSet

镜像

容器镜像应该使用固定的tag或镜像SHA。不应该使用latest,head,canary等标签或其他被设计为“浮动的”标签。

镜像可以被定义在values.yaml文件中使得切换镜像更加容易。

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

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

镜像和tag可以在values.yaml中定义为两个独立的字段:

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

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

镜像拉取策略

helm create通过以下方式在deployment.yaml中将imagePullPolicy默认设置为IfNotPresent:

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

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

以及values.yaml:

image:

  pullPolicy: IfNotPresent

image:pullPolicy: IfNotPresent

类似地,如果Kubernetes根本没有定义,默认会将imagePullPolicy设置为IfNotPresent。如果想设置一个值而不是IfNotPresent,只需在values.yaml中更新为需要的值即可。

Pod模板应该声明选择器

所有的Pod模板部分应该指定一个selector。比如:

selector:

  matchLabels:

    app.kubernetes.io/names: MyName

template:

  metadata:

    labels:

      app.kubernetes.io/name: MyName

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

这是一个很好的实践,因为它建立了集合和pod之间的关系。

但这一点对于像工作负载这样的集合来说更加重要。如果没有,标签的所有集合会选择匹配pod,如果您使用了改变的标签,比如版本和发布日期,这个功能会失效。

————————————

仅用于本人学习

来源:Helm | Docs