一文看懂K8s的控制器和插件原理
很多人对下面这张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。通常运行在裸机集群上。
3.9 更多插件说明
四、总结
对于新手来说,理解k8s的运行原理不应该只停留在表层。更应该重点关注它的网络、通信、容器接口、存储接口实现逻辑是怎样的。这对于大型互联网公司,以及开发容器管理产品的科技企业,都非常关注这些模块的内部细节。
还有就是,研究Google在kubernetes产品上进化之路,发现这样大的公司也在拥抱开源,并不是每一个组件都是自己开发,很多也用到了现成的组件。
更多推荐


所有评论(0)