k8原理架构介绍(一)

  

一、Kubernetes是什么

  

Kubernetes是当今最流行的开源容器管理平台,它就是大名鼎鼎的谷歌网站Borg的开源版本.Google在2014年推出了Kubernetes,本文发布时最新的版本是1.11 .

  

Kubernetes源于希腊语,意为舵手,美丽是一个简称,因为首尾字母中间正好有8个字母。基于容器技术,Kubernetes可以方便的进行集群应用的部署,扩容,缩容,自愈机制,服务发现,负载均衡,日志,监控等功能,大大减少日常运维的工作量。

  

Kubernetes所有的操作都可以通过Kubernetes API来进行,通过API来操作Kubernetes中的对象,包括仓,等服务,体积,名称空间等。

  

二,Kubernetes设计架构

  

Kubernetes借鉴了Borg的设计理念,比如,服务,标签和单荚单IP等.Kubernetes的整体架构跟Borg非常像,如下图所示:

  

 k8原理架构介绍(一)

  

Kubernetes主要由以下几个核心组件组成:

  
      <李> etcd保存了整个集群的状态,李   <李> apiserver提供了资源操作的唯一入口,并提供认证,授权,访问控制,API注册和发现等机制,李   <李>控制器经理负责维护集群的状态,比如故障检测,自动扩展,滚动更新等;李   <李>调度器负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上,李   <李> kubelet负责维护容器的生命周期,同时也负责体积(CVI)和网络(CNI)的管理,李   <李>容器运行时负责镜像管理以及Pod和容器的真正运行(CRI);李   <李> kube-proxy负责为服务提供集群内部的服务发现和负载均衡;李   
  

除了核心组件,还有一些推荐的插件:

  
      <李> kube-dns负责为整个集群提供DNS服务李   <李>入口控制器为服务提供外网入口   <李> Heapster提供资源监控李   <李>仪表板提供GUI李   <李>联合会提供跨可用区的集群李   <李> Fluentd-elasticsearch提供集群日志采集,存储与查询李   
  

 k8原理架构介绍(一)

  

 k8原理架构介绍(一)

  

三,Kubernetes的核心技术概念和API对象

  

API对象是k8集群中的管理操作单元.K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作,例如副本集副本集对应的API对象是RS。

  

每个API对象都有3大类属性:元数据的元数据,规范规范和状态状态。元数据是用来标识API对象的,每个对象都至少有3个元数据:命名空间、名称和uid;除此以外还有各种各样的标签标签用来标识和匹配不同的对象,例如用户可以用标签env来标识区分不同的服务部署环境,分别用env=dev env=测试,env=生产来标识开发,测试,生产的不同服务。规范描述了用户期望k8集群中的分布式系统达到的理想状态(理想状态),例如用户可以通过复制控制器复制控制器设置期望的豆荚副本数为3,地位描述了系统实际当前达到的状态(状态),例如系统当前实际的豆荚副本数为2,那么复制控制器当前的程序逻辑就是自动启动新的豆荚,争取达到副本数为3 .

  

k8中所有的配置都是通过API对象的规范去设置的,也就是用户通过配置系统的理想状态来改变系统,这是k8重要设计理念之一,即所有的操作都是声明式(声明)的而不是命令式(命令)的。声明式操作在分布式系统中的好处是稳定,不怕丢操作或运行多次,例如设置副本数为3的操作运行多次也还是一个结果,而给副本数加1的操作就不是声明式的,运行多次结果就错了。

  集群

  

集群是计算,存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。

  

大师   

主是集群的大脑,它的主要职责是调度,即决定将应用放在哪里运行部分运行Linux操作系统,可以是物理机或者虚拟机。为了实现高可用,可以运行多个主人。

  

节点   

节点的职责是运行容器应用.Node由主人管理,节点负责监控并汇报容器的状态,并根据掌握的要求管理容器的生命周期.Node运行在Linux操作系统,可以是物理机或者是虚拟机。

  

  

荚是Kubernetes的最小工作单元。每个吊舱包含一个或多个容器.Pod中的容器会作为一个整体被主人调度到一个节点上运行。

k8原理架构介绍(一)