Kubernetes到底是做什么的?

160

Kubernetes被称为容器集群的"调度/编排器",但我不知道这是什么意思。在阅读了Kubernetes网站和(模糊的)GitHub wiki之后,我最好的理解是它会找出哪些虚拟机可以运行您的Docker容器,然后在那里部署它们。但这只是我的猜测,我没有在他们的文档中见到任何具体的措辞支持这一点。

那么Kubernetes确切是什么,以及它解决了哪些具体问题?


1
鉴于所有的Docker世界项目(如Kubernetes/Fleet/Swarm等)都难以解释它们的功能以及彼此之间的区别,我认为作为用户我们只能提出相对模糊的问题了...有人会问「Fleet和Kubernetes之间有什么区别」,回答是「你可以使用Fleet来启动Kubernetes」。有点遗憾呢。;-) - Torsten Bronger
10
我认为这是一个非常合理的问题,指出了文档中的一些缺陷。把它归结为太笼统是不公正的。对我来说,最好的方法就是下载 k8s 代码库,然后查找实例以弄清楚什么是 Pod。这对我非常有帮助。 - Beezer
3个回答

130

Kubernetes的目的是让您更轻松地在一组机器上组织和安排应用程序。从高层次来看,它是集群的操作系统。

基本上,它允许您不必担心数据中心中每个应用程序运行在哪个特定的机器上。此外,它还提供了用于健康检查和复制应用程序的通用基元,在这些机器上以及服务中进行布线,以便将应用程序连接到微服务中,使得应用程序中的每个层与其他层分离,以便您可以独立地扩展/更新/维护它们。

虽然在应用程序层面上也可能做到许多这些事情,但这些解决方案往往是一次性的和脆弱的,最好有关注点分离,其中一个编排系统关注如何运行您的应用程序,而您关注构成应用程序的代码。


3
谢谢 @brendan (+1) - 你的回答确实有帮助。不过我有一个后续问题:这不就是Apache Mesos所做的吗?Kubernetes和Mesos是彼此竞争对手吗?如果不是,它们可以一起使用吗(如果可以,如何)?再次感谢! - smeeb
2
@smeeb Mesos和Kubernetes相辅相成(后者作为Mesos框架得到支持)。Mesos提供更复杂的资源管理。换句话说,Kubernetes让Mesos根据可用容量决定使用哪个主机。Mesos支持其他框架。如果你阅读文档,你会发现Marathon是在Mesos管理的服务器集群上启动容器的另一种方式。 - Mark O'Connor

19

正如您从其Github页面所了解的:

Kubernetes是一个开源系统,用于管理跨多个主机的容器化应用程序,并提供部署、维护和扩展应用程序的基本机制。

Kubernetes是:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes是基于谷歌在生产环境中运行十多年的经验,结合社区最佳实践和思想,构建而成的容器编排工具。

它可以兼容任何容器引擎,但目前似乎仅限于Docker。其架构中有一些重要的概念:

Kubernetes与以下概念配合使用:

集群是构建您的容器的计算资源。Kubernetes可以在任何地方运行!请查看入门指南,了解各种服务的说明。

Pods是具有共享卷的Docker容器的共同组合体。它们是可创建、调度和管理的最小可部署单元。Pods可以单独创建,但即使创建单个Pod也建议使用复制控制器。更多关于Pods的信息。

复制控制器管理Pods的生命周期。它们通过根据需要创建或销毁Pods,确保指定数量的Pods在任何给定时间运行。更多关于复制控制器的信息。

Services为一组Pod提供单一、稳定的名称和地址。它们作为基本的负载均衡器。更多关于Services的信息。

标签用于基于键值对组织和选择对象组。更多关于标签的信息。

因此,您可以将一组机器形成一个集群,在其中运行您的容器。您还可以定义一组提供服务的容器,类似于其他工具(如fig)(例如:webapp pod可以是rails服务器和postgres数据库)。您还有其他工具来确保同时运行一定数量的容器/ Pod,键值存储,一种内置负载均衡器等。

如果您了解coreos,则它是谷歌提供的非常相似的解决方案。Kubernetes还与Google Cloud Engine良好地集成。


2
谢谢@jcortejoso (+1) - 但是如果您不介意,我有几个后续问题:**(1)** 您说Kubernetes类似于CoreOS,但来自Google。这意味着Kubernetes和CoreOS解决了同样的问题。但是从Kubernetes官网上看,它说您可以在CoreOS上安装Kubernetes。那么到底是哪一个?!?Kubernetes和CoreOS是相同的吗,还是Kubernetes在CoreOS上运行并解决特定问题? - smeeb
1
此外**(2)**,我仍然没有看到Kubernetes的“编排”在这里的价值。您说可以使用Kubernetes定义提供服务的一组容器,这让我想到了两件事:(2a) 我不能只在应用程序层面上进行此类型的集群化,并将我的应用程序放在nginx负载均衡器后面吗?(2b) 这就是“编排”的全部内容吗?对我来说,它似乎只是负载平衡,在应用程序层面上很容易实现。你有什么想法?再次感谢您的精彩回答! - smeeb
1
如果 Kubernetes 是“轻量级”的,那么我想知道什么是“臃肿的解决方案”。 - Torsten Bronger
@smeeb 我对nginx不是很熟悉(所以请原谅我的幼稚),但我认为nginx不会重新启动已经崩溃的服务器;如果一台机器(或整个数据中心)宕机,nginx也不会在另一台机器上重新启动您的应用程序。Kubernetes将确保您始终在某个地方运行n个“pod”,而无论在哪里或如何运行都不重要。 - kgreenek

12
Kubernetes提供了基础设施即服务API的大部分功能,但是面向的是动态调度的容器而不是虚拟机,并且具有更高的灵活性,包括:
  • 挂载存储系统,
  • 分发密钥,
  • 应用健康检查,
  • 复制应用实例,
  • 横向自动扩展,
  • 命名和发现,
  • 负载均衡,
  • 滚动更新,
  • 资源监视,
  • 日志访问和摄取,
  • 支持内省和调试,以及
  • 身份验证和授权。

如果您已经使用其他机制进行服务发现、密钥分发、负载均衡、监控等,当然可以继续使用它们,但我们旨在通过提供这些功能,使从现有IaaS和PaaS系统到Kubernetes的过渡变得容易。

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接