跳转至

kubernetes Helmfile 文件

Helmfile

前面我们已经了解了 Helm 的使用,但在实际使用场景中的一些需求 Helm 并不能很好的满足,需要进行一些修改和适配,比如当我们需要同时部署多个 chart、不同部署环境的区分以及 chart 的版本控制的时候,这个时候我们可以使用一个 Helmfile 的工具来解决这些场景的问题。

Helmfile 是一个声明式 Helm Chart 管理工具,通过一个 helmfile.yaml 文件来帮助用户管理和维护众多的 Helm Chat,其最主要作用是:

  • 集成在 CI/CD 系统中,提高部署的可观测性和可重复性,区分环境,免去各种 --set 造成的困扰。
  • 方便对 helm chart 进行版本控制,如指定版本范围、锁定版本等。
  • 定期同步,避免环境中出现不符合预期的配置。

Helmfile 的主要特点有:

  • 声明式:编写、版本控制、应用所需的状态文件以实现可见性和可再现性。
  • 模块:将基础架构的通用模式模块化,通过 Git、S3 等进行分发,以便在整个公司复用。
  • 多功能性:管理由 charts、kustomizations 和 Kubernetes 资源目录组成的集群,将所有内容转换为 Helm releases。
  • Patch:JSON/Strategic-Merge 在 helm 安装之前 patch Kubernetes 资源,无需分叉上游 charts。

安装

helmfile 提供了多种安装方式,我们可以直接在 release 页面 https://github.com/helmfile/helmfile/ 选择合适的包下载,比如我们这里是 Mac m1 环境就选择 darwin_arm64 的包:

$ wget https://github.com/helmfile/helmfile/releases/download/v0.168.0/helmfile_0.168.0_linux_arm64.tar.gz
$ tar -xvf helmfile_0.168.0_linux_arm64.tar.gz
$ chmod +x helmfile && sudo mv helmfile /usr/local/bin
$ helmfile version                                                                                                         (csg/infra)
🌴 OPENBAYES_ENV: ()
📫 KUBECONFIG: (), file ()

>>> HELM_DIFF_USE_UPGRADE_DRY_RUN=true helmfile version


▓▓▓ helmfile

  Version            0.166.0
  Git Commit         655e1f9
  Build Date         26 Jun 24 21:33 CST (2 months ago)
  Commit Date        26 Jun 24 15:40 CST (2 months ago)
  Dirty Build        no
  Go version         1.22.4
  Compiler           gc
  Platform           darwin/arm64

  │ A new release is available: 0.166.0 → v0.168.0

安装一些插件

$ helmfile -v                                                                                                         (bj-k8s/default)
(base)
# beiyiwangdejiyi @ beiyiwangdejiyideMacBook-Pro in ~/Desktop/tools/Helm-tools on git:main x [10:55:35] C:130
$ helmfile init                                                                                                       (bj-k8s/default)
helm version is too low, the current version is 3.12.2+g1e210a2, the required version is 3.14.4
use: 'https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3' [y/n]: y
Downloading https://get.helm.sh/helm-v3.15.2-darwin-arm64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
The helm plugin "diff" version is too low, do you want to update it? [y/n]: y
Update helm plugin diff
Downloading https://github.com/databus23/helm-diff/releases/latest/download/helm-diff-macos-arm64.tgz
Preparing to install into /Users/beiyiwangdejiyi/Library/helm/plugins/helm-diff
Updated plugin: diff

The helm plugin "secrets" is not installed, do you want to install it? [y/n]: y
Install helm plugin secrets
Installed plugin: secrets

The helm plugin "s3" is not installed, do you want to install it? [y/n]: y
Install helm plugin s3
Downloading and installing helm-s3 v0.16.0 ...
Checksum is valid.
Installed plugin: s3

The helm plugin "helm-git" is not installed, do you want to install it? [y/n]: y
Install helm plugin helm-git
Installed plugin: helm-git

helmfile initialization completed!

如果没有执行 init 命令则需要手动安装 helm-diff 插件,该插件是必须的,其他插件可以根据需要选择安装

$ helm plugin install https://github.com/databus23/helm-diff

使用

接下来我们来了解下 Helmfile 的具体使用,首先我们从一个简单的示例开始,假设 helmfile.yaml 表示你的 Helm release 的期望状态如下所示:

# helmfile.yaml
repositories:
  - name: prometheus-community
    url: https://prometheus-community.github.io/helm-charts

releases:
  - name: prom-norbac-ubuntu
    namespace: prometheus
    chart: prometheus-community/prometheus
    set:
      - name: rbac.create
        value: false

文章参考

回到页面顶部