从 kubernetes-master 中删除 kube-apiserver(仅用于测试和理解)

Deleting kube-apiserver from kubernetes-master (just for testing and understanding)

从 kubernetes-master 中删除 kube-apiserver 不会阻止 kubectl 查询 pods。我一直明白,kube-apiserver是负责和master通信的。

我的问题:kubectl 如何在 kube-apiserver 仍在重启时仍然能够查询 pods?是否有任何官方文档涵盖此行为?

您的理解是正确的。 Kubernetes API 服务器验证并配置 api 对象的数据,其中包括 pods、服务、复制控制器等。 API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端,所有其他组件通过该状态进行交互。因此,如果您的 api-server pod 遇到一些问题,您将无法让您的客户端与其通信。

发生的事情是,当您删除 api-server pod 时,它会立即重新创建,因此您的客户端能够连接并获取数据。

为了提供一个示例,我通过摆弄 /etc/kubernetes/manifests:

中的 kube-apiserver.yaml 文件模拟了 api-server pod 故障
➜  manifests pwd                 
/etc/kubernetes/manifests

我立即无法再连接到 api-server:

➜  manifests kubectl get pods -A        
The connection to the server 10.128.15.230:6443 was refused - did you specify the right host or port?

在 docker 桌面中获取这些清单可能很棘手,具体取决于您 运行 它的位置。请查看 案例,其中答案显示了解决方案。