我们希望听到你的声音!帮助我们深入了解 Ansible 生态系统的现状。
参加 2024 年 Ansible 项目调查

使用 Ansible 自动化 Helm

使用 Ansible 自动化 Helm

不断增长的业务需求推动着对更多自动化的需求,以支持快速、稳定且可靠的应用程序和支持基础设施部署。Kubernetes 和云原生技术也不例外。对于 Kubernetes 平台,Helm 是在任何集群上打包、配置和部署应用程序和服务的标准方式。

我们最近发布了 kubernetes.core 1.1,这是我们第一个面向大众的红帽认证内容集合发布版本。新引入的内容中很大一部分是支持自动化 Helm 操作。在这篇博文中,我将向您展示在自动化中使用它的几种常见场景。

请注意,在 kubernetes.core 1.1 发布之前,其内容以 community.kubernetes 的形式发布。由于该内容已成为红帽支持和认证内容,因此需要更改名称。我们正在 进行过渡

Helm 简介

Helm 是一个开源工具,用于打包和部署 Kubernetes 上的应用程序。它通常被称为 Kubernetes 包管理器。它被 Kubernetes 社区和云原生计算基金会 (CNCF) 的毕业项目广泛采用。

Helm 通过抽象许多复杂性来简化应用程序的部署。这使得更容易采用并允许团队提高生产力。

Helm 被设计为专门针对 Kubernetes 的包管理器。它支持 Kubernetes 应用程序的安装、删除、升级、回滚和降级等操作。如您所知,Kubernetes 应用程序可以使用声明性资源文件来定义,这些文件用于不同的 Kubernetes 对象,如 Deployment、Services、ConfigMaps、PersistentVolumeClaims 等。分发和管理 Kubernetes 应用程序很困难。Helm 将所有 Kubernetes 资源文件打包成一种称为“图表”的格式。图表可以被认为是 Kubernetes 包。这种打包格式包含有关资源文件、依赖信息和元数据的信息。

使用 Ansible 自动化 Helm

您可以使用 Ansible 自动化您的 Kubernetes 基础设施。所有 Kubernetes 模块现在都位于名为 kubernetes.core 的 Kubernetes 集合中。该集合还包含用于自动化 Helm 及其相关功能的模块。

以下是 kubernetes.core 集合中包含的与 Helm 相关的模块列表:

  1. helm - 使用 Helm 二进制文件管理 K8S 包
  2. helm_info - 收集有关集群中部署的 Helm 包的信息
  3. helm_plugin - 管理 Helm 插件
  4. helm_plugin_info - 收集有关 Helm 插件的信息
  5. helm_repository - 管理 Helm 仓库

Helm 模块利用了安装在 Ansible 控制器上的 Helm 二进制文件。这使得 helm 模块开箱即用,并且对用户来说很容易获得。与以前的 helm 模块不同,这些模块独立于任何第三方 Python 库。感谢 LucasBoisserie 的贡献。

让我们看看在一些常见场景中使用的这些模块。

场景 1 - 添加新的 Helm 仓库

为了安装 Helm 包,您需要在 Kubernetes 集群中添加 Helm 仓库。

现在让我们使用 helm_repository 模块添加一个 Helm 仓库

---
- hosts: localhost
  vars:
     helm_chart_url: "https://charts.bitnami.com/bitnami"
  tasks:
      - name: Add helm repo
        kubernetes.core.helm_repository:
            name: bitnami
            repo_url: "{{ helm_chart_url }}"

在这里,我们通过指定 URL 和名称来安装一个新的 Helm 图表仓库。运行此剧本后,您将在环境中安装 Bitnami 图表仓库。

# helm repo list
NAME     URL
stable     https://kubernetes-charts.storage.googleapis.com/
bitnami    https://charts.bitnami.com/bitnami

场景 2 - 安装 Helm 图表

现在,我们已配置 Helm 仓库。现在让我们从 Bitnami 仓库安装 nginx 图表。

---
- hosts: localhost
  tasks:
     - name: Install Nginx Chart
       kubernetes.core.helm:
           name: nginx-server
           namespace: testing
           chart_ref: bitnami/nginx

运行此剧本后,您将在测试环境中看到 nginx-server 部署正在运行。

# kubectl -n testing get deploy
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
nginx-server      1/1     1            1           48s

场景 3 - 收集有关已安装 Helm 图表的信息

使用 helm_info 模块也可以轻松收集有关 Helm 图表的信息。

---
- hosts: localhost
  tasks:
     - name: Gather information about nginx-server
       kubernetes.core.helm_info:
            name: nginx-server
            release_namespace: testing

运行此剧本将提供有关已安装图表的有价值信息,例如应用程序版本、图表版本、修订版、状态和关于给定图表的更新日期时间。

场景 4 - 安装 Helm 插件

Helm 允许您通过提供可插拔的架构来增强其功能。这意味着用户可以编写插件来增强 Helm 的功能。有大量的 Helm 插件可用。用户可以根据自己的用例和需求安装这些插件。

现在让我们尝试安装名为 helm env 的 Helm 插件。此 helm 插件允许用户查看 helm 插件可用的环境变量。

---
- hosts: localhost
  tasks:
     - name: Install Helm Plugin
       kubernetes.core.helm_plugin:
           plugin_path: https://github.com/adamreese/helm-env
           state: present
           release_namespace: testing

场景 5 - 收集有关 Helm 插件的信息

用户可以从给定的 Kubernetes 集群中收集有关已安装 Helm 插件的信息。

---
- hosts: localhost
  tasks:
  - name: Gather Helm plugin info
    kubernetes.core.helm_plugin_info:
        release_namespace: testing
    register: r

  - name: Print plugin version
    debug:
    msg: "{{ ( r.plugin_list | selectattr('name', 'equalto', plugin_name) | list )[0].version }}"
    vars:
    plugin_name: "env"

这将输出与来自给定命名空间的插件相关的所有信息。用户可以指定特定插件名称来收集其信息。

结论和下一步

有了 kubernetes.core 中的 Helm 模块,您可以轻松地以可重复且可靠的方式自动化 Kubernetes 应用程序的管理。我们希望您尝试一下并告诉我们您的想法。请访问 Ansible Kubernetes IRC 频道,即

ansible-kubernetes,位于 Freenode 上,以

提供宝贵的反馈或如果您需要 kubernetes.core 集合的帮助。

在以后的文章中,我们将介绍 kubernetes.core 中的其他新功能,并介绍我们目前正在开发的 community.okd(OpenShift)集合