之前写了一篇关于什么是K8s,相信大家对K8s已经有了初步的了解。本次我们主要谈谈kubernetes(k8s)的架构以及组件。

1.Kubernetes架构全图

架构 配置中心是什么 架构组件_云原生

2.Master组件

Master组件相当于集群的大脑,控制平面:

  •  所有集群的控制命令都传递给Master组件并在其上执行
  • 每个Kubernetes集群至少有一套Master组件(当前默认∶一个)
  • 每套master组件包括三个核心组件(apiserver,scheduler和controller-manager)以及集群数据配置中心etcd

架构 配置中心是什么 架构组件_kubernetes_02

下面对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组件的架构图如下图所示:

架构 配置中心是什么 架构组件_Pod_03

 下面对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