【问题标题】:What is the "proper" way to migrate from Docker Compose to Kubernetes?从 Docker Compose 迁移到 Kubernetes 的“正确”方法是什么?
【发布时间】:2022-01-10 01:26:02
【问题描述】:

我的组织管理系统,其中每个客户端都配置了一个 VPS,然后他们的技术堆栈通过 Docker Compose 在该系统上启动。

数据使用 Docker Compose 卷存储在系统上。没有花哨的命名存储 - 只是很好的旧直接路径卷。

虽然此解决方案可行,但问题是此方法无法扩展。我们总是可以给 VPS 更多的 CPU/内存,但这并不能解决根本问题。

暂存/开发环境必须手动启动 - 并且没有服务冗余。我们目前的系统不可能进行热插拔。

Kubernetes 已向我推荐来解决我们的问题,但老实说,我不知道从哪里开始 - 大多数文档都很迟钝,而且我找不到遇到我们特殊困境的人。

最终目标是只拥有几台运行 Kubernetes 的高规格机器 - 具有冗余、分段以及根据需要启动新客户端的能力(无需配置额外的机器或外部 IP)。

我的组织需要使用哪些特定工具来实现这一目标?

是否有任何工具可以让我们将现有的 Docker Compose 堆栈引入 Kubernetes?

【问题讨论】:

  • Kompose 可能是尝试将 Compose 设置迁移到 Kubernetes 的最突出的工具,但它似乎只能让你达到 80%,而且你仍然需要真正了解 Kubernetes 才能涵盖最后一个20%。
  • 我们曾经/现在处于相同的情况(EC2 实例与 docker-compose 部署),并增加了对 kubernetes 部署的支持。我通过使用 helm 包管理器(可能不是最好的方法)开始了学习曲线,以了解如何将应用程序部署到 kubernetes、创建的对象以及 helm create 以创建自己的自定义图表。如果您的卷是共享的,您将无法使用主机挂载,需要考虑使用例如NFS(或其他支持ReadWriteMany的存储)。

标签: docker kubernetes docker-compose


【解决方案1】:

从哪里开始:鉴于您告诉我们的内容,我将首先研究实施一些 SDS 的选项。

您当前正在使用本地卷,如果您不想将容器绑定到唯一节点,您可能无法使用 Kubernetes 执行此操作 - 或者至少不应该这样做。

最简单的方法(虽然不一定是我推荐的方法)是使用一些 NFS 服务器。更好的是:使用一些 DRBD、pacemaker / corosync,使用 VIP 进行故障转移——或 FreeBSD 方式:hastd、carp、ifstated,也许还有一些 zfs。您可能必须部署不同的系统来扩展您的 Kubernetes 集群、分配 IO,...如果负载超过 50 并且 iowaits 激增,单个 NFS 服务器不会持续很长时间...

更好的方法是研究实际的 SDS 解决方案。我可以推荐的一个是 Ceph,尽管有很多我不太熟悉的新解决方案……而且我肯定会避免使用 GlusterFS。部署 Ceph 的一种简单方法是使用 ceph-ansible。

考虑到您可以使用的企业硬件,也许您会拥有一些 NetApp 或同等产品,可以实现 NFS 共享和/或一些 iSCSI 网关。

现在,这些都是您可以在旁边运行的解决方案,但请注意,您还可以找到“CNS”解决方案(容器原生),这些解决方案旨在部署在 Kubernetes 之上。 Ceph 集群可以使用 Rook 进行管理。这些可能很有趣,尽管在维护和操作方面,它需要对您运行的解决方案和 kubernetes/容器有很好的了解:故障排除和修复中断可能不像旧的裸元/VM那么容易设置。对于第一次 Kubernetes 体验:我会克制自己。当你感觉足够舒服时,继续。

在任何情况下,部署集群之前的另一个关键考虑因素是托管您的安装的网络。考虑到 Kubernetes 不应该直接部署在公共实例上:您可能希望拥有一些私有 VLAN、可能是内部 DNS、本地 resitry(可能是 Kubernetes 托管)或其他工具,例如 LDAP 服务器、一些 SMTP 中继, HTTP 缓存/代理, 负载均衡器放在你的 API 前面, ...

一旦您对这些问题下定决心,您就可以考虑使用 Kubespray (ansible) 或 Kops(使用 Terraform,因此需要一些云 API,例如:aws)等工具来部署 Kubernetes 集群。这两个项目都是 Kubernetes 项目的一部分,由其社区维护。 Kubespray 将涵盖所有场景(IAAS 和裸机),与流行的 SDS 开箱即用集成,可以附带各种入口控制器,...总体上提供了良好的默认设置,以及许多变量来自定义您的安装。

从 3-master 2-workers 集群开始,确保生成的集群符合您的预期。

在进行 prod 之前,请花点时间正确翻译您现有的配置。有时,重构代码或图像可能是值得的。

要进行生产,请考虑添加一组“基础设施”节点:如果您想托管一些日志记录解决方案或其他内部服务,这些服务对用户来说有些重要,并且不应该遭受由最终用户工作负载引起的中断(例如:入口路由器、监控、日志记录、集成注册表……)。

【讨论】:

  • 软件定义存储。我第一次听说那个。您认为研究 helm 值得还是我应该尝试使用 Kompose 手动完成所有操作?
  • 另外 - 在为客户端设置服务时,我应该弄乱命名空间吗?还是让每个人都在同一个 NS 上?
  • 每个命名空间最好有一个客户端,如果有共享服务的其他命名空间(操作员/控制器/...)。至于 Helm,这是我的看法:stackoverflow.com/questions/69236574/…
猜你喜欢
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多