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. http://www.linuxidc.com/Linux/2007-09/7399.htm

    http://www.linuxidc.com/Linux/2007-09/7399.htm

  2. 吐槽C++

    个人感觉,在c++ 道路的学习路上,遇到很多的坎坷,现在回想起来,最关键一点就是 c++知识点繁杂很多,教科书很多知识点都没有提到. 但是在实际工作中,这些没有提到的知识点,却又经常会用到(或者看开源 ...

  3. ASP.NET树形控件TreeView的递归绑定

    来自:http://blog.csdn.net/xqf003/article/details/4958727

  4. 跨域使用jsonp 获取天气预报

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">    ...

  5. 怎样成为一名PHP专家?

    当浏览各类与PHP相关的博客时,比如Quora上的问题,谷歌群组,简讯和杂志,我经常注意到技能的等级分化.问题都类似于“我如何连接到MySQL数据库?”或者“我该如何扩展邮件系统才能在每小时发送超过一 ...

  6. python学习笔记三--字典

    一.字典: 1. 不是序列,是一种映射, 键 :值的映射关系. 2. 没有顺序和位置的概念,只是把值存到对应的键里面. 3. 通过健而不是通过偏移量来读取 4. 任意对象的无序集合 5. 可变长,异构 ...

  7. 查看Linux系统的版本以及位数

    1.查看版本 http://jingyan.baidu.com/article/215817f7e360bd1edb142362.html[root@localhost usr]# lsb_relea ...

  8. BZOJ_1020_[SHOI2008]_安全的航线flight_(计算几何+二分)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1020 给出一条航线(折线),给出\(c\)个陆地(多边形).求航线上距离陆地的最近距离最远的距 ...

  9. 基于VPN搭建混合云架构需要考虑的网络因素

     Joy Qiao from MSFT Wed, Jan 21 2015 8:44 AM 很多用户在搭建混合云架构时,会使用到微软Azure虚拟网络中的 VPN功能,来实现Azure中的虚拟网络与用户 ...

  10. 【转】Bluetooth数据包捕获

    原文网址:http://www.cnblogs.com/hzl6255/p/3887013.html 这里介绍一种在Android上捕获蓝牙数据包的方法 1. 前提 首先你要有一部Android手机  ...