このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら。
- ベースの Pod と PodTemplate のイメージの名前とタグを上書きする
- ベースの Pod と PodTemplate の環境変数と引数を上書きする
Pod のカスタマイズ
動機
アプリケーションを特定の環境用にカスタマイズすることがよくあります。 Pod Template をカスタマイズするシンプルな方法はイメージ、環境変数、コマンドライン引数を通じて行うことです。
よくある例は以下のようなものです。
- dev、test、canary、production 環境用に異なるバージョンのイメージを実行する
- dev、test、canary、production 環境用に異なる環境変数と引数を Pod に設定する
イメージのカスタマイズ
ユースケース: 複数の環境 (test、dev、staging、canary、prod) が異なるタグのイメージを使用します。
ベースの Pod Template から image
フィールドの名前とタグを上書きするには、kustomization.yaml
の images
フィールドを指定します。
フィールド | 説明 | フィールドの例 | 結果の例 |
---|---|---|---|
name |
イメージ名にマッチするイメージ | name: nginx |
|
newTag |
name にマッチするイメージ名をもつイメージに対してタグやダイジェストを上書きする |
newTag: new |
nginx:old -> nginx:new |
newName |
name にマッチするイメージ名をもつイメージに対してイメージの名前を上書きする |
newImage: nginx-special |
nginx:old -> nginx-special:old |
入力: kustomization.yaml
ファイル
# kustomization.yaml
bases:
- ../base
images:
- name: nginx-pod
newTag: 1.15
newName: nginx-pod-2
ベース: kustomization.yaml
により修正されるリソース
# ../base/kustomization.yaml
resources:
- deployment.yaml
# ../base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx-pod
適用: クラスタに適用されるリソース
# Modified Base Resource
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
# The image image tag has been changed for the container
- name: nginx
image: nginx-pod-2:1.15
newImage
を使うとイメージ名を別の任意のイメージ名に置換できます。
たとえば、イメージ名を webserver
や database
と呼ぶために、nginx
や mysql
イメージ名を置換できます。
イメージのカスタマイズに関する詳細は コンテナイメージ をご覧ください。
Pod の環境変数をカスタマイズする
ユースケース: 複数の環境 (test、dev、staging、canary、prod) に異なる環境変数を設定します。
Pod の環境変数を上書きします。
- ベースが Pod 内の ConfigMap データを環境変数として使用
- 各バリエーションは ConfigMap データを上書きまたは拡張する
入力: kustomization.yaml ファイル
# kustomization.yaml
bases:
- ../base
configMapGenerator:
- name: special-config
behavior: merge
literals:
- special.how=very # override the base value
- special.type=charm # add a value to the base
ベース: kustomization.yaml とリソース
# ../base/kustomization.yaml
resources:
- deployment.yaml
configMapGenerator:
- name: special-config
behavior: merge
literals:
- special.how=some # this value is overridden
- special.other=that # this value is added
# ../base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
envFrom:
- configMapRef:
name: special-config
適用: クラスタに適用されるリソース
# Generated Variant Resource
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config-82tc88cmcg
data:
special.how: very
special.type: charm
special.other: that
---
# Unmodified Base Resource
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
envFrom:
# Container env will have the overridden ConfigMap values
- configMapRef:
name: special-config-82tc88cmcg
Pod のコマンドライン引数をカスタマイズ
ユースケース: 複数の環境 (test、dev、staging、canary、prod) にそれぞれ異なるコマンドライン引数を与えます。
Pod のコマンド引数を上書きします。
- ベースは ConfigMap データをコマンド引数として使用
- 各バリエーションは異なる ConfigMap データを定義する
入力: kustomization.yaml ファイル
# kustomization.yaml
bases:
- ../base
configMapGenerator:
- name: special-config
behavior: merge
literals:
- SPECIAL_LEVEL=very
- SPECIAL_TYPE=charm
# ../base/kustomization.yaml
resources:
- deployment.yaml
configMapGenerator:
- name: special-config
literals:
- SPECIAL_LEVEL=override.me
- SPECIAL_TYPE=override.me
# ../base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh" ]
# Use the ConfigMap Environment Variables in the Command
args: ["-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_LEVEL
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_TYPE
適用: クラスタに適用されるリソース
# Generated Variant Resource
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config-82tc88cmcg
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm
---
# Unmodified Base Resource
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: k8s.gcr.io/busybox
name: test-container
command:
- /bin/sh
args:
- -c
# Container args will have the overridden ConfigMap values
- echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
key: SPECIAL_LEVEL
name: special-config-82tc88cmcg
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
key: SPECIAL_TYPE
name: special-config-82tc88cmcg
ConfigMap と Secret の生成に関する詳細は Secret と ConfigMap を参照してください。