一、简介

随着应用的成长超过单台主机所能承受的负载,对编排系统(orchestration system)的需求也就出现了。编排系统帮助用户将一组主机(也称为节点)视为一个统一、可编程、可靠的集群。这个集群可以当作一台大型计算机赖使用。
Kubernetes简称k8s,是Google为满足这个需求而开发的开源项目。Kubernetes的想法来源于Borg和Omega,这两个项目在Google内部系统中已经经过了十几年的验证。Google所有的服务器都由这两个系统来运行和管理,包括Google搜索,Gmail等构建并运营Borg集群的许多工程师也参与到了Kubernetes的设计和开发之中。

二、增强功能

K8S集群在多个Docker节点之间进行协调,提供一个统一的可编程模型,它具有下面这些增强功能。

  • 可靠的容器重启

K8S可以监视容器的运行情况,并在出现故障时重新启动容器。

  • 自愈

如果一个节点失效了,K8S管理系统会自动将失效节点上的任务重新调度到健康的节点上。动态服务归属机制可 以确保这些新启动的容器能被发现并使用

  • 高集群利用率

通过在一组通用的计算机上调度一组不同类型的工作负载,与静态的手动配置方式相比,用户可以大幅提高计算机的利用率。集群越大,工作负荷种类越多,计算机的利用率就越高。

  • 组织和分组

在大型集群中,追踪所有正在运行的容器可能非常困难。Kubernetes提供了一个灵活的标签(label)系统,让 用户和其他系统可以以一组容器为单位来进行处理。此外,K8S支持命名空间功能,让不同的用户或团队在集群 中能在集群中看到相互隔离的不同视图。

  • 水平拓展和复制

K8S的目标是让横向拓展能够轻松进行。拓展和负载均衡都是大规模计算机中最基本的概念。

  • 微服务友好

K8S集群是采用微服务架构团队的一个完美伴侣。应用程序可以被分解成更易于开发,拓展和推导的更小单位。K8S提供了服务发现以及与其他服务进行通信的方式。

  • 简化运维

K8S可以由专门的团队来负责运维。对K8S集群和其所运行节点的管理可以由专门的团队来负责或外包给云服务。指定应用程序的运维团队(或者开发团队自己)可以专注应用程序的运行,而不必去具体地管理各个节点。

三、全新的概念

Docker非常适合单台主机上运行容器,K8S则解决的是传统多节点通信和规模拓展所带来的挑战。为此,K8S提出了下面一组全新的概念。

  • 集群调度

选择一个节点来运行新容器,以优化集群的可靠性和利用率的过程

  • pod

必须将一组容器放置到同一节点上,像一个团队一样工作。在一个节点上将一组容器紧密地联系在一起,是使应用更易管理的一种强大方式。

  • 标签

添加到pod的元数据,用于对容器进行分组进行监控和管理。

  • replication controller

用于确保系统能进行水平拓展的代理(agent),也负责保证对pod进行可靠的管理。

  • 网络服务

一种用于在pod之间以及几组pod之间进行通信的方式,采用了动态配置的命令和网络代理