背景 链接到标题 之前写过一篇 《Kubernetes 实战-平滑移除节点》 讲如何从 K8s 集群中移除节点的,今天来看看 kubectl drain 命令具体做了什么,怎么实现的。
kubectl 链接到标题 drain 相关命令都属于 kubectl 的自命令,因此需要先看下 kubectl 的入口,K8s 使用 cobra 作为命令行构建组建(我自己使用 cobra 觉得不怎么好用,而且文档也不清晰。。),统一入口在 cmd/kubectl/kubectl.go ,实际的处理逻辑在 pkg/kubectl/cmd/cmd.go 中
... groups := templates.CommandGroups{ { Message: "Basic Commands (Beginner):", ... }, { Message: "Deploy Commands:", ... }, { Message: "Cluster Management Commands:", Commands: []*cobra.Command{ certificates.NewCmdCertificate(f, ioStreams), clusterinfo.NewCmdClusterInfo(f, ioStreams), top.NewCmdTop(f, ioStreams), drain.NewCmdCordon(f, ioStreams), drain.NewCmdUncordon(f, ioStreams), drain.NewCmdDrain(f, ioStreams), taint.NewCmdTaint(f, ioStreams), }, }, ... } groups.