翻訳

このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら

TL;DR
  • ベースの任意のリソースから任意のフィールドをカスタマイズする

リソースのフィールドをカスタマイズする

動機

ベースから任意のフィールドを修正したくなることがよくあります。たとえば Pod のリソース割り当て予約や Deployment のレプリカ数といったフィールドです。Overlay や patch を使うと、ベースのフィールドをバリエーションで上書きするようフィールドの値を設定できます。

Overlay によって任意のフィールドをカスタマイズする

ベースが提供するリソースに対して Overlay を与えると任意のフィールドを追加、変更、削除できます。 Overlay は疎なリソース定義であり、これを使うと、ベースがカスタマイズをテンプレートとして公開することなく、任意のカスタマイズを実行できます。

Overlay にはリソースを指定するためにグループ、バージョン、種類、名前を書く必要があります。 そこに、ベースリソースに設定する任意のフィールドを記述します。Overlay は StrategicMergePatch を使って適用されます。

ユースケース: 複数の環境 (test、dev、staging、canary、prod) で、replicas や resources といったフィールドを上書きします。

入力: kustomization.yaml ファイルと overlay

# kustomization.yaml
bases:
- ../base
patchesStrategicMerge:
- overlay.yaml
# overlay.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  # override replicas
  replicas: 3
  template:
    spec:
      containers:
      - name: nginx
        # override resources
        resources:
          limits:
            cpu: "1"
          requests:
            cpu: "0.5"

ベース:

# ../base/kustomization.yaml
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
        resources:
          limits:
            cpu: "0.2"
          requests:
            cpu: "0.1"

適用: クラスタに適用されるリソース

# Overlayed Base Resource
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  # replicas field has been added
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        # resources have been overridden
        resources:
          limits:
            cpu: "1"
          requests:
            cpu: "0.5"

Overlay のマージ意味論

Overlay はクラスタにリソース構成を Apply するのと同じマージの意味論を持ちます。一点違うのは、Overlay をマージする際には前回適用されたリソース構成はありません。そのため、そのため、フィールドが明示的に nil に設定されると、フィールドがただ削除されるという結果になります。

JsonPath による任意のフィールドのカスタマイズ

ベースが提供するリソースに対して、JSON Patch を与えることで任意のフィールドを追加、変更、削除できます。

ユースケース: 複数の環境 (test、dev、staging、canary、prod) で、replicas や resources といったフィールドを上書きします。

JSON Patch は RFC 6902 で定められ、リソースに適用されるパッチとなります。Patch はリソースを指定するために、Patch 本体に加えてグループ、バージョン、種類、名前が必要です。Patch はベースのリソースを修正するために多くのパワフルな命令的操作を提供します。

入力: kustomization.yaml ファイル

# kustomization.yaml
bases:
- ../base
patchesJson6902:
- target:
    group: apps
    version: v1
    kind: Deployment
    name: nginx-deployment
  path: patch.yaml
# patch.yaml
- op: add
  path: /spec/replicas
  value: 3
# ../base/kustomization.yaml
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

適用: クラスタに適用されるリソース

# Patched Base Resource
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  # replicas field has been added
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx

results matching ""

    No results matching ""