use*_*964 6 kubernetes kubectl
我正在尝试更新自定义资源的状态子资源,但发现curl 和kubectl patch命令存在差异。当我使用 curl 调用时,它工作得很好,但是当我使用kubectl patch命令时,它说 patched but with 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'
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
但是,当我kubectl patch对其他子资源执行此操作时spec,效果很好。我在这里错过了什么吗?
小智 8
从 kubectl v1.24 开始,可以使用附加标志(例如 )来修补子资源--subresource=status。该标志被视为“Alpha”,但不需要启用该功能。
例如,使用 yaml 合并:
kubectl patch MyCrd myresource --type=merge --subresource status --patch 'status: {healthState: InSync}'
Run Code Online (Sandbox Code Playgroud)
Sysdig “有什么新鲜事?” v1.24包含有关此标志的更多内容:
一些 kubectl 命令(例如 get、patch、edit 和 Replace)现在将包含一个新标志 --subresource=[subresource-name],它将允许获取和更新所有 API 资源的状态和规模子资源。
您现在可以停止使用复杂的curl命令直接更新子资源。
该--subresource标志计划通过KEP-2590 在 Kubernetes v1.27 中升级为“Beta”:将 kubectl 子资源支持升级为 beta。该功能的生命周期可以在#2590 Add subresource support to kubectl中跟踪。
| 归档时间: |
|
| 查看次数: |
4620 次 |
| 最近记录: |