-
server 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制。
-
kube-controller-manager 负责维护集群的状态,包括很多资源的控制器,是保证 Kubernetes 声明式 API 工作的大脑。
-
kube-scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的 Node 上;
而 Node 则是负责运行具体的容器,并为容器提供存储、网络等必要的功能:
-
kubelet 负责维持容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理;
-
Container runtime 负责镜像管理以及 Pod 和容器的真正运行。Kubelet 默认的容器运行时为 Docker;
-
kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡
-
Network plugin 也就基于 CNI(Container Network Internface)负责为容器配置网络。
除了这些核心的组件以外,Kubernetes 当然还包含了很多丰富的功能,这些都是通过扩展(Addon)的方式来部署的。比如 kube-dns 和 metrics-server 等,都是以容器的方式部署在集群里面,并提供 API 给其他组件调用。
提示:在 Kubernetes 中,通常你可以听到两种不同类型的扩展 Kubernetes 功能的方式:1) ***种是扩展(Addon),比如 dashboard、EFK、Prometheus、各种 Operator 等,这些扩展不需要 Kubernetes 提供标准的接口,但是都为 Kubernetes 增加了新的功能特性;2) 还有一种方式则是插件(Plugin),比如 CNI、CRI、CSI、Device Plugin 等,这些都是 Kubernetes 各个核心组件提供了标准的内置接口,而外部插件则是实现这些接口,从而将 Kubernetes 扩展到更多的用例场景中。
Kubelet 架构
刚才提到,Kubelet 负责维持容器的生命周期。除此之外,它也配合 kube-controller-manager 管理容器的存储卷,并配合 CNI 管理容器的网络。下面就是 Kubelet 的简单架构示意图:发现,Kubelet 也是有很多组件构成,包括
-
Kubelet Server 对外提供 API,供 kube-apiserver、metrics-server 等服务调用。比如 kubectl exec 需要通过 Kubelet API /exec/{token} 与容器进行交互。
-
Container Manager 管理容器的各种资源,比如 cgroups、QoS、cpuset、device 等。
-
Volume Manager 管理容器的存储卷,比如格式化磁盘、挂载到 Node 本地、***再将挂载路径传给容器。
-
Eviction 负责容器的驱逐,比如在资源不足时驱逐优先级低的容器,保证高优先级容器的运行。
-
cAdvisor 负责为容器提供 metrics 数据源。
-
Metrics 和 stats 提供容器和节点的度量数据,比如 metrics-server 通过 /stats/summary 提取的度量数据是 HPA 自动扩展的依据。
-
再向下就是 Generic Runtime Manager,这是容器运行时的管理者,负责跟 CRI 交互,完成容器和镜像的管理。
-
在 CRI 之下,包括两种容器运行时的实现
-
一个是内置的 dockershim,实现了 docker 容器引擎的支持以及 CNI 网络插件(包括 kubenet)的支持
-
另一个就是外部的容器运行时,用来支持 runc、containerd、gvisor 等外部容器运行时。
Kubelet 通过 CRI 接口跟外部容器运行时交互,而上图右侧就是 CRI 容器运行时的架构。它通常包括以下几个组件:
-
CRI Server,这是 CRI gRPC server,监听在 unix socket 上面。在讨论容器运行时的时候,这个 Server 也通常成为 CRI shim(夹在容器引擎和Kubelet之间的一层)。
-
Streaming Server,提供 streaming API,用在 Exec、Attach、Port Forward 等流式接口上。
-
容器和镜像的管理,比如拉取镜像、创建和启动容器等
-

(编辑:大同站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|