让我们更深入地了解一下 Kubernetes 集群中发生的情况。
控制平面是集群的神经中枢,其中包含控制集群的组件,以及关于集群状态和配置的数据。这些核心的 Kubernetes 组件负责确保容器以足够的数量和必要的资源运行。
Kubernetes API(kube-apiserver)是 Kubernetes 控制平面的前端,用于处理内部和外部请求。API 服务器会确定请求是否有效,如果有效,则对其进行处理。您可以通过 REST 调用、kubectl 命令行界面或其他命令行工具(例如 kubeadm)来访问 API。
Kubernetes 调度程序(kube-scheduler)会考虑容器集的资源需求(例如 CPU 或内存)以及集群的运行状况。随后,它会将容器集安排到适当的计算节点。
控制器(kube-controller-manager)负责实际运行集群,而 Kubernetes 控制器管理器则是将多个控制器功能合而为一。控制器用于查询调度程序,并确保有正确数量的容器集在运行。如果有容器集停止运行,另一个控制器会发现并做出响应。
配置数据以及有关集群状态的信息位于 etcd(一个键值存储数据库)中。etcd 采用分布式、容错设计,被视为集群的最终事实来源。
为了运行容器,每个节点都有一个容器运行时引擎。比如 Docker,但 Kubernetes 也支持其他符合开放容器计划要求的运行时,例如 rkt 和 CRI-O。
每个节点中都包含一个 kubelet,这是一个与控制平面通信的微型应用。Kubelet 可确保容器在容器集内运行。当控制平面需要在节点中执行某个操作时,kubelet 就会执行该操作。
每个节点中还包含 kube-proxy,这是一个用于优化 Kubernetes 网络服务的网络代理。kube-proxy 负责处理集群内部或外部的网络通信,主要操作系统的数据包过滤层,或者自行转发流量。
除了管理运行应用的容器外,Kubernetes 还可以管理附加到集群的应用数据。Kubernetes 允许用户请求存储资源,而无需了解底层存储基础架构的详细信息。持久卷是集群(而非容器集)所特有的,因此其寿命可以超过容器集。
Kubernetes 所依赖的容器镜像存储于容器镜像仓库中。这个镜像仓库可以由您自己配置,也可以由第三方提供。
进一步了解 Kubernetes 架构