我正在使Kubernetes集群上的东西自动化,并且需要创建一个API来封锁节点。基本上,此API不应允许任何新的Pod进入封锁的节点。
我经历了下面的堆栈溢出讨论,但无法弄清楚束缚(然后耗尽)节点所需的API: How to access the Kubernetes API in Go and run kubectl commands
答案 0 :(得分:2)
为了找出涉及特定kubectl命令的API,请使用带有标志--v=9
的kubectl,该标志显示向API服务器发出的HTTP请求及其响应(verbose mode)
kubectl cordon nodename
中涉及的API:GET /api/v1/nodes/node-name
PATCH /api/v1/nodes/node-name
在HTTP PATCH请求中,
Request Body: {"spec":{"unschedulable":true}}
Content-Type: "application/strategic-merge-patch+json"
在后台,Golang客户端将简单地进行类似的HTTP调用。请参阅here,以在golang客户端中发出HTTP PATCH请求。
kubectl drain <nodename> --ignore-daemonsets
中涉及的API:PATCH /api/v1/nodes/node-name -> Request Body: {"spec":{"unschedulable":true}}
GET /api/v1/pods?fieldSelector=spec.nodeName%3Dnode-name -> Get Podlist
POST /api/v1/namespaces/kube-system/pods/coredns-7b5c8bfcfc-s94bs/eviction
GET /api/v1/namespaces/kube-system/pods/coredns-7b5c8bfcfc-s94bs -> If API call returns 404 means Pod is successfully evicted.
基本上,执行命令drain,首先封锁节点,然后从该节点逐出Daemonset Pod。