kubernetes - 在 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
解决方案
以下应该工作。我冒昧地重新组织了一下目录结构以使其更清晰。由于您只更新副本计数,我还切换到副本转换器而不是补丁:
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
推荐阅读
- sql - Postgres SQL 查询,返回带有 ID 作为动态键的 JSON 对象
- scala - 查找复杂类型
- flutter - Flutter iOS 14 在 Textformfield 复制粘贴上崩溃
- gradle - 如何在 Kotlin/Multiplatform 项目中使用 .klib 库
- json - JSONencoder 不保存新的编码 json 数组(iOS)
- flutter - 颤振 beta 通道 ListView.builder 错误
- arrays - 井字游戏,如何将 2D 游戏板阵列与网格链接?
- spring-cloud - HystrixCommand 的奇怪行为
- azure-active-directory - 将 claimMappingPolicy 分配给 servicePrincipal 给出错误?
- node.js - 使用 useEffect() 时超出最大深度反应错误