Kustomize@マニフェスト管理¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. bases
ディレクトリ¶
kustomize.yaml
ファイル¶
▼ kustomize.yaml
ファイルとは¶
base
ディレクトリ配下にあるファイルの処理方法を設定する。
kubectl
コマンドで-k
オプションを有効化すると、kustomize.yaml
ファイルを使用できる。
kustomize.yaml
ファイルのあるディレクトリを指定する。
▼ resources¶
使用するリソース定義ファイルを設定する。
*実装例*
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./applications/deployment.yaml
*実装例*
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- application-crd.yaml
- appproject-crd.yaml
- applicationset-crd.yaml
resources
ディレクトリ¶
▼ リソース定義ファイル
¶
後のoverlays
ディレクトリの元になるリソース定義を設定する。
*実装例*
元になるリソース定義を設定する。
ここでは、Deploymentを設定する。
apiVersion: apps/v1
kind: Deployment
metadata:
name: foo-deployment
spec:
replicas: 2
selector:
matchLabels:
app.kubernetes.io/name: foo-pod
template:
metadata:
labels:
app.kubernetes.io/name: foo-pod
spec:
containers:
- name: app
image: app:1.0.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
volumeMounts:
- name: app
mountPath: /go/src
02. overlaysディレクトリ¶
kustomize.yaml
ファイル¶
▼ kustomize.yaml
ファイルとは¶
overlays
ディレクトリ配下にあるファイルの処理方法を設定する。
▼ resources¶
使用するリソース定義ファイルを設定する。
*実装例*
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- ./patches/deployment.replicas.yaml
- ./patches/deployment.cpu_count.yaml
patches
ディレクトリ¶
▼ 差分リソース定義ファイル
¶
base
ディレクトリ配下のリソース定義ファイルとの差分の実装を設定する。
*実装例*
ここでは、Deploymentの差分を設定する。
.spec.replicas
キー以下はbase
ディレクトリ配下のリソース定義ファイルで宣言されていないため、追加処理が実行される。
apiVersion: apps/v1
kind: Deployment
metadata:
name: foo-deployment
spec:
replicas: 3
ここでは、Deploymentの差分を設定する。
.spec.template.spec.containers[*].resources
キー以下はbase
ディレクトリ配下のリソース定義ファイルで宣言されていないため、追加処理が実行される。
apiVersion: apps/v1
kind: Deployment
metadata:
name: foo-deployment
spec:
template:
spec:
containers:
- name: app
resources:
limits:
cpu: 7000m
03. プラグイン¶
プラグインとは¶
Kustomizeのプラグインには、GeneratorとTransformerの種類がある。
Generator (例:SecretGenerator、ConfigMapGenerator) のプラグインは、マニフェストを作成する。
一歩でTransformerは、マニフェストを部分的に書き換える。
設定¶
▼ 環境変数¶
プラグインをおくディレクトリを環境変数で定義する必要がある。
$ export XDG_CONFIG_HOME=$HOME/.config
$ export KUSTOMIZE_PLUGIN_HOME=$XDG_CONFIG_HOME/kustomize/plugin
▼ ディレクトリ¶
環境変数の値に応じて、ディレクトリは変わる。
デフォルトでは、$XDG_CONFIG_HOME/kustomize/plugin
ディレクトリ配下にプラグインをおく必要がある。
$ ls $XDG_CONFIG_HOME/kustomize/plugin
viaduct.ai/v1/ksops/ksops
KSOPS¶
▼ KSOPSとは¶
SOPSを使用して、復号化したデータをSecretにデータを注入する。
SOPSで使用できる暗号化キー (例:AWS KMS、Google Cloud CKM、GPG、PGPなど) をKSOPSでも使用できる。
▼ セットアップ¶
シェルスクリプトを使用して、KSOPSに関するバイナリーをインストールする。
SOPSは内蔵されており、不要である。
$ curl -s https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-ksops-archive.sh | bash
Helmとの比較¶
なお、どのような要件でもHelmを推奨する。
Kustomizeは、変数や条件分岐の柔軟性が低いため、マニフェストが増えるにつれて共通化が大変になる。
一方で、Helmは柔軟性が高く、共通化しやすい。