在Kustomize(v5.2)中,可以通过patches参数指定多个资源文件

你好,我是Intimate Merger的Fukuda。
这次的文章是关于Kustomize的patches。

简而言之

⭐️自从Kustomize v5.2起,可以通过补丁文件指定多个资源文件了⭐️

自 Kustomize v5.0 版本开始,patchesStrategicMerge 和 patchesJson6902 已被弃用。
推荐使用 patches 作为替代。
然而,在 v5 版本的发布中,并未完全支持迁移到 patches 的功能。
现在终于有了支持,并可以顺利迁移,我们在这里分享一下!

提供额外的信息

    • 現在のKustomizeのAPIバージョンはkustomize.config.k8s.io/v1beta1

patchesStrategicMergeとpatchesJson6902は非推奨機能として残っています

kustomize.config.k8s.io/v1で非推奨機能は削除される予定

kustomize/v5以降のメジャーバージョンアップで、APIバージョンがkustomize.config.k8s.io/v1に更新

詳しくはKustomize/v5.0のDeprecationsをご覧ください

准备文件

文件结构

manifests
├── deployment.yaml
├── deployment_patches.yaml
└── kustomization.yaml

每个文件的说明

kustomization.yaml是一个包含管理资源的清单文件。

kustomization.yaml(patchesStrategicMerge)

patchesStrategicMergeを使ってマージ

kustomization.yaml(patches)

patchesを使ってマージ

deployment.yaml

下記のリソースを作成するためのマニフェスト

nginx-deployment-1
nginx-deployment-2

deployment_patches.yaml

deveployment.yamlのリソースにマージ
マージによるリソースの変更点

nginx-deployment-1にポート81を生やす

nginx-deployment-2のレプリカ数を2→10に増やす

kustomization.yaml文件中的(patchesStrategicMerge)。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
patchesStrategicMerge:
- deployment_patches.yaml

kustomization.yaml(补丁)

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
patches:
- path: deployment_patches.yaml

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-1
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-2
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 80

部署补丁.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-1
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 81
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-2
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 10
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 80

让我们实际尝试一下

使用的Kustomize版本进行验证为v5.1.1和v5.2.1。

在Kustomize v5.2版本以下,如果使用pathes来合并多个资源文件,会发生错误。
为了解决这个问题,需要使用已弃用功能的patchesStrategicMerge。

期待着输出

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-1
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 81
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-2
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 10
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 80

Kustomize 版本5.1.1

使用 kustomization.yaml 的 patches

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
patches:
- path: deployment_patches.yaml

构建时会出现错误。
有关此错误的问题已被提出。
似乎patches无法与多资源文件兼容。

$ kustomize build manifests
Error: trouble configuring builtin PatchTransformer with config: `
path: deployment_patches.yaml
`: unable to parse SM or JSON patch from [apiVersion: apps/v1
                (マニフェストの内容なので省略)
]

使用kustomization.yaml的patchesStrategicMerge。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
patchesStrategicMerge:
- deployment_patches.yaml

您可以使用不推荐使用的patchesStrategicMerge功能来避免上述错误。当您进行构建时,会显示patchesStrategicMerge的不推荐警告和预期输出。

$ kustomize build manifests
# Warning: 'patchesStrategicMerge' is deprecated. Please use 'patches' instead. Run 'kustomize edit fix' to update your Kustomization automatically.
(期待される出力が表示)

这是使用Kustomize v5.2以下版本来构建多资源文件的方法。

Kustomize版本5.2.1

Kustomize v5.2 已经包含了修正上述错误的PR。

使用kustomization.yaml文件中的“patches”。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
patches:
- path: deployment_patches.yaml

建立时会显示预期输出。

$ kustomize build manifests
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-1
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 81
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-2
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 10
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24.0
        ports:
        - containerPort: 80

总结

现在可以使用补丁来实现多资源文件的使用?。

我们公司一直对使用不推荐功能感到不爽。
本次的漏洞修复让我们能够心情舒畅地进行开发?

由于patchesStrategicMerge已经不推荐使用,我们应该转移到patches!!!

附言

感谢您阅读。以上是关于Kustomize(v5.2)的补丁的文章。

如果您能继续阅读圣诞日历的文章,我会很高兴。
下一篇文章似乎是关于诗歌的。

 

以下是中文的同义表达:

参考如下

    • https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.0.0

 

    • https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.2.0

 

    • https://github.com/kubernetes-sigs/kustomize/issues/5040

 

    https://github.com/kubernetes-sigs/kustomize/pull/5194
bannerAds