在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