1、概述
想要学习k8s的使用还是有必要学习一下k8s的架构。文章这个图是官网上k8s的架构图,这个架构展示了所有k8s的组件。Kubernetes架构可以分为两个主要部分:控制平面(Control Plane)和数据平面(Data Plane)。
控制平面和数据平面简单理解就是老板和员工的关系。老板负责指挥怎么干,员工就根据智慧干。
也可以拆开来理解。
- 控制: 管理和配置
- 数据:接流量过来处理
- 平面: 平面这个确实很抽象,从定义上来讲,只要是你的程序的逻辑术语控制管理类的功能都是平面。比如:你的领导就是你的控制平面,你就是数据平面。加入你也是领导,那么你是你下属的控制平面,你的下属是你的控制平面。你既是控制平面又是数据平面。
**控制平面(Control Plane)**是Kubernetes的大脑,负责集群的整体管理和协调。它由一系列守护进程(Daemon Processes)组成,运行在集群的每个节点上,并与其他组件进行通信,以实现集群的自动化管理。
**数据平面(Data Plane)**包含了运行在Kubernetes集群中的所有容器和应用程序。这些应用程序通过与控制平面的交互,实现自身的部署、扩展和管理。
说到k8s或者服务网格技术都必须聊一下控制平面和数据平面并不是新创造的术语,这两个术语在很早之前就在网络中使用了。
下面引用一下某百科Control Plane和Data Plane的科普:
Control Plane:
Data Plane
k8s的术语使用还是相当精准的,如果你网络路由这块的基础学的好,你还可以那网络的控制平面和数据平面做一个类比,比如:
-
建立网络拓扑: k8s控制平台记录了Pod、Service等组件的关系,他们在网络中的位置(也就是IP),然后记录了哪些Pod部署在了哪个节点
-
接入和丢弃数据包: 当有流量进入k8s集群,k8s会根据Service进行流量转发,转发给某一个Pod, 然而如果这个Service没有关联Pod,那就丢弃流量并报错。
-
优先处理某些数据包:在K8s中,控制平面有控制器管理器,其中各个控制器就类似于对特定操作进行优先处理的逻辑。例如,ReplicaSet控制器会确保目标数量的Pod副本始终在运行。
-
路由表与前向信息库: k8s中也会存储Service,EndPints,Pod等关联关系,并将这些信息存储在etcd中。
-
配置和关闭数据平面: 你使用k8s CLI或者其他客户端执行一个CUD命令时可能会配置数据平面。比如,当你通过kubectl应用一个Deployment时,API Server会接收到这个请求并进行处理。
2、控制平面(Control Plane)组件
控制平面是Kubernetes的核心,它由以下组件构成:
-
API Server:作为Kubernetes的大脑,API Server提供了RESTful API接口,用于与控制平面和数据平面的组件进行通信。它处理和验证所有传入请求,确保集群状态的一致性。
-
Scheduler:Scheduler负责在集群中调度和分配资源。它评估每个Pod的需求,并根据节点的可用资源、约束和策略,决定在哪个节点上运行Pod。
-
Controller Manager:Controller Manager是控制平面的协调者,负责维护集群的状态。它运行一系列控制器(Controllers),如ReplicaSet、Deployment等,以确保数据平面的状态与控制平面的期望状态一致。
-
etcd: 是控制平台的数据存储服务,所有需要存储的数据都会存储到etcd。
控制平面的组件使用这个命令查看。
kubectl get pods -n kube-system
COPY
大家注意哈,k8s架构图,除了Api Server其他组件都和etcd没有连接,这就表示要存取数据就得通过Api Server。大家可能担心这样Api Server会不会有瓶颈,这个问题k8s设计团队肯定考虑到了,所以他们把Api Server设计成无状态的了,横向扩展就好了。
3、数据平面(Data Plane)组件
数据平面包含了运行在Kubernetes集群中的应用程序和容器。这些组件通过与控制平面的交互,实现了自身的部署、扩展和管理。以下是一些常见的数据平面组件:
3.1.架构层
-
Node: Node是k8s中的工作节点,通常是由物理机或者虚拟机组成,据说Node还有另外一个名字:奴隶。
-
kubelet: kubelet是一个非常重要的角色,它用来管理和协调Pod以及Node。它的功能特性包括:Pod发布,资源管理,健康监控和Volume管理。总之:kubelet对Pod负责,可以理解为与计算和存储有关的内容都由kubelet来处理。
-
kube-proxy:既然kubelet是与计算和存储有关,那么kube-proxy就是与网络有关系,这样就组成了计算机的三个大方面:计算,存储和传输。kube-proxy这个组件的名字起的有点歧义,因为一般的proxy都是要接入流量正向或者反向代理的,但是kube-proxy不接流量,只负责管理网络相关的规则和变更。
3.2.应用层
应用层k8s提供了丰富(太多)的资源可以操作,先看看Dashboard的左侧导航栏就清楚了。
-
Pod:Pod是Kubernetes中的最小部署单元,包含一个或多个容器。它是应用程序在集群中的运行环境,提供了共享的存储、网络和运行环境。
-
Service:Service定义了Pod的访问方式,提供了负载均衡、服务发现和流量管理等功能。通过Service,我们可以将多个Pod组合成一个服务,并确保对服务的请求被正确地路由到相应的Pod上。
-
ReplicaSet和Deployment:ReplicaSet和Deployment是Kubernetes中的资源控制器,用于管理Pod的复制和部署。它们确保数据平面的状态与控制平面的期望状态一致,从而实现自动扩缩容和滚动更新等功能。
-
Ingress:Ingress提供了外部访问控制和路由功能,用于处理进入集群的流量。它可以将多个Service暴露到外部网络,并提供反向代理、SSL终止等扩展功能。
-
Storage:Kubernetes提供了强大的存储管理功能,支持持久化存储解决方案如Ceph、GlusterFS、NFS等。通过使用Persistent Volume和Persistent Volume Claim等资源,用户可以灵活地管理存储资源,确保应用程序的数据持久性。
-
....