一、控制平面组件
控制平面的组件对集群做出全局决策(例如,调度),并且检测和响应集群事件(例如,当一个 Deployment 副本数量不满足要求时启动一个新的 Pod)。 控制平面组件可以在集群中的任何机器上运行。然而,为了简单起见,安装脚本通常会在同一台 机器上启动所有控制平面组件,并且不在这台机器上运行用户容器。

1.kube-apiserver(Kubernetes API 服务器)
API 服务器是Kubernetes 控制平面的一个组件,用于暴露Kubernetes API。它是Kubernetes 控制平面的前端。
- API server是K8S的大脑,提供6443端口,用于集群管理。
Kubernetes API 服务器的主要实现是kube-apiserver。kube-apiserver 被设计为可以水平扩展, 即通过部署更多实例来扩展,这样就可以运行多个kube-apiserver例,并在这些实例之间平衡流量。
2.etcd
etcd作为 Kubernetes 所有集群数据的后端存储,是一个一致的、高可用的键值存储系统,是 Kubernetes 所有集群数据的后台数据库。
3.kube-scheduler(调度器)
kube-scheduler 会监视新创建的、尚未分配节点的Pod,并为它们选择一个运行节点。 在调度决策中考虑的因素包括:单个和总体资源需求、硬件/软件/策略约束、亲和性和反亲和性 规范、数据局部性、工作负载间的干扰以及期限。
4.kube-controller-manager(控制器管理器)
这是一个运行控制器进程的控制平面组件。 从逻辑上讲,每个控制器是一个独立的进程,但为了降低复杂性,它们都被编译到一个二进制文 件中,并在一个进程中运行。 有许多不同类型的控制器。以下是一些示例:
• 节点控制器:负责在节点出现故障时察觉并做出响应。
• Job 控制器:监视代表一次性任务的工作对象,然后创建Pod来运行这些任务直至完成。
• EndpointSlice 控制器:填充端点切片对象(用于在Service和Pod之间建立连接)。
• ServiceAccount 控制器:为新的命名空间创建默认的服务账户。
5.cloud-controller-manager(云控制器管理器)
这是一个 Kubernetes 控制平面组件,它嵌入了特定于云的控制逻辑。云控制器管理器允许你将 集群与云提供商的API连接起来,并将与云平台交互的组件与仅与集群交互的组件区分开来。
注意:云控制器管理器只运行特定于你的云提供商的控制器。如果在本地环境运行Kubernetes, 或者在自己的个人电脑内的学习环境中运行,集群通常没有云控制器管理器
二、节点组件
节点组件在每个节点上运行,负责维护正在运行的 Pod,并提供 Kubernetes 运行时环境。
1**、kubelet(Kubernetes代理)-->一个服务**
kubelet 是运行在集群中每个节点上的代理程序。它确保容器在 Pod 中正常运行。
kubelet 获取通过各种机制提供的一组 Pod 规范(PodSpecs),并确保这些 Pod 规范中描述的容器正在运行且处于健康状态。kubelet 不管理非由 Kubernetes 创建的容器。
2**、kube-proxy(可选组件)**
kube-proxy 是一个网络代理,运行在集群的每个节点上,用于实现 Kubernetes 服务概念的一部分功能。
kube-proxy 维护节点上的网络规则。这些网络规则允许集群内外的网络会话与 Pod 进行通信。
如果操作系统存在可用的数据包过滤层,kube-proxy 就会使用它;否则,kube-proxy 会自行转发流量。
如果使用了自行实现服务数据包转发并提供与 kube-proxy 等效功能的网络插件,那么就无需在集群的节点上运行 kube-proxy。
**注意:**有些网络插件会提供它们自己的第三方代理实现方式,当使用这类网络插件时,节点就无
需运行 kube-proxy 组件。
3**、容器运行时(CRI)**
这是一个基础组件,使 Kubernetes 能够有效地运行容器。它负责管理 Kubernetes 环境中容器的执行和生命周期。
Kubernetes 支持诸如 containerd、CRI-O 以及任何其他符合 Kubernetes 容器运行时接口(CRI)规范的容器运行时实现
三、插件
插件使用 Kubernetes 资源(如守护进程集(DaemonSet)、部署(Deployment)等)来实现集群功能。由于这些插件提供的是集群级别的功能,所以插件的命名空间资源属于 kube-system 命名 空间。常用的插件举例如下:
1**、网络与网络策略**
• Calico 是一种网络及网络策略提供程序。Calico 支持一组灵活的网络选项,这样就能针对自
身情况选择最高效的选项,包括非覆盖式网络和覆盖式网络,支持使用或不使用边界网关协
议(BGP)。Calico 使用相同的机制来为主机、Pod(容器组)以及(如果使用 Istio 和 Envoy
的话)服务网格层的应用程序实施网络策略。
• Flannel 是一种覆盖式网络提供程序,可与 Kubernetes 配合使用。
• Gateway API(网关应用程序编程接口)是一个由 SIG Network(网络特别兴趣小组)社区管理的开源项目,它提供了一种表意丰富、可扩展且面向角色的应用程序编程接口,用于对服务网络进行建模。
2**、服务发现**
• CoreDNS 是一款灵活且可扩展的域名系统(DNS)服务器,可被安装作为 Pod 的集群内 DNS。
3**、可视化与控制**
• Dashboard 是 Kubernetes 的一个网页界面形式的控制台。提供了面向 Kubernetes 集群的通用型、基于网页的用户界面。它允许用户管理在集群中运行的应用程序、对这些应用程序进行故障排查,以及对集群本身进行管理。
4**、基础设施**
• KubeVirt 是一个可在 Kubernete 上运行虚拟机的插件,它可将虚拟机直接部署在物理服务器 (裸金属)上,而不是运行在虚拟化环境中,从而提供更高的性能和更直接的硬件访问,适合运行对性能要求较高的虚拟机。
Kubernetes 架构的灵活性使得各企业能够根据特定需求定制自己的集群,在操作复杂性、性能以及管理开销等因素之间进行权衡。