Helm chart 介绍、使用和配置
Helm chart 配置、使用
helm说明
官方文档:https://helm.sh/zh/docs/helm/helm/
关于 Helm Chart
Helm是Kubernetes生态系统中的一个软件包管理工具,专门负责管理Kubernetes应用资源。Helm仓库(Repository)在Helm中扮演着重要角色,是Helm实现应用包管理的重要组件,为用户提供了便捷、高效的应用管理方式。Helm仓库本质上是一个Web服务器,该服务器保存了一系列的Chart软件包以供用户下载,并且提供了一个该Repository的Chart包的清单文件以供查询。
开发者按照 Helm Chart 的格式,将应用所需的资源文件包装起来,通过模版化(Templating)的方式将一些可变字段(比如我们之前提到的暴露哪个端口,使用多少副本)暴露给用户,最后将封装好的应用包,也就是 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
自建 Helm Chart
1. 自建chart
除了从远程 helm 仓库中获取第三方 chart 外,你也可以创建自己的 chart。
# mkdir -p /data/helm/repo
# cd /data/helm/repo
# helm create mychart
Creating mychart
## 运行 helm create mychart,会自动生成一个名称是mychart 的空 chart。
# ls mychart/
charts Chart.yaml templates values.yaml
Chart 的文件夹目录如下:
mychart
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
3 directories, 10 files
- 在根目录下的 Chart.yaml 文件内,声明了当前 Chart 的名称、版本等基本信息,这些信息会在该 Chart 被放入仓库后,供用户浏览检索。比如我们可以把 Chart 的 Description 改成 “My first hello world helm chart”。在 Chart.yaml 里有两个跟版本相关的字段,其中 version 指明的是 Chart 的版本,也就是我们应用包的版本;而 appVersion 指明的是内部实际使用的应用版本。
- 在 templates 文件夹内存放了各类应用部署所需要使用的 YAML 文件,比如 Deployment 和 Service。在我们当前的应用内,我们只需要一个 deployment,而有的应用可能包含不同组件,需要多个 deployments,那么我们就可以在 templates 文件夹下放置 deploymentA、deploymentB 等。同样的,如果我们需要配置 serviceaccount、secret、volumes 等内容,也可以在里面添加相应的配置文件。
- 在根目录下我们看到有一个 values.yaml 文件,这个文件提供了应用在安装时的默认参数。
2. 修改版本号
# VERSION=1.1.0
# sed -i "s/^version:.*/version: ${VERSION}/" mychart/Chart.yaml
3. 自定义配置
假如部署的服务会从环境变量中读取 USERNAME 环境变量,我们将这个配置加入 templates/deployment.yaml。
# vim mychart/templates/deployment.yaml
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: USERNAME
value: {{ .Values.Username }}
现在我们的 deployment.yaml 模版会从 values.yaml 中加载 Username 字段,因此相应的,我们也在 values.yaml 中添加 Username: AppHub。
echo 'Username: AppHub' >> mychart/values.yaml
现在,我们的应用就会从 values.yaml 中读取 Username 把它放入镜像的环境变量中启动了。
4. 校验打包
在准备好我们的应用后,我们可以使用 Helm lint 来粗略地检查一下制作的 Chart 有没有什么语法上的错误。
# helm lint --strict mychart
==> Linting mychart
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed
如果没有问题的话,我们就可以使用 helm package 命令对我们的 Chart 文件夹进行打包。
# helm package mychart
Successfully packaged chart and saved it to: /data/helm/repo/mychart-1.1.0.tgz
我们可以使用 helm install 命令尝试安装刚刚做好的应用包。
# helm install mychart-test mychart-1.1.0.tgz
然后用 kubectl 查看一下运行 pod 的状态。
# kubectl get pods
NAME READY STATUS RESTARTS AGE
mychart-test-86846d794d-ht69j 1/1 Running 0 107s
上传 Helm Chart
需提前搭建Helm私有仓库,此处我直接使用华为云OBS对象存储服务,或者自己部署minio服务(设置 helm 仓库策略为读写权限)。
1. 生成或更新 chart 索引文件
# helm repo index /data/helm/repo
# ll
总用量 8
-rw-r--r-- 1 root root 391 2024/12/06 11:35:27 index.yaml
drwxr-xr-x 4 root root 4096 2024/12/06 11:34:28 mychart
-rw-r--r-- 1 root root 4167 2024/12/06 11:34:52 mychart-1.1.0.tgz
索引文件
index.yaml
内容如下:
apiVersion: v1
entries:
mychart:
- apiVersion: v2
appVersion: 1.16.0
created: "2024-12-06T11:35:27.742083185+08:00"
description: A Helm chart for Kubernetes
digest: 7e4a1033cb8ace662a07c23572133be552039c304cc5ee2374a96f5a751f2058
name: mychart
type: application
urls:
- mychart-1.1.0.tgz
version: 1.1.0
generated: "2024-12-06T11:35:27.74119873+08:00"
2. 上传 chart 和索引文件
登录私有仓库,上传当前目录下index.yaml 和后缀为tgz 的包到远程私有仓库里。
3. 添加私有仓库
# helm repo add my-helm-repo https://xxxxxx.obs.cn-north-4.myhuaweicloud.com/helm-repo
# 注意不要忘写私有仓库名 helm-repo
4. 验证私有仓库
# 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
5. 更新本地 chart 仓库
# helm repo update
更新本地 chart 仓库之后,就可以检索到刚上传的自定义 chart 了。
# helm search repo mychart
NAME CHART VERSION APP VERSION DESCRIPTION
my-helm-repo/mychart 1.1.0 1.16.0 A Helm chart for Kubernetes
更多推荐
所有评论(0)