Kubernetes是一个在集群主机间进行自动化部署、扩展和容器操作的提供以容器为中心基础设施的开源平台。
通过Kubernetes,你可以快速有效地响应用户需求:
- 快速而有预期地部署你的应用
- 极速地扩展你的应用
- 无缝铺展新的应用功能
- 节省资源,优化硬件资源的使用
我们的目标是孕育一个组件和工具的生态系统以资源在公有云和私有云中运行的应用的负担。
Kubernetes特点:- 可移植: 支持公有云,私有云,混合云,复合云
- 可扩展: 模块化,热插拨,可组合
- 自愈: 自动替换,自动重启,自动复制,自动扩展
Kubernetes始于Google 2014 年的一个项目。 Kubernetes的构建基于Google十多年运行大规模负载产品的经验,同时也吸取了社区中最好的意见和经验。
有没有想试一试了?(2)为什么要选择容器?当容器技术这么热门的时候有是不是在疑惑为什么要选用这样的技术呢?
传统的应用部署方式是通过操作系统的包管理器来安装应用。然而这样做的一个劣势在于,它把应用的运行,配置,库和生存周期和机器的操作系统纠缠在一起。当然你可以通过创建虚机镜像的方式来获得可以预期的前滚和回滚操作,然而虚拟机太重量级并且不可移植。
新的方式是通过部署基于操作系统级别虚拟化的容器进行虚拟化而非通过硬件来进行虚拟化。这些容器之间相互隔离:它们有自己的文件系统,然而它们也无法看到彼此之间的进程,并且它们之间的计算资源也是有界限的。相较于虚拟机容器也更容易部署,并且因为它们是和底层设施和机器文件系统解耦的,它们可以在云和不同版本的操作系统间进行迁移。
因为容器小而快,一个应用可以被打包进一个容器映像。正是应用与容器镜像间一对一的关系解锁了容器的很多优点:
- 在build或者release 的阶段(而非部署阶段)可以创建不变的容器镜像,因为每个应用都用和其他的应用栈相组合,也不依赖于生产环境基础设施。这使得从研发到生产过程中可以采用持续的环境。
- 容器比虚机要更加透明,这更便于监控和管理。尤其是因为窗口的进程的生命周期是被基础设施直接管理而不是被容器中的进程管理器隐藏起来管理。
- 因为一个容器包含一个应用,这让对容器的管理等同于对应用部署的管理。
总结一下容器的优点:
- 敏捷地应用创建和部署:相较于VM增加了容器镜像创建的效率。
- 持续开发,集成和部署:通过快速的回滚操作(因为镜像的稳定性)提供可靠的经常的容器镜像的创建和部署。
- 开发和运行相分离:在build或者release 的阶段(而非部署阶段),使得应用和基础设施解耦。
- 开发,测试和生产环境的持续:在笔记本上可以像在云中一样的运行。
- 云和操作系统版本的可移植性:可以运行在 Ubuntu, RHEL, CoreOS, on-prem, Google Container Engine,和任何其它的运行环境中。
- 应用为中心的管理:提升了虚拟化的层次,从虚拟硬件上运行操作系统的抽象到操作系统中应用逻辑资源的虚拟。
- 松耦合,分布式,弹性,自由的微服务:应用被打散成更小的,独立的小碎片并且可以动态地部署和管理——而非是一个在用途单一的庞大机器中运行的一个臃肿堆栈中。
- 资源隔离:可以预测的应用性能。
- 资源使用:高效。
Kubernetes可以安排物理机或者虚拟机上运行的应用容器的使用。
当然它不只可以做这些。
为了充分发挥它的潜能,你需要剪断物理机虚拟机的束缚。
然而,一旦特定的容器不再局限于特定的主机,主机为中心的基础设施便不再适用了:组管理,负载均衡,自动扩展等。你需要的是以容器为中心的基础设施。而这正是Kubernetes所提供的。
Kubernetes可以满足很多运行环境中应用的通用的需求,比如:
- 进程协同,利用复合应用保证应用和容器一对一的模型。
- 存储系统挂载
- 分发密钥
- 应用健康检测
- 应用实例复制
- 水平自动扩展
- 命名和发现
- 负载均衡
- 滚动更新
- 资源监控
- 日志访问
- 自检和调试
- 识别和认证
这为PaaS提供了IaaS层的便利,提供了基础设施提供者间的可移植性。
详细内容,参见用户指南.
(4)Kubernetes为什么又是怎么样的一个平台呢?尽管Kubernetes提供了很多功能,总有一些新的场景可以从这些功能中获益。特定的应用工作流可以提高开发者的开发速度。最新可以接受的组合常常需要强劲的大规模的自动化。这也是为什么Kubernetes构建以来为什么要做一个让应用的部署、扩展和管理更便捷的生态平台的原因。
Labels让用户可以随心所欲地组织自己的资源。 Annotations让用户可以给资源添加定制化的信息以充分使用自己的工作流,提供一种简单的管理工具。
此外,Kubernetes control plane本身也是基于公布给开发者和用户相同 的一组API。用户可以自己定开发自己的controllers, schedulers等。如果愿意,它们甚至可以用自己的API 开发自己的command-line tool.
这样的设计也让很多其它系统可以构建于Kubernetes之上。
(5)Kubernetes不是什么:Kubernetes不是一个传统的,包罗一切的PaaS系统。我们保留用户的选择,这一点非常重要。
- Kubernetes不限制支持应用的种类。它不限制应用框架,或者支持的运行时语言,也不去区分 “apps” 或者“services”。 Kubernetes致力于支持不同负载应用,包括有状态、无状态、数据处理类型的应用。只要这个应用可以在容器里运行,那么它就可以在Kubernetes上很多地运行。
- Kubernetes不提供中间键(如message buses),数据处理框架(如Spark),数据库(如Mysql),或者集群存储系统(如Ceph)。但这些应用都可以运行于Kubernetes。
- Kubernetes没有一个点击即可用的应用市场。
- Kubernetes不部署源码不编译应用。持续集成的 (CI)工作流方面,不同的用户有不同的需求和偏好,因此,我们提供分层的 CI工作流,但并不定义它应该怎么做。
- Kubernetes允许用户选择自己的日志、监控和报警系统。
- Kubernetes不提供可理解的应用配置语言(e.g., jsonnet).
- Kubernetes不提供或者任何综合的机器配置,维护,管理或者自愈系统。
另一方面,大量的Paas系统都可以运行在Kubernetes上,比如Openshift, Deis, 和Gondor。你可以构建自己的Paas平台,集成CI。
因为Kubernetes运行在应用而非硬件层面,它提供了普通的Paas平台提供的一些通用功能,比如部署,扩展,负载均衡,日志,监控等。然而,Kubernetes并非一个庞然大物,这些功能老师可选的。
另外,Kubernetes不仅仅是一个“编排系统”;它消弥了编排的需要。“编排”的定义是指执行一个预定的工作流:先做A,之后B,然后C。相反地,Kubernetes是由一系列独立的、可组合的驱使当前状态走向预想状态的控制进程组成的。怎么样从A到C并不重要:达到目的就好。当然也是需要中心控制的;方法更像排舞的过程。这让这个系统更加好用更加强大、健壮、 有弹性且可扩展。
(6)Kubernetes是什么意思呢? K8s?Kubernetes起源于希腊语, 是“舵手”或者“领航员”的意思,是“管理者”和“控制论”的根源。 K8s是把用8代替8个字符“ubernete”而成的缩写。
原文链接:Kubernetes - What is Kubernetes?
欢迎访问网站:奇趣儿 – 到天边外去…
最近要调研k8s,准备在生产环境中使用k8s。积累了很多资料, 后期也会写相关的文章来介绍我对k8s的理解 。以下是学习k8s一些不错的资源和文章, 请享用~~
--- updated in 2017.05.14
欢迎关注我的知乎专栏: 云时代的运维开发 - 知乎专栏
好文系列
容器设计模式
相关网站
docker专业介绍的网站dockerinfodocker专业介绍的网站dockoneStuq课程-从理论到生产环境实战:掌握Docker大规模部署和管理kubernetes中文社区k8s官方博客
文档手册
- kubernetes中文文档 *****
- kubernetes官方指南 *****
相关项目
专注于k8s工具链的开源仓库awesome-kubernetes
- community repo 通过这个github 仓库可以了解最新的社区动态 ,和社区工具的发展
课程培训
才云k8s技术培训
Kubernetes 架构及原理 Kubernetes 层级化资源模型 Kubernetes 基础资源操作实践 基于Kubernetes的分布式 Tensor Flow 系统
https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615
出版书籍
- 《容器与容器云》
- 《Kubernetes实战 》
- 《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版)》
欢迎关注我的知乎专栏: 云时代的运维开发 - 知乎专栏
当然是自己动手部署一个,我不是是说用minikubernete那种玩玩。我是说自己动手在一个至少6台vm的cluster上部署一个。从docker etcd flannel kube-apiserver kube-scheduler kube-controler kubelet kube-proxy。一个组件一个组件的部署上去。你就会弄懂啦。我今天刚刚自己尝试在买的阿里云ecs上部署了一个 三个节点的master加三个worker节点 逃