メインコンテンツまでスキップ
バージョン: 3.19.0

Pod と PodTemplate

ベストプラクティスガイドのこの部分では、chart マニフェストにおける 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 は、deployment.yaml で以下のように記述することで、imagePullPolicy をデフォルトで IfNotPresent に設定します:

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

values.yaml:

image:
pullPolicy: IfNotPresent

同様に、Kubernetes も imagePullPolicy が定義されていない場合、デフォルトで IfNotPresent を使用します。IfNotPresent 以外の値が必要な場合は、values.yaml の値を希望する値に更新してください。

PodTemplate には selector を宣言する

すべての PodTemplate セクションで selector を指定してください。例:

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

selector を指定することで、ワークロードリソースと Pod の関係が明確になり、推奨されるプラクティスです。

Deployment などのワークロードリソースでは、これは特に重要です。selector を指定しないと、すべてのラベルが一致する Pod の選択に使用されます。バージョンやリリース日など変化するラベルを使用している場合、意図しない動作を引き起こす可能性があります。