个人博客:https://www.aiopsclub.com/
作者介绍:helm 分支维护者 helmfile核心维护者
随着云原生的流行,kubernetes已然成为云原生的重要基础设施,但就k8s而言,其本身还是相当复杂,尤其是其各种资源的定义与配置,在经历千山万水构建好应用并且成功在k8s中运行后,应用本身的分发与配置又成为一个难题,这时helm就应运而生,原理就是通过Go模板语言结合kubernetes的资源定义文件,通过外部传值,来定义应用的不同行为,并且通过chart的形式来分发应用,解决k8s中原生应用管理的痛点。目前已经成为cncf毕业项目,在github上 star数量为20k以上,可见其流行程度。接下来我们将要学习helm以及如何实现helm的技术设施即代码:helm as code.
Helm 帮助您管理 Kubernetes 应用—— Helm Chart,即使是最复杂的 Kubernetes 应用程序,都可以帮助您定义,安装和升级。Helm Chart 易于创建、发版、分享和发布,所以停止复制粘贴,开始使用 Helm 吧。Helm 是 CNCF 的毕业项目,由 Helm 社区维护。
优势:
官方文档: helm.sh
helm create helmascode
helm install [NAME] [CHART] [flags]
helm upgrade [RELEASE] [CHART] [flags]
helm rollback <RELEASE> [REVISION] [flags]
helm history RELEASE_NAME [flags]
helm repo add [NAME] [URL] [flags]
以上命令可通过--help快速获取帮助
helmfile以声明式方式部署您的 Kubernetes 清单、Kustomize 配置和chart来生成helm release。通常会在部署涉及多个chart以及repo,这些chart和repo管理同样有很大的问题,尤其是在保证可重复性以及版本化配置方面,而helmfile就是来解决这个痛点。 优势:
helmfile: github.com/helmfile/helmfile
helmfile本质上是通过yaml的配置方式来定义本身的行为,包括helm中的repositories、release以及chart相关信息,通过helmfile diff查看变更,确认后即可helmfile sync完成本次部署,同时在配置不变的情况,多次操作为幂等,这就是声明式配置的魅力。同时,helmfile依赖helm以及helm-diff插件,来完成整个流程:
配置:
# 环境配置,每个key为一个环境,通过helmfile -e指定,不同环境通过values配置不同的值
environments:
# The "default" environment is available and used when `helmfile` is run without `--environment NAME`.
default:
values:
- environments/default/values.yaml
# helm repo配置
repositories:
- name: prometheus-community
url: https://prometheus-community.github.io/helm-charts
# release 配置
releases:
- name: prom-norbac-ubuntu
namespace: prometheus
chart: prometheus-community/prometheus
set:
- name: rbac.create
value: false
操作:
# 1. helmfile自动比较差异,有变更时自动更新
helmfile apply
# 2. 分步骤确认更新
helmfile -e default diff # 只比较差异,并前台打印
helmfile -e default sync
以上只是最简的配置,helmfile的更高级功能参考官方文档: https://helmfile.readthedocs.io/en/latest/
本质上,helmfile通过模板语言来生成helm的release配置,同时进行应用,此外,helm的模板函数之外,helmfile还新增多个好用到爆的函数,具体参考: https://helmfile.readthedocs.io/en/latest/#templating
通过helm和helmfile介绍与学习,我们已经具备helm as code的必要条件,那helm as code应该如何玩?其实就三个关键词: helm + helmfile + gitlab.
通过helm的应用编排,封装应用的资源文件,同时通过chart的方式进行分发,借助helmfile的能力,声明管理helm的部署,具有高度可重复、声明式以及版本化特性,同时在gitlab的加持下,利用gitlab CI/CD,helmfile可以方便集成为工作流,helmfile diff查看变更,helmfile sync进行应用变更,做到心中有数,万事不愁。
随着基础设施即代码概念的流行,我相信这会改变运维整体格局,每个运维人都需要做变革,在技术洪流中保持先进。helm as code 应用即代码,希望这篇文章可以对大家有所启发,互相交流。
文章同步发布: aiopsclub.com
helmfile: github.com/helmfile/helmfile helm: github.com/helm/helm gitlab: gitlab.cn
- END -