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 集合的模块
k8s
模块创建了一个命名空间,minecraft
。helm_repository
模块添加了itzg
Helm 存储库,其中包含 Minecraft Helm chart。helm
模块部署 chart 并创建 Minecraft 服务器实例。k8s_info
模块检索 Minecraft 运行的 NodePort,以便您可以从 Minecraft 连接到它。
该 playbook 假定您已经有一个正在运行的 Kubernetes 或 OpenShift 集群以及一个指向该集群的 kubeconfig 文件。如果不是,请在您的工作站上创建一个 Minikube 集群
- 确保您已安装 Minikube。
- 运行
minikube start
,并等待集群创建完成。
确保您已安装 Ansible 和 Helm,然后运行 playbook
ansible-playbook minecraft.yml
几分钟后,Minecraft 服务器将生成一个出生区域,并准备好接受连接!playbook 应该在其输出的末尾提供 Minecraft NodePort(例如,Minecraft NodePort:32393)。
使用 minikube ip
获取您的 Minikube 集群的 IP 地址,将 NodePort 添加到其中(在我的例子中为 192.168.64.19:32393),然后打开 Minecraft 并连接到它
- 单击 多人游戏。
- 单击 直接连接。
- 输入服务器地址(Minikube IP 和 Minecraft NodePort)。
- 单击 加入服务器。
瞧!您应该能够在您自己的 Kubernetes 集群上运行的小虚拟 Minecraft 世界中玩耍了。

(Jeff Geerling, CC BY-SA 4.0)
使用以下命令查看服务器日志
kubectl logs -f -n minecraft -l app=minecraft-minecraft;
在日志中,您可以看到我成功地找到了许多在我的小 Minecraft 世界中死亡的方法!

(Jeff Geerling, CC BY-SA 4.0)
更进一步
有数十种方法可以将 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 日举行的虚拟体验。
评论已关闭。