【发布时间】:2023-02-10 04:20:08
【问题描述】:
我正在尝试更新自定义资源的状态子资源,但发现 curl 和 kubectl patch 命令存在差异。当我使用 curl 调用时,它工作得很好,但是当我使用 kubectl patch 命令时,它说已修补但带有 no change。这是我使用的命令
使用卷曲:
当我连接到 kubectl proxy 并运行以下 curl 调用时,它成功并更新了我的 CR 上的状态子资源。
curl -XPATCH -H "Accept: application/json" -H "Content-Type: application/json-patch+json" --data '[{"op": "replace", "path": "/status/state", "value": "newState"}]' 'http://127.0.0.1:8001/apis/acme.com/v1alpha1/namespaces/acme/myresource/default/status'
kubectl 补丁命令:
使用 kubectl patch 表示 CR 是补丁但带有 no change 并且状态子资源已更新。
$ kubectl -n acme patch myresource default --type='json' -p='[{"op": "replace", "path": "/status/state", "value":"newState"}]'
myresource.acme.com/default patched (no change)
但是,当我对其他子资源(如 spec)执行 kubectl patch 时,它工作正常。我在这里错过了什么吗?
【问题讨论】:
-
状态子资源通常由控制器维护,可能无法通过 API 直接修改。
-
感谢您的回复,但我可以使用 curl 调用而不是 kubectl 补丁进行修改。 IIUC,它们都是一样的,一个有效,另一个无效
标签: kubernetes kubectl