之前写了一篇关于什么是K8s,相信大家对K8s已经有了初步的了解。本次我们主要谈谈kubernetes(k8s)的架构以及组件。
1.Kubernetes架构全图
2.Master组件
Master组件相当于集群的大脑,控制平面:
- 所有集群的控制命令都传递给Master组件并在其上执行
- 每个Kubernetes集群至少有一套Master组件(当前默认∶一个)
- 每套master组件包括三个核心组件(apiserver,scheduler和controller-manager)以及集群数据配置中心etcd
下面对Master组件的每部分构成进行介绍。
组件:API Server
- 集群控制的唯一入口,是提供Kubernetes集群控制RESTful API的核心组件
- 集群内各个组件之间数据交互和通信的中枢
- 提供集群控制的安全机制(身份认证、授权以及admission control)
组件:Scheduler
- 通过API Server的Watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node
- 支持自定义调度算法provider
- 默认调度算法内置预选策略和优选策略,决策考量资源需求、服务质量、软硬件约束、亲缘性、数据局部性等指标参数
组件:ControllerManager
- 集群内各种资源controller的核心管理者
- 针对每一种具体的资源,都有相应的Controller
- 保证其下管理的每个Controller所对应的资源始终处于“期望状态”。
每个Controller的逻辑:
for{
获取资源期望状态
获取资源当前状态
改变:当前状态-->期望状态
}
组件:Etcd
- Kubernetes集群的主数据库,存储着所有资源对象以及状态
- 默认与Master组件部署在一个Node上
- Etcd的数据变更都是通过API Server进行
3.Node组件
Node : Kubernetes集群中真正的工作负载节点
- Kubernetes集群由多个Node共同承担工作负载,Pod被分配到某个具体的Node上执行
- kubernetes通过node controller对node资源进行管理。支持动态在集群中添加或删除Node
- 每个集群Node上都会部署Kubelet和Kube-proxy两个组件
Node组件的架构图如下图所示:
下面对Node组件的每部分构成进行介绍。
组件:Kubelet
- 位于集群中每个Node上的非容器形式的服务进程组件,Master和node之间的桥梁
- 处理Master下发到本Node上的Pod创建、启停等管理任务;向APIServer注册Node信息
- 监控本Node上容器和节点资源情况,并定期向Master汇报节点资源占用情况
组件:Kube-proxy
kube-proxy:运行在每个Node上
- Service抽象概念的实现,将到Service的请求按策略(负载均衡)算法分发到后端Pod(Endpoint)上
- 默认使用iptables mode实现
- 支持nodeport模式,实现从外部访问集群内的service
4.总结
Kubernetes架构和组件:
- 两类节点:Master和Node
- Master组件: apiserver, scheduler, controllerManager, etcd
- 节点组件: kubelet, kube-proxy