云计算:Kubernetes集群组件

Kubernetes集群组件

一个典型的Kubernetes 集群由多个工作节点( worker node )和一个集群控制平面(control plane ,即Master ),以及一个集群状态存储系统( etcd )组成。

其中Master 节点负责整个集群的管理工作,为集群提供管理接口, 并监控和编排集群中的各个工作节点。各节点负责以Pod 的形式运行容器,因此,各节点需要事先配置好容器运行依赖到的所有服务和资源,如容器运行时环境等。

Kubernetes 的系统架构如图1-1 l 所示。

Master 节点主要由apiserver 、controller-manager 和scheduler 三个组件,以及一个用于集群状态存储的etcd 存储服务组成,而每个No de 节点则主要包含ku belet 、kube-proxy 及

容器引擎( Docker 是最为常用的实现) 等组件。此外, 完整的集群服务还依赖于一些附加组件,如KubeDNS 等。


云计算:Kubernetes集群组件

Master 组件

Kubernetes 的集群控制平面由多个组件组成,这些组件可统一运行于单一Master 节点,

也可以以多副本的方式同时运行于多个节点,以为Master 提供高可用功能,甚至还可以运

行于Kubernetes 集群自身之上。Master 主要包含以下几个组件。

( 1 ) API Server

API Server 负责输出RESTful风格的Kubemetes API ,它是发往集群的所有REST操作命令的接人点,并负责接收、校验并响应所有的阻ST 请求,结果状态被持久存储于etcd中。因此, API Server 是整个集群的网关。

( 2 )集群状态存储( Cluster State Store)

Kubemetes 集群的所有状态信息都需要持久存储于存储系统etcd 中, 不过, etcd 是由CoreOS 基于Raft 协议开发的分布式键值存储,可用于服务发现、共享配置以及一致性保障(如数据库主节点选择、分布式锁等) 。因此, etcd 是独立的服务组件,并不隶属于Kubernetes 集群自身。生产环境中应该以etcd 集群的方式运行以确保其服务可用性。

etcd 不仅能够提供键值数据存储,而且还为其提供了监昕( watch )机制,用于监听和推送变更。Kubernetes 集群系统中, etcd 中的键值发生变化时会通知到API Server ,并由其通过watchAPI 向客户端输出。基于watch 机制, Kubernetes 集群的各组件实现了高效协同。

( 3 )控制器管理器( Controller Manager)

Kubernetes 中, 集群级别的大多数功能都是由几个被称为控制器的进程执行实现的,这几个进程被集成于kube- controller-manager 守护进程中。由控制器完成的功能主要包括生命周期功能和API 业务逻辑,具体如下。

l 生命周期功能:包括Names pace 创建和生命周期、Eve nt 垃圾回收、Pod 终止相关的垃圾回收、级联垃圾回收及Node 垃圾回收等。

l API 业务逻辑:例如,由ReplicaSet 执行的Pod 扩展等。

( 4 )调度器( Scheduler)

Kubernetes 是用于部署和管理大规模容器应用的平台,根据集群规模的不同, 其托管运行的容器很可能会数以千计甚至更多。API Server 确认Pod 对象的创建请求之后,便需要由Scheduler 根据集群内各节点的可用资源状态,以及要运行的容器的资源需求做出调度决策,其工作逻辑如图1-12 所示。另外, Kubernetes 还支持用户自定义调度器。


云计算:Kubernetes集群组件

Node 组件

Node 负责提供运行容器的各种依赖环境,并接受Master 的管理。每个Node 主要由以

下几个组件构成。

Node 负责提供运行容器的各种依赖环境,并接受Master 的管理。每个Node 主要由以

下几个组件构成。

( 1 ) Node 的核心代理程序kubelet

kubelet 是运行于工作节点之上的守护进程,它从API Server 接收关于Pod 对象的配

置信息并确保它们处于期望的状态( desired state ,后文不加区别地称之为“目标状态”) 。

kubelet 会在API Server 上注册当前工作节点,定期向Master 汇报节点资源使用情况,并通

过cAdvisor 监控容器和节点的资源占用状况。

( 2 )容器运行时环境

每个Node 都要提供一个容器运行时( Container Runtime )环境,它负责下载镜像并运

行容器。kubelet 并未固定链接至某容器运行时环境,而是以插件的方式载入配置的容器环

境。这种方式清晰地定义了各组件的边界。目前, Kubernetes 支持的容器运行环境至少包括

Docker 、RKT 、cri-o 和Fraki 等。

( 3 ) kube-proxy

每个工作节点都需要运行一个kube-proxy 守护进程,它能够按需为Serv ice 资源对象生

成iptables 或ipvs 规则,从而捕获访问当前Service 的ClusterIP 的流量并将其转发至正确的后端Pod 对象。


分享到:


相關文章: