翻訳
このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら。
TL;DR
kustomization.yaml
の構成をベースとしたリソース構成の再利用- 複数の環境向けにベースをカスタマイズする
- 複数のプロジェクトをまたいだベースの再利用
ベースとバリエーション
動機
ユーザーが一つのリソース構成を変形して複数の構成をデプロイしたり、同じリソース構成を再利用したりすることはよくあります。
kustomization.yaml
によって作成されたリソース構成は、kustomization.yaml
をベースとし、複数のプロジェクトをまたいで再利用することができます。
例。
- dev、test、staging、canary、production 環境にデプロイされるプロジェクトで、各環境で設定が異なる
- 複数のクラスタにデプロイされるプロジェクトで、各クラスタでプロジェクトの設定やバージョンが異なる
Reference
ベース
ベースは kustomization.yaml
の中で共有されるリソース構成のことで、別の kustomization.yaml
が利用またカスタマイズします。
ベースの例。
- Common Java Base
- 複数のアプリで使用 (ゲストブック、カレンダー、認証など)
- Common Guest Book App Base
- 複数の環境で使用 (test、staging、production など)
- Common Prod Guest Book App Base
- 複数のクラスタで使用 (us-west、us-east、us-canary など)
ベースへの参照
プロジェクトにベースを追加するには、別の kustomization.yaml
があるディレクトリのパス (kustomization.yaml
への相対パス) を base
に追加します。そうすると、ベースのプロジェクトから現プロジェクトにすべてのリソースが自動的に追加され、kustomize します。
ベースの取りうる値は以下です。
kustomization.yaml
からの相対パス - たとえば../base
- URL - たとえば
github.com/kubernetes-sigs/kustomize/examples/multibases?ref=v1.0.6
図
単一のベースが単一のアプリケーションに継承される
graph TD;
B[B]-->A[A];
ベースを共有し、異なるアプリケーションに継承される
graph TD;
B1[B1]-->A1[A1];
B2[B2]-->A1[A1];
B2[B2]-->A2[A2];
B3[B3]-->A2[A2];
例: kustomization.yaml
をベースとして追加
入力: kustomization.yaml ファイル
# kustomization.yaml
bases:
- ../base
ベース: kustomization.yaml とリソース構成
# ../base/kustomization.yaml
configMapGenerator:
- name: my-java-server-env-vars
literals:
- JAVA_HOME=/opt/java/jdk
- JAVA_TOOL_OPTIONS=-agentlib:hprof
resources:
- deployment.yaml
# ../base/deployment.yaml
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: nginx
name: nginx
volumeMounts:
- mountPath: /etc/config
name: config-volume
volumes:
- configMap:
name: my-java-server-env-vars
name: config-volume
適用: クラスタに適用されるリソース
# Unmodified Generated Base Resource
apiVersion: v1
kind: ConfigMap
metadata:
name: my-java-server-env-vars-k44mhd6h5f
data:
JAVA_HOME: /opt/java/jdk
JAVA_TOOL_OPTIONS: -agentlib:hprof
---
# Unmodified Config 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: nginx
name: nginx
volumeMounts:
- mountPath: /etc/config
name: config-volume
volumes:
- configMap:
name: my-java-server-env-vars-k44mhd6h5f
name: config-volume
ベース内のベース
ベース自体にもバリエーションとそのベースを作れます。 詳細は Advanced Composition をご覧ください。
graph TD;
B1[B1]-->B2[B2];
B2[B2]-->A[A];