kubernetes - Kubectl 补丁和 curl 补丁无法修补资源
问题描述
我尝试将扩展资源添加到集群中的一个节点。我遵循了这个任务,来自官方文档
我一步一步地按照说明进行操作,但PATCH
似乎没有效果。
运行后:
curl --header "Content-Type: application/json-patch+json" --request PATCH --data '[{"op": "add", "path": "/status/capacity/example.com~1dongle", "value": "4"}]' http://localhost:8001/api/v1/nodes/kubernetes-3/status
我得到了回复,增加了扩展资源
"capacity": {
"cpu": "8",
"example.com/dongle": "4",
"memory": "8218052Ki",
"pods": "110"
},
但是,如果我运行kubectl describe node kubernetes-3
容量具有旧值:
Capacity:
cpu: 8
memory: 8218052Ki
pods: 110
我检查了 apiserver 日志,一切看起来都不错:
PATCH /api/v1/nodes/kubernetes-3/status: (39.112896ms) 200 [[curl/7.59.0] 127.0.0.1:49234]
但是,如果我使用该kubectl patch
命令,该命令将返回node "kubernetes-3" not patched
我运行的命令:kubectl patch node kubernetes-3 --type='json' -p '[{"op": "add", "path": "/status/capacity/example.com~1dongle", "value": "4"}]'
同样,apiserver 日志显示响应成功(状态200
):
PATCH /api/v1/nodes/kubernetes-3: (4.831866ms) 200 [[kubectl/v1.8.0+coreos.0 (linux/amd64) kubernetes/a65654e] 127.0.0.1:50004]
kubectl 版本输出:
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0+coreos.0", GitCommit:"a65654ef5b593ac19fbfaf33b1a1873c0320353b", GitTreeState:"clean", BuildDate:"2017-09-29T21:51:03Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0+coreos.0", GitCommit:"a65654ef5b593ac19fbfaf33b1a1873c0320353b", GitTreeState:"clean", BuildDate:"2017-09-29T21:51:03Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
解决方案
我在 Kubernetes 集群 v1.11.1 上试过
Curl 版本运行良好,但需要一些时间(5-10 秒)才能在“get”输出中显示:
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "add", "path": "/status/capacity/example.com~1dongle", "value": "2"}]' \
http://localhost:8001/api/v1/nodes/node-name/status
kubectl get node node-name -o yaml
...
capacity:
cpu: "2"
ephemeral-storage: 20263528Ki
example.com/dongle: "2"
example2.com/dongle: "4"
example3.com/dongle: "4"
example4.com/dongle: "4"
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 7652316Ki
pods: "110"
...
kubectl 版本仍然不起作用,但我猜是因为它请求了错误的地址/api/v1/nodes/node-name
,而不是/api/v1/nodes/node-name/status
命令
kubectl -v=9 patch node/node-name --type='json' -p='[{"op": "add", "path": "/status/capacity/example.com-dongle", "value": "6"}]'
给了我日志:
I0803 13:08:38.552155 694 round_trippers.go:386] curl -k -v -XPATCH -H“接受:应用程序/json”-H“内容类型:应用程序/json-patch+json”-H“用户代理: kubectl/v1.11.1 (linux/amd64) kubernetes/b1b2997" ' https://10.156.0.8:6443/api/v1/nodes/node-name '
如果我们检查 kubeclt 代理连接上的类似请求:
它不起作用:
curl -XPATCH -H "Accept: application/json" -H "Content-Type: application/json-patch+json" -H "User-Agent: kubectl/v1.11.1 (linux/amd64) kubernetes/b1b2997" --data '[{"op": "add", "path": "/status/capacity/example4.com~1dongle", "value": "4"}]' \
'http://127.0.0.1:8001/api/v1/nodes/node-name'
但最终使用“/status”效果很好:
curl -XPATCH -H "Accept: application/json" -H "Content-Type: application/json-patch+json" -H "User-Agent: kubectl/v1.11.1 (linux/amd64) kubernetes/b1b2997" --data '[{"op": "add", "path": "/status/capacity/example4.com~1dongle", "value": "4"}]' \
'http://127.0.0.1:8001/api/v1/nodes/node-name/status'
推荐阅读
- amazon-web-services - 使用 AWS CloudHSM 和 osslsigncode 在 Linux 上签署 Windows PE?
- python - 星图,starmap_async python
- c - XCreateImage 预期 char* 而不是 unsigned int*
- docker - 如何访问由于文件错误而退出的 wacore 容器 - “/opt/whatsapp/bin/wait_on_postgres.sh”
- python - 如何获取字典中与键匹配的值的平均值并将其输出到另一个字典
- flutter - 有没有办法查出用户是否在线
- python - 雪问题 - 存储变量时出错
- javascript - React Native webview 在可选检查时崩溃
- java - 在选项卡上添加假玩家
- ios - 当用户快速将屏幕从纵向更改为横向时,如何使滚动视图内的 UIView 适应屏幕方向