3

我正在尝试查看是否有一种方法可以将 kustomize patchTransformer 应用于 pod 中的特定容器,而不是使用其数组索引。例如,如果我在一个 pod 中有 3 个容器 (0, 1, 2),并且我想修补容器“1”,我通常会执行以下操作:

patch: |-
  - op: add
    path: /spec/containers/1/command
    value:  ["sh", "-c", "tail -f /dev/null"]

这在很大程度上取决于容器订单保持不变。如果容器“1”由于某种原因被删除,则数组会重新洗牌,容器“2”突然变成容器“1”,使我的补丁不再适用。

有没有办法按名称打补丁,或以标签/注释为目标,或其他机制?

path: /spec/containers/${NAME_OF_CONTAINER}/command

非常感谢任何见解。

4

1 回答 1

1

这更像是一个Json6902补丁限制,以及容器在 K8s pod 中定义为数组而不是像这样可以工作的哈希的事实:

path: /spec/containers/${NAME_OF_CONTAINER}/command

你可以试试StrategicMergePatch。这基本上是做什么kubectl apply的。

cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  selector:
    matchLabels:
      run: my-app
  replicas: 2
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - name: my-container
        image: myimage
        ports:
        - containerPort: 80
EOF
cat <<EOF > set_command.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  template:
    spec:
      containers:
      - name: my-app
        command: ["sh", "-c", "tail -f /dev/null"]
EOF
cat <<EOF >./kustomization.yaml
resources:
- deployment.yaml
patchesStrategicMerge:
- set_command.yaml
EOF

✌️

于 2020-09-16T22:08:53.330 回答