poc*_*ers 11 arrays containers patch kubernetes kustomize
我正在尝试查看是否有一种方法可以将 kustomize patchTransformer 应用到 pod 中的特定容器,而不是使用其数组索引。例如,如果我的 pod 中有 3 个容器 (0, 1, 2),并且我想修补容器“1”,我通常会执行以下操作:
patch: |-
- op: add
path: /spec/containers/1/command
value: ["sh", "-c", "tail -f /dev/null"]
Run Code Online (Sandbox Code Playgroud)
这在很大程度上取决于集装箱订单保持静态。如果容器“1”由于某种原因被删除,数组将被重新洗牌,容器“2”突然变成容器“1”,使我的补丁不再适用。
有没有办法按名称修补,或定位标签/注释,或其他机制?
path: /spec/containers/${NAME_OF_CONTAINER}/command
Run Code Online (Sandbox Code Playgroud)
任何见解都将受到高度赞赏。
Zev*_*ert 15
您可能已经在互联网上看到过这样的JSONPath语法,并希望您可以选择一个列表项并使用 Kustomize 对其进行修补。
/spec/containers[name=my-app]/command
Run Code Online (Sandbox Code Playgroud)
正如 @Rico 在他的回答中提到的:这是JSON6902的限制- 它只接受使用JSONPointer语法的路径,由JSON6901定义。
[key=value]因此,不,当前在使用 kustomize 时无法使用语法来处理列表项patchesJson6902。
然而,围绕处理列表项顺序更改的原始问题中提出的问题确实有一个使用JSONPointer语法 (JSON6901) 的解决方案,而无需转移到战略合并补丁(这可能取决于 CRD 作者正确注释列表项合并应该如何进行)被应用)。
只需将另一个 JSON6902 操作添加到您的补丁中,即可使test该项目保留在您指定的索引处。
# First, test that the item is still at the list index you expect
- op: test
path: /spec/containers/0/name
value: my-app
# Now that you know your item is still at index-0, it's safe to patch its command
- op: replace
path: /spec/containers/0/command
value: ["sh", "-c", "tail -f /dev/null"]
Run Code Online (Sandbox Code Playgroud)
test如果指定路径中的值与提供的值不匹配,则操作将使您的补丁失败。这样,您可以确保其他修补操作对项目索引的依赖仍然有效!
我特别在处理自定义资源时使用这个技巧,因为我:
"x-kubernetes-patch-merge-key": "name"来确保列表项上的战略合并补丁按照我需要的方式工作。这更多是Json6902补丁的限制,加上容器在 K8s pod 中被定义为数组而不是哈希,这样的东西可以工作:
\npath: /spec/containers/${NAME_OF_CONTAINER}/command\nRun Code Online (Sandbox Code Playgroud)\n您可以尝试使用StrategyMergePatch。这本质上kubectl apply是什么。
cat <<EOF > deployment.yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: my-app\nspec:\n selector:\n matchLabels:\n run: my-app\n replicas: 2\n template:\n metadata:\n labels:\n run: my-app\n spec:\n containers:\n - name: my-container\n image: myimage\n ports:\n - containerPort: 80\nEOF\nRun Code Online (Sandbox Code Playgroud)\ncat <<EOF > set_command.yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: my-nginx\nspec:\n template:\n spec:\n containers:\n - name: my-app\n command: ["sh", "-c", "tail -f /dev/null"]\nEOF\nRun Code Online (Sandbox Code Playgroud)\ncat <<EOF >./kustomization.yaml\nresources:\n- deployment.yaml\npatchesStrategicMerge:\n- set_command.yaml\nEOF\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x9c\x8c\xef\xb8\x8f
\n| 归档时间: |
|
| 查看次数: |
13925 次 |
| 最近记录: |