PodsとPodTemplates

ベストプラクティスガイドのこの部分では、チャートマニフェストにおけるPodおよびPodTemplate部分のフォーマットについて説明します。

以下は(網羅的ではない)PodTemplateを使用するリソースのリストです。

  • Deployment
  • ReplicationController
  • ReplicaSet
  • DaemonSet
  • StatefulSet

イメージ

コンテナイメージは、固定タグまたはイメージのSHAを使用する必要があります。latestheadcanary、または「フローティング」するように設計された他のタグを使用しないでください。

イメージは、イメージを簡単に交換できるように、values.yamlファイルで定義できます

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

イメージとタグは、values.yamlで2つの別々のフィールドとして定義できます

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

ImagePullPolicy

helm createは、deployment.yamlで以下のようにすることにより、imagePullPolicyをデフォルトでIfNotPresentに設定します。

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

そしてvalues.yaml

image:
  pullPolicy: IfNotPresent

同様に、KubernetesはimagePullPolicyがまったく定義されていない場合、デフォルトでIfNotPresentに設定します。IfNotPresent以外の値を設定したい場合は、values.yamlの値を目的の値に更新するだけです。

PodTemplatesはセレクターを宣言する必要があります

すべてのPodTemplateセクションはセレクターを指定する必要があります。例:

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

これは、セットとポッドの関係を明確にするため、良いプラクティスです。

ただし、これはDeploymentなどのセットにとってはさらに重要です。これがないと、ラベルのセット全体が一致するポッドを選択するために使用され、バージョンやリリース日などの変更されるラベルを使用すると、これが壊れます。