Kubernetes集群介绍
Kubernetes是一个跨多主机的容器编排平台,它使用共享网络将多个主机(物理服务器或虚拟机)构建成统一的集群。其中,一个或少量几个主机运行为Master(主节点),作为控制中心负责管理整个集群系统,余下的所有主机运行为Worker Node(工作节点),这些工作节点使用本地和外部资源接收请求并以Pod(容器集)形式运行工作负载。图
为Kubernetes集群工作模式示意图。
▪Master是集群的网关和中枢,负责诸如为用户和客户端暴露API、确保各资源对象不断地逼近或符合用户期望的状态、以最优方式调度工作负载,以及编排其他组件之间的通信等任务,它是各类客户端访问集群的唯一入口,肩负Kubernetes系统上大多数集中式管控逻辑。单个Master节点即可完成其所有功能,但出于冗余及负载均衡等目的,生产环境中通常需要协同部署多个此类主机。Master节点类似于蜂群中的蜂王。
▪Worker Node(以下简称Node)负责接收来自Master的工作指令并相应创建或销毁Pod对象,以及调整网络规则以合理完成路由和转发流量等任务,是Kubernetes集群的工作节点。理论上讲,Node可以是任何形式的计算设备,负责提供CPU、内存和存储等计算和存储资源,不过Master会统一将其抽象为Node对象进行管理。Node类似于蜂群中的工蜂,在生产环境中,通常数量众多。
Kubernetes集群架构
Kubernetes属于典型的Server-Client形式的二层架构,在程序级别,Master主要由API Server(kube-apiserver)、Controller-Manager(kube-controller-manager)和Scheduler(kube-scheduler)这3个组件,以及一个用于集群状态存储的etcd存储服务组成,它们构成整个集群的控制平面;而每个Node节点则主要包含kubelet、kube-proxy及容器运行时(Docker是最为常用的实现)3个组件,它们承载运行各类应用容器。各组件如图1-8中的粗体部分组件所示
- Master组件Master组件是集群的“脑力”输出者,它维护有Kubernetes的所有对象记录,负责持续管理对象状态并响应集群中各种资源对象的管理操作,以及确保各资源对象的实际状态与所需状态相匹配。控制平面的各组件支持以单副本形式运行于单一主机,也能够将每个组件以多副本方式同时运行于多个主机上,提高服务可用级别。控制平面各组件及其主要功能如下。
(1)API ServerAPI Server是Kubernetes控制平面的前端,支持不同类型应用的生命周期编排,包括部署、缩放和滚动更新等。它还是整个集群的网关接口,由kube-apiserver守护程序运行为服务,通过HTTP/HTTPS协议将RESTful API公开给用户,是发往集群的所有REST操作命令的接入点,用于接收、校验以及响应所有的REST请求,并将结果状态持久存储于集群状态存储系统(etcd)中。
(2)集群状态存储Kubernetes集群的所有状态信息都需要持久存储于存储系统etcd中。etcd是由CoreOS基于Raft协议开发的分布式键值存储,可用于服务发现、共享配置以及一致性保障(如数据库主节点选择、分布式锁等)。显然,在生产环境中应该以etcd集群的方式运行以确保其服务可用性,并需要制定周密的备份策略以确保数据安全可靠。etcd还为其存储的数据提供了监听(watch)机制,用于监视和推送变更。API Server是Kubernetes集群中唯一能够与etcd通信的组件,它封装了这种监听机制,并借此同其他各组件高效协同。
(3)控制器管理器控制器负责实现用户通过API Server提交的终态声明,它通过一系列操作步骤驱动API对象的当前状态逼近或等同于期望状态。Kubernetes提供了驱动Node、Pod、Server、Endpoint、ServiceAccount和Token等数十种类型API对象的控制器。从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们被统一编译进单个二进制程序文件kube-controller-manager(即控制器管理器),并以单个进程运行。
(4)调度器Kubernetes系统上的调度是指为API Server接收到的每一个Pod创建请求,并在集群中为其匹配出一个最佳工作节点。kube-scheduler是默认调度器程序,它在匹配工作节点时的考量因素包括硬件、软件与策略约束,亲和力与反亲和力规范以及数据的局部性等特征。