Pod 和 PodTemplate

最佳實務指南的這一部分討論了在圖表清單中格式化 Pod 和 PodTemplate 部分。

以下(非詳盡)資源列表使用 PodTemplate

  • Deployment
  • ReplicationController
  • ReplicaSet
  • DaemonSet
  • StatefulSet

映像檔

容器映像檔應使用固定標籤或映像檔的 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 中將值更新為所需的值即可。

PodTemplate 應宣告選擇器

所有 PodTemplate 部分都應指定一個選擇器。例如

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

這是一個好習慣,因為它建立了集合和 Pod 之間的關係。

但這對於像 Deployment 這樣的集合更為重要。如果沒有這個,將使用整個標籤集來選擇匹配的 Pod,如果您使用像版本或發佈日期這樣會更改的標籤,這將會出錯。