一、Kubernetes代码托管在GitHub上:https://github.com/kubernetes/kubernetes/。html
二、Kubernetes是一个开源的,容器集群管理系统,Kubernetes的目标是让部署容器化的应用简单而且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。经过Kubernetes你能够:node
三、Kubernetes一个核心的特色就是可以自主的管理容器来保证云平台中的容器按照用户的指望状态运行着(好比用户想让apache一直运行,用户不须要关心怎么去作,Kubernetes会自动去监控,而后去重启,新建,总之,让apache一直提供服务),管理员能够加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提高工具以及人性化方面,让用户可以方便的部署本身的应用(就像canary deployments)。git
四、如今Kubernetes着重于不间断的服务状态(好比web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的未来会支持各类生产云平台中的各类服务,例如,分批,工做流,以及传统数据库。github
五、在Kubenetes中,全部的容器均在Pod中运行,一个Pod能够承载一个或者多个相关的容器,在后边的案例中,同一个Pod中的容器会部署在同一个物理机器上而且可以共享资源。一个Pod也能够包含O个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被全部Pod中的容器共享,对于用户建立的每一个Pod,系统会自动选择那个健康而且有足够容量的机器,而后建立相似容器的容器,当容器建立失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet,可是,若是是Pod失败或者机器,它不会自动的转移而且启动,除非用户定义了 replication controller。web
六、用户能够本身建立并管理Pod,Kubernetes将这些操做简化为两个操做:基于相同的Pod配置文件部署多个Pod复制品;建立可替代的Pod当一个Pod挂了或者机器挂了的时候。而Kubernetes API中负责来从新启动,迁移等行为的部分叫作“replication controller”,它根据一个模板生成了一个Pod,而后系统就根据用户的需求建立了许多冗余,这些冗余的Pod组成了一个整个应用,或者服务,或者服务中的一层。一旦一个Pod被建立,系统就会不停的监控Pod的健康状况以及Pod所在主机的健康状况,若是这个Pod由于软件缘由挂掉了或者所在的机器挂掉了,replication controller 会自动在一个健康的机器上建立一个一摸同样的Pod,来维持原来的Pod冗余状态不变,一个应用的多个Pod能够共享一个机器。sql
七、咱们常常须要选中一组Pod,例如,咱们要限制一组Pod的某些操做,或者查询某组Pod的状态,做为Kubernetes的基本机制,用户能够给Kubernetes Api中的任何对象贴上一组 key:value的标签,而后,咱们就能够经过标签来选择一组相关的Kubernetes Api 对象,而后去执行一些特定的操做,每一个资源额外拥有一组(不少) keys 和 values,而后外部的工具可使用这些keys和vlues值进行对象的检索,这些Map叫作annotations(注释)。数据库
八、Kubernetes支持一种特殊的网络模型,Kubernetes建立了一个地址空间,而且不动态的分配端口,它能够容许用户选择任何想使用的端口,为了实现这个功能,它为每一个Pod分配IP地址。apache
九、现代互联网应用通常都会包含多层服务构成,好比web前台空间与用来存储键值对的内存服务器以及对应的存储服务,为了更好的服务于这样的架构,Kubernetes提供了服务的抽象,并提供了固定的IP地址和DNS名称,而这些与一系列Pod进行动态关联,这些都经过以前提到的标签进行关联,因此咱们能够关联任何咱们想关联的Pod,当一个Pod中的容器访问这个地址的时候,这个请求会被转发到本地代理(kube proxy),每台机器上均有一个本地代理,而后被转发到相应的后端容器。Kubernetes经过一种轮训机制选择相应的后端容器,这些动态的Pod被替换的时候,Kube proxy时刻追踪着,因此,服务的 IP地址(dns名称),历来不变。json
十、全部Kubernetes中的资源,好比Pod,都经过一个叫URI的东西来区分,这个URI有一个UID,URI的重要组成部分是:对象的类型(好比pod),对象的名字,对象的命名空间,对于特殊的对象类型,在同一个命名空间内,全部的名字都是不一样的,在对象只提供名称,不提供命名空间的状况下,这种状况是假定是默认的命名空间。UID是时间和空间上的惟一。后端
一、在Docker 做为高级容器引擎快速发展的同时,Google也开始将自身在容器技术及集群方面的积累贡献出来。在Google内部,容器技术已经应用了不少年,Borg系统运行管理着成千上万的容器应用,在它的支持下,不管是谷歌搜索、Gmail仍是谷歌地图,能够垂手可得地从庞大的数据中心中获取技术资源来支撑服务运行。
二、Borg是集群的管理器,在它的系统中,运行着众多集群,而每一个集群可由成千上万的服务器联接组成,Borg每时每刻都在处理来自众多应用程序所提交的成百上千的Job, 对这些Job进行接收、调度、启动、中止、重启和监控。正如Borg论文中所说,Borg提供了3大好处:
1)隐藏资源管理和错误处理,用户仅须要关注应用的开发。
2) 服务高可用、高可靠。
3) 可将负载运行在由成千上万的机器联合而成的集群中。
三、做为Google的竞争技术优点,Borg理所固然的被视为商业秘密隐藏起来,但当Tiwtter的工程师精心打造出属于本身的Borg系统(Mesos)时, Google也审时度势地推出了来源于自身技术理论的新的开源工具。
四、2014年6月,谷歌云计算专家埃里克·布鲁尔(Eric Brewer)在旧金山的发布会为这款新的开源工具揭牌,它的名字Kubernetes在希腊语中意思是船长或领航员,这也刚好与它在容器集群管理中的做用吻合,即做为装载了集装箱(Container)的众多货船的指挥者,负担着全局调度和运行监控的职责。
五、虽然Google推出Kubernetes的目的之一是推广其周边的计算引擎(Google Compute Engine)和谷歌应用引擎(Google App Engine)。但Kubernetes的出现能让更多的互联网企业能够享受到链接众多计算机成为集群资源池的好处。
六、Kubernetes对计算资源进行了更高层次的抽象,经过将容器进行细致的组合,将最终的应用服务交给用户。Kubernetes在模型创建之初就考虑了容器跨机链接的要求,支持多种网络解决方案,同时在Service层次构建集群范围的SDN网络。其目的是将服务发现和负载均衡放置到容器可达的范围,这种透明的方式便利了各个服务间的通讯,并为微服务架构的实践提供了平台基础。而在Pod层次上,做为Kubernetes可操做的最小对象,其特征更是对微服务架构的原生支持。
七、Kubernetes项目来源于Borg,能够说是集结了Borg设计思想的精华,而且吸取了Borg系统中的经验和教训。
八、Kubernetes做为容器集群管理工具,于2015年7月22日迭代到 v 1.0并正式对外公布,这意味着这个开源容器编排系统能够正式在生产环境使用。与此同时,谷歌联合Linux基金会及其余合做伙伴共同成立了CNCF基金会( Cloud Native Computing Foundation),并将Kuberentes 做为首个编入CNCF管理体系的开源项目,助力容器技术生态的发展进步。Kubernetes项目凝结了Google过去十年间在生产环境的经验和教训,从Borg的多任务Alloc资源块到Kubernetes的多副本Pod,从Borg的Cell集群管理,到Kubernetes设计理念中的联邦集群,在Docker等高级引擎带动容器技术兴起和大众化的同时,为容器集群管理提供独了到看法和新思路。
一、可移植:支持公有云,私有云,混合云,多重云(multi-cloud)
二、可扩展:模块化, 插件化, 可挂载, 可组合
三、自动化:自动部署,自动重启,自动复制,自动伸缩/扩展
一、传统部署和容器部署
传统的应用部署方式是经过插件或脚原本安装应用。这样作的缺点是应用的运行、配置、管理、全部生存周期将与当前操做系统绑定,这样作并不利于应用的升级更新/回滚等操做,固然也能够经过建立虚机的方式来实现某些功能,可是虚拟机很是重,并不利于可移植性。
新的方式是经过部署容器方式实现,每一个容器之间互相隔离,每一个容器有本身的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,因为容器与底层设施、机器文件系统解耦的,因此它能在不一样云、不一样版本操做系统间进行迁移。
容器占用资源少、部署快,每一个应用能够被打包成一个容器镜像,每一个应用与容器间成一对一关系也使容器有更大优点,使用容器能够在build或release 的阶段,为应用建立容器镜像,由于每一个应用不须要与其他的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。相似地,容器比虚机轻量、更“透明”,这更便于监控和管理。最后,
二、容器优点总结:
能够在物理或虚拟机的Kubernetes集群上运行容器化应用,Kubernetes能提供一个以“容器为中心的基础架构”,知足在生产环境中运行应用的一些常见需求,如:
Kubernetes并非传统的PaaS(平台即服务)系统。
另外一方面,大量的Paas系统均可以运行在Kubernetes上,好比Openshift、Deis、Gondor。能够构建本身的Paas平台,与本身选择的CI系统集成。
因为Kubernetes运行在应用级别而不是硬件级,所以提供了普通的Paas平台提供的一些通用功能,好比部署,扩展,负载均衡,日志,监控等。这些默认功能是可选的。
另外,Kubernetes不只仅是一个“编排系统”;它消除了编排的须要。“编排”的定义是指执行一个预约的工做流:先执行A,之B,然C。相反,Kubernetes由一组独立的可组合控制进程组成。怎么样从A到C并不重要,达到目的就好。固然集中控制也是必不可少,方法更像排舞的过程。这使得系统更加易用、强大、弹性和可扩展。