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