是否所有kubectl命令均需发送至master节点的kube-apiserver处理?
所有kubectl命令都需要经过master节点的kube-apiserver处理吗?
没错,所有kubectl的操作请求最终都会发送到集群的kube-apiserver。kubectl本质是Kubernetes API的官方客户端工具,它的全部功能都是通过调用kube-apiserver暴露的REST API实现的——不管是查询类操作(比如kubectl get pods)、资源创建/更新(kubectl apply)还是删除操作(kubectl delete),没有任何例外。以
kubectl get pods为例,请求的处理过程是怎样的?
执行kubectl get pods时,kubectl会先读取本地kubeconfig配置文件(默认路径是~/.kube/config),获取集群kube-apiserver的访问地址;接着构造对应的GET请求并发送到该地址。kube-apiserver收到请求后,会依次完成认证、授权、准入控制三步校验,确认请求合法后,直接从集群的etcd存储中读取Pod资源的相关数据,再把结果返回给kubectl;最后kubectl将返回的数据格式化后展示给用户。master节点上有专门的控制器负责监听这类请求吗?
不需要额外的控制器来处理kubectl的请求——kube-apiserver本身就是集群中负责接收并处理所有API请求的核心组件。它内置了完整的请求处理流水线,包含前面提到的校验逻辑,以及与etcd的交互逻辑。而Kubernetes中的各类控制器(比如Deployment控制器、StatefulSet控制器)的职责是维持资源的期望状态,它们本身也是kube-apiserver的客户端,通过调用API来获取资源信息、调整资源状态,和kubectl的角色是类似的。
内容的提问来源于stack exchange,提问作者jssteele89

