helm说明
官方文档:https://helm.sh/zh/docs/helm/helm/
关于 Helm Chart
Helm是Kubernetes生态系统中的一个软件包管理工具,专门负责管理Kubernetes应用资源。而Helm仓库(Repository)在Helm中扮演着重要角色,是Helm实现应用包管理的重要组件,为用户提供了便捷、高效的应用管理方式。
Helm仓库本质上是一个Web服务器,该服务器保存了一系列的Chart软件包以供用户下载,并且提供了一个该Repository的Chart包的清单文件以供查询。开发者按照Helm Chart的格式,将应用所需的资源文件包装起来,通过模版化的方式将一些可变字段暴露给用户,最后将封装好的应用包,也就是Helm Chart,集中存放在统一的仓库中供用户浏览下载。用户只需要一行简单的命令就可以完成应用的安装、卸载与升级。对于安装之后状态,也可以通过 helm list 或者是原生的 kubectl 进行查询。
Helm可以同时管理多个不同的Repository。通过使用Helm仓库,用户可以方便地搜索和查找符合其需求的Kubernetes应用,并通过Helm工具进行安装、升级和管理。
Helm仓库应用场景
Helm仓库在Kubernetes应用部署和管理中具有广泛的应用场景。Helm仓库在Kubernetes应用部署和管理中具有广泛的应用场景,包括统一管理、版本控制和回滚、快速部署和分发、跨环境一致性部署、安全漏0管理和审核以及多团队协同工作。
- 统一管理应用:通过使用Helm仓库,用户可以将Kubernetes应用集中存储和管理,方便对应用的统一管理和控制。这有助于提高应用的管理效率,降低管理的复杂度。
- 版本控制和回滚:Helm仓库支持Charts的版本管理,用户可以方便地回滚到之前的版本,也可以比较不同版本之间的差异。这有助于在出现问题时快速恢复到正常状态,同时也有助于进行应用升级和回滚的版本控制。
- 快速部署和分发:Helm仓库提供了快速部署和分发Kubernetes应用的能力。用户可以从仓库中下载和安装Charts,也可以将自定义的Charts上传到仓库中进行分享和分发,实现应用的快速部署和分发。
- 跨环境一致性部署:通过使用Helm仓库,用户可以在不同的环境中实现一致的Kubernetes应用部署。例如,在开发和测试环境中,用户可以使用相同的Helm仓库,确保应用在不同环境中的一致性。
- 安全漏0管理和审核:Helm仓库可以对上传的Charts进行审核和安全检查,确保用户下载的Charts的安全性。此外,仓库还支持对安全漏0的管理和审核,包括漏0扫描和签名验证等,以保障应用的安全性。
- 多团队协同工作:通过使用Helm仓库,多个团队可以协同工作,共同管理和维护Kubernetes应用。团队之间可以共享相同的Helm仓库,共同维护和管理应用的部署和管理。
常用的命令
helm create
:在本地创建新的 chart;helm dependency
:管理 chart 依赖;helm intall
:安装 chart;helm lint
:检查 chart 配置是否有误;helm list
:列出所有 release;helm package
:打包本地 chart;helm repo
:列出、增加、更新、删除 chart 仓库;helm rollback
:回滚 release 到历史版本;helm pull
:拉取远程 chart 到本地;helm search
:使用关键词搜索 chart;helm uninstall
:卸载 release;helm upgrade
:升级 release;
chart 操作案例
配置国内仓库地址
常用的仓库
- 官方仓库(https://hub.kubeapps.com/charts/incubator)
- 阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
- 微软仓库( http://mirror.azure.cn/kubernetes/charts/) 这个仓库推荐,基本上官网有的 chart 这里都有。
添加存储库 我这里添加了多个存储库
## 添加阿里云的源
# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories## 添加 azure 的源
# helm repo add stable http://mirror.azure.cn/kubernetes/charts
"stable" has been added to your repositories
更新所有仓库
# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "aliyun" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈
查看现在正在使用的源
# helm repo list
NAME URL
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
stable http://mirror.azure.cn/kubernetes/charts
chart下载
搜索Helm仓库中可部署的Chart列表
## Redis 为例
# helm search repo redis
NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/redis 1.1.15 4.0.8 Open source, advanced key-value store. It is of...
aliyun/redis-ha 2.0.1 Highly available Redis cluster with multiple se...
stable/prometheus-redis-exporter 3.5.1 1.3.4 DEPRECATED Prometheus exporter for Redis metrics
stable/redis 10.5.7 5.0.7 DEPRECATED Open source, advanced key-value stor...
stable/redis-ha 4.4.6 5.0.6 DEPRECATED - Highly available Kubernetes implem...
aliyun/sensu 0.2.0 Sensu monitoring framework backed by the Redis ...
stable/sensu 0.2.5 0.28 DEPRECATED Sensu monitoring framework backed by...
下载chart到本地
## helm pull chart_name(名称须具体,例 google/nginx-ingress。不能只是关键字,否则下载不到 )# helm pull aliyun/redis
# ll
total 24
-rw-r--r-- 1 qiangsh staff 6.0K 12 4 20:06 redis-1.1.15.tgz## 下载基于OCI的chart
# helm pull oci://localhost:5000/helm-charts/mychart --version 0.1.0
Pulled: localhost:5000/helm-charts/mychart:0.1.0
Digest: sha256:0be7ec9fb7b962b46d81e4bb74fdcdb7089d965d3baca9f85d64948b05b402ff
上传自建chart
需提前搭建Helm私有仓库,此处我直接使用华为云OBS对象存储服务,或者自己部署minio服务(设置 helm 仓库策略为读写权限)。
1. 自建chart
除了从远程 helm 仓库中获取第三方 chart 外,你也可以创建自己的 chart。
# mkdir -p /data/helm/repo
# cd /data/helm/repo
# helm create mychart
Creating mychart
# ll
总用量 0
drwxr-xr-x 4 root root 4096 2024/12/04 19:40:12 mychart
2. chart 打包
如果你想上传自建的 chart 到私有仓库中去,需要先将自建的 chart 打包。
# helm package mychart
Successfully packaged chart and saved it to: /data/helm/repo/mychart-0.1.0.tgz
3. 生成或更新 chart 索引文件
# helm repo index /data/helm/repo
# ll
总用量 8
-rw-r--r-- 1 root root 392 2024/12/04 19:41:42 index.yaml
drwxr-xr-x 4 root root 4096 2024/12/04 19:40:12 mychart
-rw-r--r-- 1 root root 4168 2024/12/04 19:40:45 mychart-0.1.0.tgz
索引文件
index.yaml
内容如下:
apiVersion: v1
entries:mychart: # 由内容可知,已经更新了准备上传的 chart 信息。- apiVersion: v2appVersion: 1.16.0created: "2024-12-04T19:41:42.875950524+08:00"description: A Helm chart for Kubernetesdigest: c8b7b97781c47c6f1add5134705aab28d80cb8c7c56379bcfbad5d9ff798d1e8name: mycharttype: applicationurls:- mychart-0.1.0.tgzversion: 0.1.0
generated: "2024-12-04T19:41:42.875205513+08:00"
4. 上传 chart 和索引文件
登录私有仓库,上传当前目录下index.yaml 和后缀为tgz 的包到远程私有仓库里。
5. 添加私有仓库
# helm repo add my-helm-repo https://xxxxxx.obs.cn-north-4.myhuaweicloud.com/helm-repo
# 注意不要忘写私有仓库名 helm-repo
6. 验证私有仓库
# helm repo list
NAME URL
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
stable http://mirror.azure.cn/kubernetes/charts
my-helm-repo https://xxxxxx.obs.cn-north-4.myhuaweicloud.com/helm-repo
7. 更新本地 chart 仓库
# helm repo update
更新本地 chart 仓库之后,就可以检索到刚上传的自定义 chart 了。
# helm search repo mychart
NAME CHART VERSION APP VERSION DESCRIPTION
my-helm-repo/mychart 0.1.0 1.16.0 A Helm chart for Kubernetes