Kubernetes组件功能图

 

各组件说明:

节点

节点在Kubernetes由虚拟机或者实体机表示,常称为Minion,即从属主机。当一个节点加入到Kubernetes系统中时,它将会创建一个数据结构来记录节点信息(元数据),且不是所有节点都能够加入到Kubernetes系统中,只有通过验证后的节点才能够成为Kubernetes阶段。目前管理节点有两种方式分别为:节点管理器(Node Controller)和通过命令手动管理。

Pod

在Kubernetes中,Pod是最小的可创建、调度和管理的部署单元,它是容器化环境中的“逻辑主机”,可以包含一个或多个有关联的容器,并且容器间可以共享数据卷。

容器存在于Pod之中,而Pod又存在于节点中。

Pod主要功能:同一Pod中的容器资源共享和通信。

Service

pod的路由代理抽象,用于解决pod之间的服务发现问题。因为pod的运行状态可动态变化(比如切换机器了、缩容过程中被终止了等),所以访问端不能以写死IP的方式去访问该pod提供的服务。service的引入旨在保证pod的动态变化对访问端透明,访问端只需要知道service的地址,由service来提供代理。

replicationController

pod的复制抽象,用于解决pod的扩容缩容问题。通常,分布式应用为了性能或高可用性的考虑,需要复制多份资源,并且根据负载情况动态伸缩。通过replicationController,我们可以指定一个应用需要几份复制,Kubernetes将为每份复制创建一个pod,并且保证实际运行pod数量总是与该复制数量相等(例如,当前某个pod宕机时,自动创建新的pod来替换)。

Label

Labe是一组附加在对象上的键值对,用于区分Pod、Service、Replication Controller的key/value键值对,Pod、Service、 Replication Controller可以有多个label,但是每个label的key只能对应一个value。Labels是Service和Replication Controller运行的基础,为了将访问Service的请求转发给后端提供服务的多个容器,正是通过标识容器的labels来选择正确的容器。同样,Replication Controller也使用labels来管理通过pod 模板创建的一组容器,这样Replication Controller可以更加容易,方便地管理多个容器,无论有多少容器。

Proxy

Proxy不但解决了同一主宿机相同服务端口冲突的问题,还提供了Service转发服务端口对外提供服务的能力,Proxy后端使用了随机、轮循负载均衡算法。

Kubelet

用来监管Pod里面容器运行情况的。一旦某个Pod里面的容器发生意外挂掉了,就由Kubelet来完成对其的重建。

 

apiserver

作为kubernetes系统的入口,封装了核心对象的增删改查操作,以RESTFul接口方式提供给外部客户和内部组件调用。它维护的REST对象将持久化到etcd(一个分布式强一致性的key/value存储)。

Scheduler

负责集群的资源调度,为新建的pod分配机器。这部分工作分出来变成一个组件,意味着可以很方便地替换成其他的调度器。

controller-manager

负责执行各种控制器,目前有两类:

endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service到pod的映射总是最新的。

replication-controller:定期关联replicationController和pod,保证replicationController定义的复制数量与实际运行pod的数量总是一致的。

slave(称作minion)运行两个组件:

kubelet

负责管控docker容器,如启动/停止、监控运行状态等。它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。

Proxy

负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发。

Kubernetes调度说明
Scheduler负责Pods在各个节点上的分配。Scheduler是插件式的,Kubernetes将来可以支持用户自定义的scheduler

调度流程:
1、从缓存待调度pod对象的队列PodQueue中弹出一个pod对象。
2、该pod和存储所有minion对象的链表MinionLister作为调度算法的输入,运行调度算法选择一个minion作为pod的调度目的地dest。如果无法选择一个可用的minion则输出一个event信息,说明pod调度失败。如果成功选择一个可用的minion,则使用该pod的namespace、pod名、选择的minion这三个属性新建一个Binding对象。
3、将pod分派到指定的minion上运行,这个动作也叫绑定(bind),bind就是向apiserver返回一个Binding对象,该Binding对象最终由apiserver调用etcd接口进行持久化存储。如果绑定失败,则输出绑定被拒绝的event信息,反之输出调度成功的event信息。

调度规则
调度策略分为两大类:Predicates和Priorities,其中Predicates回答"能不能"的问题,即能否将pod调度到特定minion上运行,而Priorities则是在Predicates的答案基础上回答"到底有多适合"的问题,即给特定minion打分评价优先级。

Predicates类
1、PodFitsPorts对应的实现函数是PodFitsPorts,他的评估依据就是端口是否冲突,即检测待调度的pod中所有容器要用到的端口集对应的HostPort集与minion上已使用的端口是否冲突。
2、PodFitsResources对应的实现函数是PodFitsResources,他的评估依据就是资源是否够用,即检测minion上已经运行的所有pod对资源的需求总量与待调度pod对资源的需求量之和是否超出minion的资源容量。
3、NoDiskConflict对应的实现函数是NoDiskConflict,他的评估依据就是挂载的磁盘(volume)是否冲突。
4、MatchNodeSelector对应的实现函数是PodSelectorMatches,他的评估依据就是minion是否被pod的NodeSelector选中。
5、HostNamer对应的实现函数是PodFitsHost,他的评估依据就是pod的hostname。

