很多人对下面这张k8s架构图再也熟悉不过了,这七大组件的功能想必都了然于胸。如果这些组件的能力和实现原理再深究一层,我相信很多人都不太清楚了。

一、K8s 的集群架构

所有架构和系统,都可以分为控制面和工作节点。k8s调度平台的架构设计也不例外,如果你是经验丰富的架构师,在任何系统设计中这是最基础的要素。

以上7个模块,本节主要带大家重点认识藏在背后真正运行的插件和组件。

二、K8s 的控制器构成

拿k8s的控制器来说:实际运行多种对象类比的控制器,本应该是多个进程,但程序是编译在一个进程中了。

“作为设计原则之一,Kubernetes 使用了很多控制器,每个控制器管理集群状态的一个特定方面。 最常见的一个特定的控制器使用一种类型的资源作为它的期望状态, 控制器管理控制另外一种类型的资源向它的期望状态演化。 ”

例如,Job 的控制器跟踪 Job 对象(以发现新的任务)和 Pod 对象(以运行 Job,然后查看任务何时完成)。 在这种情况下,新任务会创建 Job,而 Job 控制器会创建 Pod。

说明:

可以有多个控制器来创建或者更新相同类型的对象。 在后台,Kubernetes 控制器确保它们只关心与其控制资源相关联的资源。

例如,你可以创建 Deployment 和 Job;它们都可以创建 Pod。 Job 控制器不会删除 Deployment 所创建的 Pod,因为有信息 (标签)让控制器可以区分这些 Pod。

控制器有许多不同类型。以下是一些例子

• Node 控制器:负责在节点出现故障时进行通知和响应
• Job 控制器:监测代表一次性任务的 Job 对象,然后创建 Pod 来运行这些任务直至完成
• EndpointSlice 控制器:填充 EndpointSlice 对象(以提供 Service 和 Pod 之间的链接)。
ServiceAccount 控制器:为新的命名空间创建默认的 ServiceAccount。

三、k8s的插件

Add-on 扩展了 Kubernetes 的功能。一些功能是第三方项目,Kubernetes 项目作者并不负责这些项目。

3.1 Calico 

一个联网和网络策略供应商。 Calico 支持一套灵活的网络选项,因此你可以根据自己的情况选择最有效的选项,包括非覆盖和覆盖网络,带或不带 BGP。 Calico 使用相同的引擎为主机、Pod 和(如果使用 Istio 和 Envoy)应用程序在服务网格层执行网络策略。

3.2 Dashboard

Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身,并进行故障排除。

3.3 cloud-controller-manager

cloud-controller-manager 组件是基于一种插件机制来构造的, 这种机制使得不同的云厂商都能将其平台与 Kubernetes 集成。

3.4 Flannel

Flannel 是一个可以用于 Kubernetes 的 overlay 网络提供者。https://github.com/flannel-io/flannel#deploying-flannel-manually

3.5  CoreDNS

CoreDNS 是一种灵活的,可扩展的 DNS 服务器,可以 安装为集群内的 Pod 提供 DNS 服务。

3.6 kube-state-metrics

 一个名为 kube-state-metrics 的插件代理可以连接到 Kubernetes API 服务器并公开一个 HTTP 端点,提供集群中各个对象的状态所生成的指标。 此代理公开了关于对象状态的各种信息,如标签和注解、启动和终止时间、对象当前所处的状态或阶段。

例如,针对运行在 Pod 中的容器会创建一个 kube_pod_container_info 指标。 其中包括容器的名称、所属的 Pod 的名称、Pod 所在的命名空间、 容器镜像的名称、镜像的 ID、容器规约中的镜像名称、运行中容器的 ID 和用作标签的 Pod ID。

3.7 Terway

Terway 是一套基于阿里云 VPC 和 ECS 网络产品的 CNI 插件,能够在阿里云环境中提供原生的 VPC 网络和网络策略支持。

3.8 KubeVirt

KubeVirt 是可以让 Kubernetes 运行虚拟机的 add-on。通常运行在裸机集群上。

https://kubevirt.io/user-guide/#/installation/installation

3.9 更多插件说明

https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/addons/https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/addons/

四、总结

对于新手来说,理解k8s的运行原理不应该只停留在表层。更应该重点关注它的网络、通信、容器接口、存储接口实现逻辑是怎样的。这对于大型互联网公司,以及开发容器管理产品的科技企业,都非常关注这些模块的内部细节。

还有就是,研究Google在kubernetes产品上进化之路,发现这样大的公司也在拥抱开源,并不是每一个组件都是自己开发,很多也用到了现成的组件。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