技術系TIPS
PR

【Kubernetes】Kustomizeでベースマニフェストの特定のリソースを削除する

saratogax
記事内に商品プロモーションを含む場合があります

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 以外の設定で無効化できるといいのですけどね。

patchesStrategicMerge は Kustomize5.0 から非推奨になっていて、今後は patches を使う必要があります。

kustomize/v5.0.0

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 のリソースを無効化することができました。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました