我已经使用 Docker 有一段时间了,并且已经拥有一个生产环境,起初规模很小,但现在已经发展到 50 多个 Linux 节点,每个节点都运行一个 Docker 容器。
我一直在使用自定义 python 脚本来编排一切,到目前为止效果很好,但由于我们可能会继续扩展,所以我想在某个时候我将需要一个可靠、灵活的编排工具,所以不妨现在就开始计划一切。
我开始阅读有关 docker 编排选项的文章,到目前为止我将其缩小到两个选项:Kubernetes 或 docker-swarm。
从 Kubernetes 来看,它似乎是正确的选择(作为一个强大、灵活的编排系统),但我不确定它是否适合我的环境。从我读到的内容来看,它无法处理已经存在的 Docker 容器,只能用于从头开始创建新集群。在我们的案例中,我们使用具有特殊硬件要求的专用服务器,因此我们不可能有另一个并行的备用集群,以便我们可以使用 Kubernetes 重新开始。
另一方面,docker-swarm 看起来更适合协调现有的 docker 容器,但似乎存在可靠性和扩展性问题。
有丰富 Kubernetes/docker-swarm 经验的人能否给我一些建议,告诉我应该如何迁移到精心策划的 docker 集群,而不需要从头开始创建一个(因为在我的情况下这是不可能的)?
谢谢你!
答案1
我不太了解 Docker Swarm,但我可以分享我对 Kubernetes 方面的想法。
无论如何,如果您想在环境中进行更改,您将需要一些额外的机器 - 您的机器使用率为 90%,所以我不知道在当前情况下您如何迁移或开始使用 Kubernetes。除了逐个关闭节点并逐步迁移到 Kubernetes。您可以尝试将两个当前节点更改为 1 个 kubernetes 主节点和 1 个节点(例如使用 kubespray),然后将您的容器作为部署加入集群。
您已经提到,您无法开始编排正在运行的容器,因为您需要从头开始启动它才能开始使用 Kubernetes - 但这里有一件事很重要。如果您正确使用 K8s,您将永远不会再遇到此问题。Kubernetes 的声明方式以及一切都是 yaml 文件的事实使未来变得更容易。您只需要备份您的服务、部署、配置图等,这个问题将来就会消失。此外,编排、自我修复、升级和扩展将不再如此复杂。
长话短说,我并不声称我所写的是唯一正确的方法,我只是想分享一下如果你处在这样的处境下我会怎么做。
您已经提到您正在租用硬件 - 那么为什么不转移到云上呢?您不需要立即移动所有内容。我的意思是 - 在云中重新创建您的基础设施 - 可能是在托管的 Kubernetes 服务(GKE、EKS、AKS 或许多其他服务)中,因为它们最容易管理,并且如果您的集群出现问题,Google/AWS/Azure 等工程师将为您提供帮助。在您完成云中的环境并且它按预期工作后,您就可以决定下一步了。
是否值得保留所有基础设施,或者最好返回本地?在这种情况下,您已经拥有使用 Kubernetes 的经验,准备好 YAML 文件、备份等。将其从 Cloud Kubernetes 迁移到本地 Kubernetes 将更加简单 - 您需要做的只是几乎 1:1 的迁移 + 一些网络调整。
有免费试用版,因此您可以通过这种方式测试这是否适合您 - 在 GCP 中,您可以获得 300 美元的免费试用版,并且他们还提供持续使用折扣。因此,您可以在较小规模上测试您的应用程序。在 AWS 中有一个免费套餐,应该足以测试一些基本功能。不确定其他云提供商,但他们肯定有相应的优惠。
因此,您可以尝试部分迁移到云并尝试在本地和云之间划分流量,或者将整个基础架构复制到云,然后在本地重现它(如果您愿意的话)。
另一种方法是关闭两个节点,在其上创建一个 Kubernetes 主节点和节点,然后慢慢地将节点逐个加入集群。这也取决于您正在运行什么类型的应用程序,您是否能承受停机时间等。但这一切都可以通过金丝雀部署等方法解决。