首页 > 解决方案 > 在 kustomize 中修补特定资源

问题描述

我有一个基础资源,它在叠加层中导入,叠加层中的其他资源也来自相同的基础但具有不同的后缀。在叠加层中,需要对基础资源进行修补,而不会影响其他新创建的资源。然而,这三个人都变了。我怎样才能修改我打算修改的那个?

下面是一个例子。基本资源是具有 1 个副本的部署。在叠加层中,基础作为资源添加,但我尝试对其进行修补并将副本设置为 0。不幸的是,所有部署的所有副本都设置为 0。

根据

EX_HOME=$(mktemp -d)
BASE=$EX_HOME/base
mkdir $BASE

cat <<EOF >$BASE/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example
  labels:
    app: example
spec:
  replicas: 1
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
        - name: example
          image: alpine:latest
          command: ["sh","-c", "sleep 1h"]
EOF

cat <<EOF>$BASE/kustomization.yaml
resources:
- deployment.yaml
EOF

覆盖

OVERLAYS=$EX_HOME/overlays
mkdir -p $OVERLAYS/srv0
mkdir -p $OVERLAYS/srv1

cat <<EOF>$OVERLAYS/kustomization.yaml
resources:
  - svr0
  - svr1
  - ../base

patches:
  - patch: |-
      - op: replace
        path: /spec/replicas
        value: 0
    target:
      kind: Deployment
      group: apps
      version: v1
      name: example
EOF

cat <<EOF>$OVERLAYS/svr0/kustomization.yaml
resources:
  - ../../base
nameSuffix: -svr0
EOF

cat <<EOF>$OVERLAYS/svr0/kustomize.yaml
resources:
  - ../../base
nameSuffix: -svr1
EOF

标签: kuberneteskustomize

解决方案


以下应该工作。我冒昧地重新组织了一下目录结构以使其更清晰。由于您只更新副本计数,我还切换到副本转换器而不是补丁:

base/kustomization.yaml

resources:
  - deployment.yaml

overlays/svr0/kustomization.yaml

resources:
  - ../../base

nameSuffix: -svr0

overlays/svr1/kustomization.yaml

resources:
  - ../../base

nameSuffix: -svr1

`overlays/all/kustomization.yaml`:
```yaml
resources:
  - ../../base
  - ../svr0
  - ../svr1

replicas:
  - name: example-svr0
    count: 0
  - name: example-svr1
    count: 0

附带说明:有两种方法可以解决。replicas在这里,我在顶部添加了变压器。您也可以将其添加一次,overlays/svr0/kustomization.yaml然后再添加一次verlays/svr1/kustomization.yaml。如果这样做,变压器将变为:

replicas:
  - name: example
    count: 0

推荐阅读