152

Kubernetes被称为容器集群“调度器/编排器”,但我不知道这意味着什么。在阅读了 Kubernetes 站点和(模糊的)GitHub wiki 之后,我能说的最好的就是它以某种方式确定了哪些 VM 可用/能够运行您的 Docker 容器,然后将它们部署在那里。但这只是我的猜测,我还没有在他们的文档中看到任何具体的措辞来支持这一点。

那么 Kubernetes到底是什么,它解决了哪些具体问题?

4

3 回答 3

125

Kubernetes 的目的是让您更轻松地在一组机器上组织和调度您的应用程序。在较高级别上,它是您的集群的操作系统。

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

虽然可以在应用程序层做很多这样的事情,但这样的解决方案往往是一次性的和脆弱的,最好有关注点分离,编排系统担心如何运行你的应用程序,而你担心构成您的应用程序的代码。

于 2015-01-22T18:03:18.600 回答
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 建立在 Google 15 年大规模运行生产工作负载的经验之上,并结合了来自社区的最佳创意和实践。

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

Kubernetes 使用以下概念:

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

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

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

服务为一组 pod 提供单一、稳定的名称和地址。它们充当基本的负载平衡器。更多关于服务。

标签用于根据键:值对组织和选择对象组。更多关于标签。

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

如果您对 coreos 有所了解,这是一个非常相似的解决方案,但来自 Google。Algo Kubernetes 与 Google Cloud Engine 有很好的集成。

于 2015-01-22T11:37:01.423 回答
11

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

于 2015-11-16T18:26:07.250 回答