我想修补多个以相同名称前缀开始的部署,而不是针对特定资源。
例如,我有2个nginx部署deployment-v1.yaml和deployment-v2.yaml。我想用**nginx-**前缀打补丁。
deployment-v1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-v1
labels:
app: web
spec:
selector:
matchLabels:
app: web
replicas: 5
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: web
spec:
containers:
—name: nginx
image: nginx
ports:
—containerPort: 80
字符串
deployment-v2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: web
spec:
selector:
matchLabels:
app: web
replicas: 5
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: web
spec:
containers:
—name: nginx
image: nginx
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
ports:
—containerPort: 80
型
现在,我想用通用的overlay-patch覆盖这两个部署。我正在尝试这样的东西。
overlay.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
namePrefix: nginx-
spec:
replicas: 10
型
kustomization.yml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment-v1.yaml
- deployment-v2.yaml
patchesStrategicMerge:
- overlay.yaml
型
但它不工作,因为它期望一个名称匹配目标,并完全忽略namePrefix。任何帮助都是感激的。
1条答案
按热度按时间jhkqcmku1#
您可以在修补程序中使用
target
属性来执行apply a patch to multiple resources。根据您的示例(在修复了我在评论中指出的错误之后),我们可以编写如下的kustomization.yaml
:字符串
target
属性控制此修补程序将应用到哪些资源。在上述配置下,运行kustomize build
将导致:型
以及:
型
上述配置会将补丁程序应用于您的客户化中的 * 所有 * 部署。如果要将修补限制为仅与特定名称前缀匹配的部署,可以编写:
型
请注意,
name
模式是正则表达式,而不是shell样式的glob。“