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. PAT-乙级-1023. 组个最小数 (20)

    1023. 组个最小数 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定数字0-9各若干个.你可以以 ...

  2. 让wordpress投稿作者在后台只看到自己的文章

    wordpress支持多作者撰写,让更多的人参与网站内容的创建是个不错的想法,UGC(User-generated content)使网站主题更丰富,不同的内容吸引不同的受众,一个好的网站应该多产生U ...

  3. tomcat部署javaweb项目的三种方式

    一.将项目文件夹或war包直接拷贝到tomcat的webapps下 二.在Tomcat\conf\Catalina\localhost下建立xml文件 修改内容如下<Context path=& ...

  4. HDU4612+Tarjan缩点+BFS求树的直径

    tarjan+缩点+树的直径题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少.先tarjan缩点,再在这棵树上求直径.加的边即是连接这条直径的两端. /* tarjan ...

  5. android 多个listView的向下滚动设置 listView动态设置高度代码

    墨迹天气图: 这里都是用的android里面的shape实现的,实现起来比较简单,只是在滚动的时候有点小麻烦... 当我们多个ListView超出了它的父控件LinearLayout的时候,它们每个L ...

  6. 缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttribute..ctor” 解决方案

    静态类中添加如下.此方法本人测试有效. //缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor” namespace  ...

  7. Weblogic下部署的应用,当更新文件时需要重新安装部署

    JSP页面检查(秒):-1 Servlet重新加载检查(秒):-1 -1说明从不检查,故当更新文件时,需要重新部署,或重新安装部署.

  8. BZOJ 3747 POI2015 Kinoman

    因为上午没有准备够题目,结果发现写完这道题没题可写了QAQ 又因为这道题范围是100w,我写了发线段树,以为要T,上午就花了一个小时拼命卡常数 结果下午一交居然过了QAQ 我们考虑枚举L,求最大R使得 ...

  9. Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录

    Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...

  10. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-005-Pizza例子的订单流程()

    一. 1.订单流程定义文件order-flow.xml <?xml version="1.0" encoding="UTF-8"?> <flo ...