Kubernetes中文文档

Kubernetes是什么

Kubernetes是什么

Kubernetes一个用于容器集群的自动化部署、扩容以及运维的开源平台。

通过Kubernetes,你可以快速有效地响应用户需求:

  • 快速而有预期地部署你的应用
  • 极速地扩展你的应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

我们希望培育出一个组件及工具的生态,帮助大家减轻在公有云及私有云上运行应用的负担。

Kubernetes特点:

  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  • 可扩展: 模块化, 插件化, 可挂载, 可组合
  • 自愈: 自动布置,自动重启,自动复制,自动扩展

Kubernetes始于Google 2014 年的一个项目。 Kubernetes的构建基于Google十多年运行大规模负载产品的经验,同时也吸取了社区中最好的意见和经验。

有没有想试一试了?

为什么要选择容器?

当容器技术这么热门的时候有是不是在疑惑为什么要选用这样的技术呢?

传统的应用部署方式是通过操作系统的包管理器来安装应用。然而这样做的一个劣势在于,它把应用的运行,配置,库和生存周期和机器的操作系统纠缠在一起。当然你可以通过创建虚机镜像的方式来获得可以预期的前滚和回滚操作,然而虚拟机太重量级并且不可移植。

新的方式是通过部署基于操作系统级别虚拟化的容器进行虚拟化而非通过硬件来进行虚拟化。这些容器之间相互隔离:它们有自己的文件系统,然而它们也无法看到彼此之间的进程,并且它们之间的计算资源也是有界限的。相较于虚拟机容器也更容易部署,并且因为它们是和底层设施和机器文件系统解耦的,它们可以在云和不同版本的操作系统间进行迁移。

因为容器小而快,一个应用可以被打包进一个容器映像。正是应用与容器镜像间一对一的关系解锁了容器的很多优点:

  1. 在build或者release 的阶段(而非部署阶段)可以创建不变的容器镜像,因为每个应用都用和其他的应用栈相组合,也不依赖于生产环境基础设施。这使得从研发到生产过程中可以采用持续的环境。
  2. 容器比虚机要更加透明,这更便于监控和管理。尤其是因为窗口的进程的生命周期是被基础设施直接管理而不是被容器中的进程管理器隐藏起来管理。
  3. 因为一个容器包含一个应用,这让对容器的管理等同于对应用部署的管理。

总结一下容器的优点:

  • 敏捷地应用创建和部署:相较于VM增加了容器镜像创建的效率。
  • 持续开发,集成和部署:通过快速的回滚操作(因为镜像的稳定性)提供可靠的经常的容器镜像的创建和部署。
  • 开发和运行相分离:在build或者release 的阶段(而非部署阶段),使得应用和基础设施解耦。
  • 开发,测试和生产环境的持续:在笔记本上可以像在云中一样的运行。
  • 云和操作系统版本的可移植性:可以运行在 Ubuntu, RHEL, CoreOS, on-prem, Google Container Engine,和任何其它的运行环境中。
  • 应用为中心的管理:提升了虚拟化的层次,从虚拟硬件上运行操作系统的抽象到操作系统中应用逻辑资源的虚拟。
  • 松耦合,分布式,弹性,自由的微服务:应用被打散成更小的,独立的小碎片并且可以动态地部署和管理——而非是一个在用途单一的庞大机器中运行的一个臃肿堆栈中。
  • 资源隔离:可以预测的应用性能。
  • 资源使用:高效。

为什么需要Kubernetes,利用它又能做些什么呢?

Kubernetes可以安排物理机或者虚拟机上运行的应用容器的使用。

当然它不只可以做这些。

为了充分发挥它的潜能,你需要剪断物理机虚拟机的束缚。

然而,一旦特定的容器不再局限于特定的主机,主机为中心的基础设施便不再适用了:组管理,负载均衡,自动扩展等。你需要的是以容器为中心的基础设施。而这正是Kubernetes所提供的。

Kubernetes可以满足很多运行环境中应用的通用的需求,比如:

  • 进程协同,利用复合应用保证应用和容器一对一的模型。
  • 存储系统挂载
  • 分发密钥
  • 应用健康检测
  • 应用实例复制
  • 水平自动扩展
  • 命名和发现
  • 负载均衡
  • 滚动更新
  • 资源监控
  • 日志访问
  • 自检和调试
  • 识别和认证

这为PaaS提供了IaaS层的便利,提供了基础设施提供者间的可移植性。

Kubernetes是个什么样的平台呢?

尽管Kubernetes提供了很多功能,总有一些新的场景可以从这些功能中获益。特定的应用工作流可以提高开发者的开发速度。最新可以接受的组合常常需要强劲的大规模的自动化。这也是为什么Kubernetes构建以来为什么要做一个让应用的部署、扩展和管理更便捷的生态平台的原因。

Labels让用户可以随心所欲地组织自己的资源。 Annotations让用户可以给资源添加定制化的信息以充分使用自己的工作流,提供一种简单的管理工具。

此外,Kubernetes control plane本身也是基于公布给开发者和用户相同 的一组API。用户可以自己定开发自己的controllers, schedulers等。如果愿意,它们甚至可以用自己的API 开发自己的command-line tool.

这样的设计也让很多其它系统可以构建于Kubernetes之上。

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并不重要:达到目的就好。当然也是需要中心控制的;方法更像排舞的过程。这让这个系统更加好用更加强大、健壮、 有弹性且可扩展。

Kubernetes单词是什么意思呢? 为什么又叫K8s?

Kubernetes起源于希腊语, 是“舵手”或者“领航员”的意思,是“管理者”和“控制论”的根源。 K8s是把用8代替8个字符“ubernete”而成的缩写。

更多讨论:QQ交流群  513817976  入群暗号: kubernetes.org.cn

更多参考:http://kubernetes.io/docs/whatisk8s/