Kubectl警戒线和排水命令期间涉及哪些api?

时间:2019-07-24 18:30:52

标签: kubernetes kubectl

我正在使Kubernetes集群上的东西自动化,并且需要创建一个API来封锁节点。基本上,此API不应允许任何新的Pod进入封锁的节点。

我经历了下面的堆栈溢出讨论,但无法弄清楚束缚(然后耗尽)节点所需的API: How to access the Kubernetes API in Go and run kubectl commands

1 个答案:

答案 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。