【Kubernetes】Kustomizeでベースマニフェストの特定のリソースを削除する
Kubernetes で複数の環境を管理する場合、ベースとなる manifest を作成して、それを各環境で上書きするケースが多いと思います。
上書きはそれでいいのですが、特定のリソースを無効化したい場合はどうしたらいいのでしょうか。
今回は、特定のリソースを削除する方法を紹介します。
manifestのベース設定
例えば、manifest のベースファイルの kustomization.yaml で、以下のリソースを構成していると仮定します。
・ConfigMap
・Deployment
・HorizontalPodAutoscaler(HPA)
・PodDisruptionBudget(PDB)
・Service
CPU やメモリのリソース、環境変数などを上書きしたい場合は、各環境で Deployment の設定を上書きすればいいですよね。
apiVersion: apps/v1
kind: Deployment
metadata:
name: hoge
spec:
template:
spec:
containers:
- name: hoge
resources:
requests:
cpu: 1000m
memory: 1Gi
env:
- name: TARGET_SERVER
value: dev
特定のリソースを削除する
では、特定の環境だけ「PodDisruptionBudget(PDB)」の設定を外して挙動を確認してみたい場合などはどうするのが最適でしょうか。
パッとイメージするのは、上書きしている pdb.yaml の中の定義で打ち消す方法。
あとは kustomize.yaml の定義を駆使して pdb のリソースを無効化する方法でしょうか。
実現できるかどうかは別としてね・・・。
kustomize.yamlの定義を駆使する
まずは、kustomize.yaml の内容を見てみましょう。
namespace: test
bases:
- git@github.com:org/repository.git/manifests/hoge?ref=xxxxxx
patchesStrategicMerge:
- config-map.yaml
- deployment.yaml
- hpa.yaml
- pdb.yaml
base でベースマニフェスト側のリソースを使っているので、ここの定義だけでは pdb の設定を無効化するのは難しそう。
pdb.yaml を上書きしないだけでは、ベースの設定が使われるだけですからね。
patchesStrategicMerge 以外の設定で無効化できるといいのですけどね。
pdb.yamlの定義で打ち消す
では、個別のリソースの中で無効化は可能なのでしょうか。
どうやら、「$patch」を使えば実現できそうです。
試しに delete-pdb.yaml というファイルを、以下の内容で作成してみます。
$patch: delete
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: hoge
これを kustomize.yaml で読み込ませます。
namespace: test
bases:
- git@github.com:org/repository.git/manifests/hoge?ref=xxxxxx
patchesStrategicMerge:
- config-map.yaml
- deployment.yaml
- hpa.yaml
- delete-pdb.yaml
これで、無事に pdb のリソースを無効化することができました。