【问题标题】:Docker Swarm, Kubernetes and ComposeDocker Swarm、Kubernetes 和 Compose
【发布时间】:2018-04-01 11:38:46
【问题描述】:

我刚刚听说在未来的 Docker 版本中支持原生 Kubernetes。我以前从未使用过 Kubernetes,所以我开始阅读它。但我有点困惑:Kubernetes 被描述为 编排 工具,也是 Dockers swarm mode 的替代品。

那么如果 Kubernetes 做编排,它也是 docker-compose 的替代品吗?或者可以组合Kubernetes一起使用吗?

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

  • 我有一个包含多个微服务的 docker-compose 文件,但它们在单台机器上作为独立应用程序运行。它可以(或应该)被 Kubernetes 取代吗?
  • 我有一个 docker-compose 文件,其中配置了多个以集群模式(在多台机器上运行)的服务。哪个部分必须被 Kubernetes 替换?整个撰写文件?或者是否可以在 compose 文件中定义基本配置(env_var、volumes、command,...)并仅使用 Kubernetes 来编排集群?

【问题讨论】:

    标签: docker kubernetes docker-compose docker-swarm


    【解决方案1】:

    首先,Kubernetes 和 Docker 的 Swarm“模式”都是容器编排工具。 Docker compose,该工具和 YAML 文件格式,历来是描述多容器应用程序的方式,然后将这些应用程序部署到 Docker 的 Swarm 模式编排器中。

    Kubernetes 有自己的 YAML 服务定义(和其他定义文件格式),它们不使用 compose 文件格式。

    然而,随着 Docker 宣布支持 Kubernetes,他们将为 Docker compose 工具提供功能,以获取 compose YAML 文件并部署该 compose 文件的“内容”(网络、服务 + env/ secrets) 到 Kubernetes 集群中,Kubernetes 编排引擎将这些组件放置在 K8s pod 上。

    基于以上陈述,您的问题实际上是关于您是否希望切换到在 Kubernetes YAML 中定义您的服务、环境、网络等,或者您是否会依赖 Docker 的支持来使用 compose 格式和目标 无论是 Swarm 模式还是 K8s。这更多是 Docker 支持 Kubernetes 或开源或其他商业 Kubernetes 选项之间的商业决策,因此您的问题不一定有直接(和/或完全正确)的答案。

    【讨论】:

    • "they will be providing the capability for the Docker compose tool to also target taking a compose YAML file and deploying the "content" of that compose file (networks, services + env/secrets) into a Kubernetes cluster" - 这是对我来说最重要的一句话,谢谢!
    【解决方案2】:

    那么如果 Kubernetes 做编排,它是不是也可以替代 码头工人撰写?

    简短回答:否

    这不仅仅是编排,本质上Kubernetes 是一个生产级容器编排和调度引擎。它比docker-compose 本身先进得多。我想说docker swarmkubernetesamazon ecs 属于同一类别。

    或者compose和Kubernetes可以一起使用吗?

    在 docker 引擎的下一个版本中,您将能够使用 docker-compose 创建 kubernetes 对象。但目前你还不能。

    我有一个包含多个微服务的 docker-compose 文件,但是 它们在单台机器上作为独立应用程序运行。可以(或 应该)它被 Kubernetes 取代吗?

    好的,在生产环境中运行它,我会说绝对,您绝对应该将您的应用程序托管在kubernetes 集群上,因为它提供了

    • resilience(如果 Pod 死亡,则重新安排它们的时间)
    • 缩放(基于 CPU 或任何其他指标缩放 Pod)
    • 负载平衡(提供 VIP 知道服务并将所有 pod 附加到它)
    • 秘密和配置管理
    • 命名空间(kubernetes 对象的逻辑分组)
    • 网络策略(控制 pod 之间流量的自定义策略)

    还有更多开箱即用的功能。当您声明一个状态时,kubernetes 将始终尝试实现并保持该状态。

    我有一个 docker-compose 文件,其中配置了多个服务 swarm 模式(在多台机器上运行)。必须是哪个部分 被 Kubernetes 取代?整个撰写文件?还是以某种方式 可以定义基本配置(env_var、volumes、command、 ...)在撰写文件中并仅使用 Kubernetes 来编排 聚类?

    我会用kubernetes 集群和对象定义yamls 替换整个swarm 集群和组合文件结构。话虽如此,根据我的经验,那些yamls 可能会有点冗长,所以如果您热衷于查看Helm。它是kubernetes 的包管理器,您没有必须使用它,但我认为它是目前kubernetes 生态系统中最好的工具之一,并且有很多开源图表随时可用。

    我强烈建议您在本地系统上使用minikube 来玩弄kubernetes,以熟悉一般概念。然后你就可以自己回答上述问题了。

    【讨论】:

      【解决方案3】:

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

      转换可能并不完美,因为 docker-compose 的“模式”和 Kubernetes 对象的模式之间没有一对一的匹配,但它应该能让你顺利进行。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 2018-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多