Docker Swarm、Kubernetes和Compose

10

我刚听说Docker未来版本将原生支持Kubernetes。我之前从未使用过Kubernetes,所以开始了解它。但是我有些疑惑:Kubernetes被描述为一个编排工具,也是Docker swarm mode的一种替代方案。

那么,如果Kubernetes负责编排,它是否也是docker-compose的替代方案?或者可以同时使用compose和Kubernetes吗?

以下是一些具体问题: 假设我想(或必须)使用Kubernetes:

  • 我有一个docker-compose文件,其中包含多个微服务,但它们作为独立应用在单台机器上运行。这个文件可以(或应该)被Kubernetes取代吗?
  • 我有一个docker-compose文件,在swarm模式下配置了多个服务(在多台机器上运行)。哪部分需要被Kubernetes替换?整个compose文件吗?还是可以仅使用compose文件定义基本配置(env_var、volumes、command等),然后使用Kubernetes进行编排集群?
3个回答

10
如果 Kubernetes 负责编排,那么它能否替代 docker-compose 呢?
简短回答:不行。
Kubernetes 不仅仅是一个编排工具,它本质上是一款生产级别的容器编排和调度引擎。它比 docker-compose 更为高级。我认为 docker swarm、kubernetes 和 amazon ecs 属于同一类别。
那么,docker-compose 和 Kubernetes 可以一起使用吗?
在下一个版本的 docker 引擎中,您将能够使用 docker-compose 创建 kubernetes 对象。但目前还不能这样做。
我有一个 docker-compose 文件,其中包含多个微服务,但它们作为独立应用程序在单台机器上运行。可以(或应该)使用 Kubernetes 替换它吗?
好的,在生产环境中,我可以毫不犹豫地说,你绝对应该把应用托管到 Kubernetes 集群中,因为它提供了:
- 可靠性(如果 Pod 挂了就重新调度) - 扩展性(基于 CPU 或其他任何指标缩放 Pod) - 负载均衡(提供 VIP 知道服务并将所有 Pod 附加到它) - 密钥和配置管理 - 命名空间(逻辑分组 Kubernetes 对象) - 网络策略(自定义策略以控制 Pod 之间的流量) - 以及许多其他开箱即用的功能。当您声明了一个状态后,Kubernetes 将始终尝试实现和维护该状态。
我有一个 docker-compose 文件,其中包含在群集模式下配置的多个服务(在多台机器上运行)。哪一部分必须由 Kubernetes 替换?整个 compose 文件?或者是否可以仅使用 Kubernetes 来编排群集并定义基本配置(env_var、卷、命令等)?我会用一个 kubernetes 集群和对象定义的 yaml 来替换整个 swarm 集群和 compose 文件构建。尽管如此,根据我的经验,这些 yamls 可能会变得有些冗长,所以如果您感兴趣,请查看 Helm。它是一个针对kubernetes的软件包管理器,您不一定需要使用它,但我认为它是目前 kubernetes 生态系统中最好的工具之一,并且有大量的开源图表可以使用。
我强烈建议在本地系统上使用 minikube 玩转 kubernetes,以便熟悉一般的概念。然后您就能够自己回答上述问题了。

5
首先,Kubernetes和Docker Swarm“模式”都是容器编排工具。历史上,Docker compose是描述多容器应用程序的工具和YAML文件格式,然后部署到Docker Swarm模式编排器中。
Kubernetes有自己的YAML服务定义(和其他定义文件格式),不使用compose文件格式。
然而,随着Docker Kubernetes支持的宣布,他们将提供Docker compose工具的能力,以便将compose YAML文件部署到Kubernetes集群中,并由Kubernetes编排引擎将这些组件放置在K8s pod上。
基于以上陈述,您的问题实际上是关于是否要切换到在Kubernetes YAML中定义服务、环境、网络等,还是依赖Docker的支持来使用compose格式并针对Swarm模式或K8s进行操作。这更多是一个关于Docker对Kubernetes的支持或开源或其他商业Kubernetes选项之间的业务决策,因此并没有直接(或完全正确)的答案。

1
他们将提供Docker Compose工具的功能,使其能够针对Compose YAML文件并将该Compose文件的“内容”(网络、服务+环境/密钥)部署到Kubernetes集群中。 - Munchkin

0

今天您可以使用kompose(https://github.com/kubernetes/kompose)将现有的docker-compose文件与Kubernetes一起使用。 kompose将在运行时将您的docker-compose服务转换为Kubernetes对象。

由于docker-compose的“模式”与Kubernetes对象的模式之间没有一对一的匹配,因此转换可能不完美,但它应该能够帮助您入门。

如果您的目标是在单台机器上运行,则无需使用Kubernetes。但是,如果您已经使用了docker-compose文件的swarm模式,则应该尝试使用kompose


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