传统部署时代: 早期,组织在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且组织维护许多物理服务器的成本很高。

虚拟化部署时代: 作为解决方案,引入了虚拟化功能,它允许您在单个物理服务器的 CPU 上运行多个虚拟机(VM)。虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由地访问。

因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等等,所以虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性。

每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

容器部署时代: 容器类似于 VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和 OS 分发进行移植。

容器当下大家比较熟知的是docker,而Kubernetes可以看作docker的管理工具。

为什么需要Kubernetes?

真正的生产型应用会涉及多个容器。这些容器必须跨多个服务器主机进行部署。容器安全性需要多层部署,因此可能会比较复杂。但 Kubernetes 有助于解决这一问题。简单来说,就是Kubernetes 可以帮助开发者构建跨多个容器的应用服务、跨集群调度、扩展这些容器,并长期持续管理这些容器的健康状况。

专业术语:

主机(Master): 用于控制 Kubernetes 节点的计算机。所有任务分配都来自于此。

API SERVER:用户不论用命令行还是图形界面,请求都发送至api server,内部系统与外部用户也通过相同的api通信

etcd:存储集群的配置和状态,主节点通过etcd查询节点,容器与容器的状态参数

Controllers:从api server获取到所需状态,控制节点的当前状态,有差异就解决

Scheduler:监听来自api的新请求,对节点进行排名,把pod部署到合适的节点,不合适就先挂着不部署

节点(Node):负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。

容器集(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样,您就能更加轻松地在集群中移动容器。

Kubelet:运行在节点上的服务,1.监视来自api的任务,执行任务,并向主节点报告。2.监视pod,pod有问题会向控制程序报告,控制程序会改变分配策略。

Container Runtime:容器运行时从镜像库拉取镜像。

kube-proxy:让每个节点获得他的IP地址,实现负载均衡。

复制控制器(Replication controller):用于控制应在集群某处运行的完全相同的容器集副本数量。

当pod有问题时,kubernetes会创造一个和原来一样的pod,但是IP不一样。service用来解决这个问题。

服务(Service):将工作内容与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集——无论这个容器集会移到集群中的哪个位置,甚至可以被替换掉。

Kubernetes 工作的简单流程:

主机(master)接收开发者的命令,自动选择从属节点(node)进行分发,之后它将在该节点分配资源,并指派容器集来完成任务请求。

当 kubernetes 将容器集调度到一个节点上时,该节点上的 kubelet 会发送指令让 docker 启动指定的容器。kubelet 随后会不断从 docker 收集这些容器的状态,并将这些信息汇集至主机。

Kubernetes原理浅析相关推荐

  1. Python标准库queue模块原理浅析

    Python标准库queue模块原理浅析 本文环境python3.5.2 queue模块的实现思路 作为一个线程安全的队列模块,该模块提供了线程安全的一个队列,该队列底层的实现基于Python线程th ...

  2. Python标准库threading模块Condition原理浅析

    Python标准库threading模块Condition原理浅析 本文环境python3.5.2 threading模块Condition的实现思路 在Python的多线程实现过程中,在Linux平 ...

  3. 第一篇: 词向量之Word2vector原理浅析

    第一篇: 词向量之Word2vector原理浅析 作者 Aroundtheworld 2016.11.05 18:50 字数 1353 阅读 5361评论 1喜欢 9 一.概述 本文主要是从deep ...

  4. SPI及其工作原理浅析

    说明.文章摘自:SPI协议及其工作原理浅析 http://bbs.chinaunix.net/thread-1916003-1-1.html 一.概述. SPI, Serial Perripheral ...

  5. .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析

    .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析 .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析 作者:&;nbsp来自:网络 htt ...

  6. LinkedList 的实现原理浅析

    转载自 LinkedList 的实现原理浅析 LinkedList内部结构 查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Clo ...

  7. Spring AOP原理浅析及入门实例

    上篇问题及Spring AOP实现原理浅析 上篇说了一个AOP编程问题,那是一个错误的AOP案例.它的错误在A类中,再次粘贴A类代码: @Componentpublic class AImpl imp ...

  8. redis单线程原理___Redis为何那么快-----底层原理浅析

    redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程. 1. 为什么说redis能够快速执行 ...

  9. 沉淀,再出发:docker的原理浅析

    沉淀,再出发:docker的原理浅析 一.前言 在我们使用docker的时候,很多情况下我们对于一些概念的理解是停留在名称和用法的地步,如果更进一步理解了docker的本质,我们的技术一定会有质的进步 ...

最新文章

  1. hbase coprocessor的分析
  2. ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-中)
  3. [Google Guava] 6-字符串处理:分割,连接,填充
  4. 7、ShardingSphere 之 Sharding-Proxy
  5. java webapps路径_java 获取服务器端的webapps路径 | 学步园
  6. java使用教程——组件及事件处理——菜单(添加图标)
  7. 【1】MySQL的四种事务隔离级别
  8. 怎么运行c语言_C语言 原来是这样调用硬件的
  9. sqlserver 分组合并列_哪个“三人组”是历史最强组合?数据显示最均衡组合令人意外...
  10. MySQL主从失败:slave_IO_Running为No
  11. 新松机器人产业小镇_啃下“硬骨头”!“青岛造”机器人挺进新加坡港
  12. 编程之美 4.4点是否在三角形内
  13. eclipse及tomcat设置编码
  14. 机器学习-----车标识别
  15. java jsp考试试题_JSP测试题一
  16. vs2017下载安装教程
  17. java 调用ffmpeg 转成mp4_Java+Windows+ffmpeg实现视频转换
  18. cf计算机丢失msvcp100,Win7丢失MSVCP100.dll导致程序无法启动怎们办
  19. 移动视频直播点播方案
  20. blender用视频做背景渲染动画节点设置

热门文章

  1. LeetCode MySQL 1045. 买下所有产品的客户
  2. 程序员面试金典 - 面试题 05.01. 插入(位运算)
  3. 机器学习回归算法—性能评估欠拟合与过拟合
  4. msp430流水灯c语言程序,超详细msp430示例程序汇编.doc
  5. java 钩子线程_java-钩子线程
  6. 聊聊机器翻译界的“灌水与反灌水之战”!
  7. MyFlash——美团点评的开源MySQL闪回工具
  8. 集群、分布式、微服务的概念及异同
  9. ImportError: libSM.so.6: cannot open shared object file: No such file or dir
  10. 平衡二叉树、二叉排序树-数据结构