Priorities类
1、LeastRequestedPriority对应的实现函数是LeastRequestedPriority,他的计算原则是尽量将pod调度到资源占用比较小的minion上。
2、ServiceSpreadingPriority对应的实现函数是CalculateSpreadPriority,他的计算原则是使同一个minion上属于相同service的pod数量尽可能少,这样调度的pod能够尽可能地实现service的高可用性和流量负载均衡。
3、EqualPriority对应的实现函数是EqualPriority,他的计算原则是平等对待MinionLister中的每一个minion。

Pod、RC、Service之间的关系
Replication Controller
Pod副本控制器,限定某种Pod的当前实例的个数,提供服务的滚动升级功能。通过标签选择器选择目标Pod.

Service
无状态的为服务,一容器的方式进行隔离,拥有一个唯一的名字和、虚拟访问地址IP地址(ClusterIP)+Port、外部系统访问的映射端口NodePort

Pod
一组容器的一个 单一集合体,k8s最小调度单元且Pod里的所有容器共享资源(网络、Volumes),拥有名称、IP、状态、Label、一组容器进程等。

关系说明:
Service运行在Pod之上,Pod运行在容器之上,RC用于管理Pod实例,控制实例个数及保障正在运行实例个数。

RC不是定义在Service之上原因:
根据以上说明:Service由Pod提供的服务功能,而RC用于管理Pod实例,如果RC定义在Service之上将会导致,自己出现问题没有人监控,而且整个系统结构将不合理。

关系图:

 

Docker系列(八)Kubernetes介绍的更多相关文章

  1. Docker系列(八):Kubernetes横空出世背后的秘密

    Docker与CoreOS的恩怨情仇 2013年2月,Docker建立了一个网站发布它的首个演示版本, 3月,美国加州Alex Polvi正在自己的车库开始 他的 第二次创业 有了第一桶金的Alex这 ...

  2. Docker系列(九)Kubernetes安装

    环境: A.B两天机器A机器IP:192.169.0.104,B机器IP:192.168.0.102,其中A为Master节点,B为Slave节点 操作系统:Centos7 Master与Slave节 ...

  3. Docker系列(二)组件介绍

    镜像 镜像是一个只读的模版,可以用来创建Docker容器. 容器 Docker利用容器来运行应用,容器是从镜像创建的运行实例.它可以被启动.开始.停止.删除.每个容器都是互相隔离的,保证安全的平台.可 ...

  4. Docker系列八: 数据卷

    什么是数据卷 生成环境中使用docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这个就涉及到了容器数据管理 容器中管理数据主要有两种方式: 数据卷:容器内数据之间映射到本 ...

  5. 8天入门docker系列 —— 第一天 docker出现前的困惑和简单介绍

    docker出来也有很多年了,但用到的公司其实并不是很多,docker对传统开发是一个革命性的,几乎颠覆了之前我们传统的开发方法和部署模式,而大多 公司保守起见或不到万不得已基本上不会去变更现有模式. ...

  6. Docker Kubernetes 介绍 or 工作原理

    Kubernetes 介绍 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S. K8S是Google内部一个叫Borg的容 ...

  7. Docker系列之原理简单介绍

    目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...

  8. Docker系列01—容器的发展历程---Docker的生态圈

    本文收录在容器技术学习系列文章总目录 Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker ...

  9. Docker系列08—搭建使用私有docker registry

    本文收录在容器技术学习系列文章总目录 1.了解Docker Registry 1.1 介绍 registry 用于保存docker 镜像,包括镜像的层次结构和元数据. 启动容器时,docker dae ...

随机推荐

  1. Navicat for mysql 远程连接 mySql数据库10061、1045错误问题 (转)

    远程使用Navicat for mysql 客户端软件连接 mySql数据时,连接出现 2003-Can’t connect to MySQL on ’192.168.1.2’(10061)错误时,是 ...

  2. Python 异常结构

    http://flyheaven.blog.163.com/blog/static/7401172201193085243920/ 1.Python内建异常体系结构 The class hierarc ...

  3. 在WIN32 DLL中使用MFC

    最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记 一.修 ...

  4. snoopy(强大的PHP采集类) 详细介绍

    Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单,可以用来开发一些采集程序和小偷程序,本文章详细介绍snoopy的使用教程. Snoopy的一些特点: 抓取网页的内容 fe ...

  5. nginx如何解决超长请求串

    nginx是一个强大的http服务器,但是在使用过程中发现,当遇到超长的post请求或者get请求时,nginx会返回413.400.414等状态码,这是因为请求串长度超过了nginx默认的缓存大小或 ...

  6. Spring与Struts2整合

    Spring与Struts2为什么要整合呢? 把Action实例交给Spring来管理!! 1.单独测试Struts是否添加成功(jar包和配置文件),先单独测试,不要整合之后再测试,容易出问题 we ...

  7. atoi函数的实现(考虑不同进制、溢出)

    2013-07-08 16:21:15 atio就是将ASCII码表示的字符为int型数据,看似简单的问题,实际上需要考虑的很多.对于简单的问题,考虑是否全面就显得特别重要. 小结: 对于该函数的实现 ...

  8. (转)linux 技巧:使用 screen 管理你的远程会话

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-screen/index.html 你是不是经常需要 SSH 或者 telent 远程登录到 Li ...

  9. C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什

    C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什么?如果要学我该从何学起??? C# 框架看这里http://download.csdn.net/source/25784 ...

  10. VC 设置 Stack Overflow

    C/C++ stack overflow, 怎样设置stack大小?解决方案 (1) vc6.0: project->setting->link->project options-& ...