Kubernetes实际上是做什么的?[关闭]


133

Kubernetes被称为容器集群“调度程序/协调器”,但是我不知道这意味着什么。在阅读Kubernetes网站和(模糊的)GitHub Wiki之后,我能说的最好的是,它以某种方式找出了可用的/能够运行Docker容器的VM,然后将其部署到那里。但这只是我的猜测,我还没有看到他们的文档中有任何具体的说法可以支持这一说法。

那么,什么是Kubernetes,准确,并有一些什么具体的,它解决的问题?


鉴于所有docker-world项目(kubernetes / fleet / swarm / etc)都难以解释它们的作用以及使它们与众不同的地方,我认为我们用户可以提供的所有问题都有些棘手。问“舰队和kubernetes有什么区别”,答案是“您可以使用舰队来启动kubernetes”。笨蛋 ;-)
Torsten Bronger

3
我认为这是一个完全正确的问题,并指出了doco中的一些不足之处。过于广泛地关闭它是有害的。对我而言,最好的方法就是下载k8s代码库,然后例如去那里查找Pod。那对我很有帮助。
Beezer

Answers:


112

Kubernetes的目的是使跨机器队列的应用程序的组织和调度变得更加容易。从总体上讲,它是集群的操作系统。

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

尽管可以在应用程序层中完成许多这些事情,但是这样的解决方案往往是一次性的且很脆弱,最好是将关注点分离开,因为编排系统担心如何运行应用程序,而您担心组成您的应用程序的代码。


3
感谢@brendan(+1)-您的回答绝对有帮助。不过,还有一个后续问题:这不是Apache Mesos所做的吗?Kubernetes和Mesos是彼此的竞争对手吗?如果没有,它们是否可以相互配合使用(如果可以,如何使用)?再次感谢!
smeeb,2015年

2
@smeeb Mesos和Kubernetes相辅相成(后者作为Mesos框架受支持)。Mesos提供了更复杂的资源管理。换句话说,Kubernetes让Mesos根据可用容量决定使用哪个主机。Mesos支持其他框架。如果您阅读文档,您会发现Marathon是在Mesos托管服务器群集上启动容器的另一种方法。
Mark O'Connor 2015年

18

当您从其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拥有Google在大规模运行生产工作负载上十五年的经验,并结合了社区中最好的想法和实践。

对我来说,Kubernetes是Google提供的容器编排工具。由于其设计,您可以实现与任何容器引擎的兼容性,但是我认为现在仅限于Docker。它的体系结构中有一些重要概念:

Kubernetes使用以下概念:

群集是在其上构建容器的计算资源。Kubernetes可以在任何地方运行!有关各种服务的说明,请参阅《入门指南》。

Pods是一组具有共享卷的Docker容器,位于同一位置。它们是可以使用Kubernetes创建,计划和管理的最小的可部署单元。可以单独创建Pod,但是即使创建单个Pod,也建议您使用复制控制器。有关豆荚的更多信息。

复制控制器管理容器的生命周期。它们通过根据需要创建或终止Pod来确保指定数量的Pod在任何给定时间运行。有关复制控制器的更多信息。

服务为一组Pod提供单个,稳定的名称和地址。它们充当基本的负载平衡器。有关服务的更多信息。

标签用于根据key:value对组织和选择对象组。有关标签的更多信息。

因此,您拥有一组计算机,这些计算机形成了运行容器的群集。您还可以定义一组提供服务的容器,就像使用无花果等其他工具一样(即:webapp pod可以是Rails服务器和postgres数据库)。您还拥有其他工具来确保服务的多个容器/容器同时运行,键值存储,一种内置的负载平衡器...

如果您对coreos有所了解,那是一个非常相似的解决方案,但来自Google。Algo 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 2015年

1
如果kubernetes是“轻量级的”,我想知道胖解决方案是什么。
Torsten Bronger

@smeeb我对nginx不太熟悉(请原谅我的天真),但我不认为nginx会重新启动已崩溃的服务器;如果一台机器(或整个数据中心)发生故障,nginx不会在另一台机器上重新启动您的应用程序。kubernetes将确保您始终在某个地方运行n个“ pod”,而实际上在哪里或如何都没有关系。
kgreenek

10

Kubernetes提供了与基础架构即服务API相同的功能,但针对动态调度的容器而不是虚拟机,以及针对平台即服务系统,但具有更大的灵活性,其中包括:

  • 安装存储系统,
  • 散布秘密
  • 应用程序运行状况检查
  • 复制应用程序实例,
  • 水平自动缩放
  • 命名和发现
  • 负载均衡,
  • 滚动更新
  • 资源监控,
  • 日志访问和提取
  • 支持自省和调试,以及
  • 身份和授权。

如果您已经使用其他机制进行服务发现,秘密分发,负载平衡,监视等,您当然可以继续使用它们,但是我们的目标是通过提供此机制来简化从现有IaaS和PaaS系统过渡到Kubernetes的过程。功能。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.