PodsとPodTemplates
ベストプラクティスガイドのこの部分では、チャートマニフェストにおけるPodおよびPodTemplate部分のフォーマットについて説明します。
以下は(網羅的ではない)PodTemplateを使用するリソースのリストです。
- Deployment
- ReplicationController
- ReplicaSet
- DaemonSet
- StatefulSet
イメージ
コンテナイメージは、固定タグまたはイメージのSHAを使用する必要があります。latest
、head
、canary
、または「フローティング」するように設計された他のタグを使用しないでください。
イメージは、イメージを簡単に交換できるように、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などのセットにとってはさらに重要です。これがないと、ラベルのセット全体が一致するポッドを選択するために使用され、バージョンやリリース日などの変更されるラベルを使用すると、これが壊れます。