我正在尝试更新自定义资源的状态子资源,但发现curl和kubectl patch
命令存在差异。当我使用curl调用时,它工作正常,但当我使用kubectl patch
命令时,它显示已修补,但使用no change
。以下是我使用的命令
使用 curl :
当我连接到kubectl proxy
并运行下面的curl调用时,它成功地更新了CR上的status子资源。
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是patch,但具有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)
但是当我在其他子资源上运行kubectl patch
时,比如spec
,它运行得很好。
1条答案
按热度按时间33qvvth11#
从kubectl v1.24开始,可以使用额外的标志(如
--subresource=status
)来修补子资源。该标志被视为“Alpha”,但不需要启用该功能。例如,使用yaml合并:
v1.24的Sysdig“新增功能”包含有关此标志的更多词汇:
一些kubectl命令,如get、patch、edit和replace,现在将包含一个新的标志--subresource=[subresource-name],它将允许获取和更新所有API资源的状态和缩放子资源。
现在可以停止使用复杂的curl命令直接更新子资源。
--subresource
标记计划在Kubernetes v1.27到KEP-2590: graduate kubectl subresource support to beta中升级为“Beta”。可以在#2590 Add subresource support to kubectl中跟踪此功能的生命周期。