首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubectl补丁和无法修补资源的curl修补程序

Kubectl补丁和无法修补资源的curl修补程序
EN

Stack Overflow用户
提问于 2018-08-02 16:54:30
回答 1查看 3.4K关注 0票数 0

我试图向集群中的一个节点添加扩展资源。我从官方文档中跟踪了的任务

我已经一步一步地遵循了指令,但是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

我得到一个响应,并添加了扩展资源。

代码语言:javascript
复制
"capacity": {
  "cpu": "8",
  "example.com/dongle": "4",
  "memory": "8218052Ki",
  "pods": "110"
},

但是,如果我运行kubectl describe node kubernetes-3,容量就有旧的值:

Capacity: cpu: 8 memory: 8218052Ki pods: 110

我查过了所有的日志,一切看起来都很好:

代码语言:javascript
复制
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):

代码语言:javascript
复制
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版本输出:

代码语言:javascript
复制
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"}
EN

回答 1

Stack Overflow用户

发布于 2018-08-03 14:05:51

我在Kubernetes集群v1.11.1上尝试过

Curl版本运行良好,但在"get“输出上显示它需要一些时间(5-10秒):

代码语言:javascript
复制
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

命令

代码语言:javascript
复制
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 ]接受: application/json“-H”内容-Type:application/json-补丁+json“-H”用户-Agent: kubectl/v1.11.1 (linux/amd64 64) kubernetes/b1b2997“https://10.156.0.8:6443/api/v1/nodes/node-name

如果我们检查kubeclt代理连接上的类似请求:

这不管用:

代码语言:javascript
复制
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”,它最终运行得很好:

代码语言:javascript
复制
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'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51658734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档