K8S介绍及架构

SunnyFan大约 5 分钟约 1567 字

K8S介绍及架构

什么是kubernetes

Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg),目前已经成为容器编排一个标准。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩、高可用等一系列完整功能,提高了大规模容器集群管理的便捷性。

Kubernetes优势:

  • 容器编排
  • 轻量级
  • 开源
  • 弹性伸缩
  • 负载均衡

Kubernetes架构和组件

图

核心组件

Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件:

  • a、Kubernetes API Server

作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd。kubectl是直接和APIServer交互的。

a,提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,只有API Server与存储通信,其他模块通过API Server访问集群状态。实现集群故障检测和恢复的自动化工作,负责执行各种控制器,主要有:
​ 第一,是为了保证集群状态访问的安全。
​ 第二,是为了隔离集群状态访问的方式和后端存储实现的方式:API Server是状态访问的方式,不会因为后端存储技术etcd的改变而改变。

​b,作为kubernetes系统的入口,封装了核心对象的增删改查操作,以RESTFul接口方式提供给外部客户和内部组件调用。对相关的资源数据“全量查询”+“变化监听”,实时完成相关的业务功能

  • b、Kubernetes Scheduler

为新建立的Pod进行节点(node)选择(即分配机器),**负责集群的资源调度**。组件抽离,可以方便替换成其他调度器。

a,Scheduler收集和分析当前Kubernetes集群中所有Minion/Node节点的资源(内存、CPU)负载情况,然后依此分发新建的Pod到Kubernetes集群中可用的节点。
b,实时监测Kubernetes集群中未分发和已分发的所有运行的Pod。
c,Scheduler也监测Minion/Node节点信息,由于会频繁查找Minion/Node节点,Scheduler会缓存一份最新的信息在本地。
d,Scheduler在分发Pod到指定的Minion/Node节点后,会把Pod相关的信息Binding写回API Server。

  • Kubernetes Controller

负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。

  1. Replication Controller
    管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。

  2. Node Controller
    管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。

  3. Namespace Controller
    管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。

  4. Service Controller
    管理维护Service,提供负载以及服务代理。

  5. EndPoints Controller
    管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。

  6. Service Account Controller
    管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。

  7. Persistent Volume Controller
    管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。

  8. Daemon Set Controller
    管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。

  9. Deployment Controller
    管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。

  10. Job Controller
    管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目

  11. Pod Autoscaler Controller
    实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

Kubernetes Node运行节点,运行管理业务容器,包含如下组件:

  • a、Kubelet
    负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。

  • Kubernetes Proxy
    负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。该模块实现了Kubernetes中的服务发现和反向代理功能。
    反向代理方面:kube-proxy支持TCP和UDP连接转发,默认基于Round Robin算法**将客户端流量转发到与service对应的一组后端pod。
    服务发现方面: kube-proxy使用etcd的watch机制,监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系,从而保证了后端pod的IP变化不会对访问者造成影响。另外kube-proxy还支持session affinity。

  • Docker
    Node上需要运行容器服务。

master和node之外的组件:

  • a、etcd
    一个高可用的K/V键值对存储和服务发现系统,etcd的功能是给flannel 提供数据存储,可以单机部署或者集群部署。

  • b、flannel
    这里并不一定非要是flannel,也可以是其他。所有node上都是以flannel为主流来进行部署。**所有node节点上的docker启动的时候需要flannel分发IP地址,而flannel 就会去请求etcd中的配置,各个node分配不同的IP网段,类似于咱路由器DHCP 的功能,这样就有效的避免了IP地址的冲突,同时flannel 对docker容器的数据包进行转发到另一个node节点上,flannel服务这样就实现了整个K8S集群中docker容器网络互通问题。**