PodとPodテンプレート
ベストプラクティスのこの部分では、チャートマニフェストの、PodとPodテンプレート部分の フォーマットについて説明します。
以下のリソースのリスト(非網羅的)がPodテンプレートを使用します:
- Deployment
- ReplicationController
- ReplicaSet
- DaemonSet
- StatefulSet
イメージ
コンテナイメージは固定されたタグ、もしくはイメージのSHAを使用するべきです。イメージはlatest
,
head
,canary
タグや、その他"浮いている"タグは使用するべきではありません。
イメージは、簡単に入れ替えられるように、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
の値を必要な値に更新
してください。
Podテンプレートはselectorを宣言するべき
全てのPodテンプレートセクションはselectorを指定するべきです。例えば:
selector:
matchLabels:
app.kubernetes.io/name: MyName
template:
metadata:
labels:
app.kubernetes.io/name: MyName
これはセットとPodの関係を作るため、良い慣習です。
しかし、Deploymentのようなセットでは、これはさらに重要になります。これがないと、 全ての ラベルのセットが一致するPodを選択するために使用され、もし、バージョンやリリース日のように、 変化するラベルを使用していた場合、これが壊れることになります。