使用 Ansible 的 Helm 模块构建 Kubernetes Minecraft 服务器

使用 Ansible 的新集合将 Minecraft 服务器部署到 Kubernetes 集群中。
124 位读者喜欢这篇文章。
Ship captain sailing the Kubernetes seas

Ansible 转向内容集合的最佳成果之一是,它将 Ansible “核心”存储库中的数千个模块分散到更多独立的存储库中。这意味着长期延迟的问题和模块(通常是由于存储库中大量的问题和拉取请求)可以更快地取得进展。

显然,并非所有模块都会获得与其他模块相同的喜爱和赞赏——这就是开源的运作方式:更受欢迎的事物会蓬勃发展,而其他事物可能会稍微衰落——但积极影响的一个鲜明例子是 Kubernetes 集合整合一些期待已久的 Helm 模块的能力。

特别感谢 LucasBoisserie 的工作,三个新的 Helm 模块被合并到 Kubernetes 集合中

  • helm
  • helm_info
  • helm_repository

Ansible 长期以来一直有一个 helm 模块,但长期以来它相当破碎,仅适用于旧版本的 Helm,并且计划在 Ansible 2.14 中弃用。该版本的模块在 Ansible 的常规社区发行版中仍然可以以相同的方式工作,因为它现在已移至 community.general 集合。

但是,如果您想使用这些新模块来自动化使用 Kubernetes 容器编排系统的 Helm 部署,则可以使用 community.kubernetes 集合来完成。

什么是 Helm?

Helm 说它是“查找、共享和使用为 Kubernetes 构建的软件的最佳方式。”

目前有数十种方法可以将软件部署到 Kubernetes 和 OpenShift 集群中(您甚至可以使用 Ansible 原生地使用 k8s 模块来完成),但 Helm 通常是 Kubernetes 部署最容易的入门方式,尤其是在您刚开始 Kubernetes 之旅时。

Helm 的工作方式是,人们维护“chart”,这些 chart 是描述“如何将应用程序 XYZ 部署到 Kubernetes 中”的模板。Chart 可以具有“values”,这些 values 会覆盖部署 chart 的默认设置。

Helm Hub 上有数千个 chart 可用于安装流行的软件。如果您的软件未包含在内,您可以构建和托管您自己的 Helm chart 存储库。

什么是 Minecraft?

对于特定一代人(或他们的父母)来说,这个问题不需要答案:Minecraft有史以来最畅销的视频游戏,它吸引了极其广泛的受众,因为您可以通过多种不同的方式来玩它。

我记得在大学毕业后的几年里,我花了一个小时左右的时间来照料我在我的小虚拟 Minecraft 世界中建造的农场。Minecraft 现在几乎可以在任何带有屏幕的计算设备上运行,并且网络游戏已变得非常流行。为了支持这一点,Minecraft 团队维护了一个 Minecraft 服务器应用程序,您可以运行该应用程序与您的朋友进行网络游戏。

Ansible 在哪里发挥作用?

我喜欢将 Ansible 视为将自动化结合在一起的“胶水”。我之前写过 Ansible 在云原生环境中的作用,因此我不会重复我为什么使用 Ansible 来管理我的 Kubernetes 基础设施。

在本文中,我将向您展示如何编写一个简短的 Ansible playbook 来管理集群中 Helm 的 Minecraft chart 的设置。在真实的基础设施中,此 playbook 将是一组 plays 中的一小部分,这些 plays 将

  • 构建或配置 Kubernetes 集群
  • 将监控工具部署到集群中
  • 将应用程序部署到集群中

在您可以编写 playbook 之前,您必须安装 Ansible 的官方 Kubernetes 集合。您可以通过在 requirements.yml 文件中要求它来完成此操作(Ansible Tower 可以使用该文件自动安装集合),或者手动安装它

ansible-galaxy collection install community.kubernetes

一旦您拥有了集合,就可以编写 playbook 了。为了方便您查看代码或下载文件,我已将我的 minecraft.yml playbook 发布为 GitHub 上的 Gist。

该 playbook 使用了许多 Kubernetes 集合的模块

  1. k8s 模块创建了一个命名空间,minecraft
  2. helm_repository 模块添加了 itzg Helm 存储库,其中包含 Minecraft Helm chart。
  3. helm 模块部署 chart 并创建 Minecraft 服务器实例。
  4. k8s_info 模块检索 Minecraft 运行的 NodePort,以便您可以从 Minecraft 连接到它。

该 playbook 假定您已经有一个正在运行的 Kubernetes 或 OpenShift 集群以及一个指向该集群的 kubeconfig 文件。如果不是,请在您的工作站上创建一个 Minikube 集群

  1. 确保您已安装 Minikube
  2. 运行 minikube start,并等待集群创建完成。

确保您已安装 AnsibleHelm,然后运行 playbook

ansible-playbook minecraft.yml

几分钟后,Minecraft 服务器将生成一个出生区域,并准备好接受连接!playbook 应该在其输出的末尾提供 Minecraft NodePort(例如,Minecraft NodePort:32393)。

使用 minikube ip 获取您的 Minikube 集群的 IP 地址,将 NodePort 添加到其中(在我的例子中为 192.168.64.19:32393),然后打开 Minecraft 并连接到它

  1. 单击 多人游戏
  2. 单击 直接连接
  3. 输入服务器地址(Minikube IP 和 Minecraft NodePort)。
  4. 单击 加入服务器

瞧!您应该能够在您自己的 Kubernetes 集群上运行的小虚拟 Minecraft 世界中玩耍了。

使用以下命令查看服务器日志

kubectl logs -f -n minecraft -l app=minecraft-minecraft;

在日志中,您可以看到我成功地找到了许多在我的小 Minecraft 世界中死亡的方法!

更进一步

有数十种方法可以将 Minecraft 服务器之类的应用程序部署到 Kubernetes 集群中。幸运的是,Ansible 已经通过其 Kubernetes 集合支持大多数这些选项!如果您想超越简单的部署和 chart 更新,您可以使用 Ansible 和 Operator SDK 构建 Kubernetes operator——事实上,有人已经制作了一个用 Ansible 构建的 社区 operator,它可以运行 Minecraft 服务器!

在使用 Ansible 管理用 Raspberry Pi 构建的七节点 Kubernetes 集群后,我受到了启发来撰写本文。您可以在 Turing Pi Cluster GitHub 存储库中了解更多信息。


如果您想了解更多关于 Ansible 的信息,请务必注册 AnsibleFest,这是一个将于 10 月 13-14 日举行的虚拟体验。

接下来阅读什么
Jeff Geerling
我参与了许多开源开发社区(如 Drupal 和 Ansible),我是《Ansible for DevOps》和《Ansible for Kubernetes》的作者,并且我参与了许多大型网站和应用程序的开发。

评论已关闭。

© . All rights reserved.