1 Helm基本概念
1.1 什么是helm
Helm看作Kubernetes下的apt-get/yum。Helm是kubernetes的包管理器,用于简化 Kubernetes 应用程序的安装和管理。它允许用户将应用及其相关资源打包成一个可重用的单元——Chart。借助 Helm,用户可以通过简单的命令轻松部署、升级、配置和管理复杂的 Kubernetes 应用。
helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com、私有仓库。
1.2 Helm架构原理
Helm 的架构主要由以下几个部分组成:
1.2.1 客户端
Helm CLI 是用户与 Helm 交互的工具。用户通过命令行与 Helm 进行操作,如安装、升级和管理应用。Helm CLI 将用户的请求转换为 Kubernetes API 的调用。
1.2.2 服务端
Tiller(在 Helm 2 中):Tiller 是 Helm 2 的服务端组件,负责处理来自 Helm CLI 的请求,管理 Release 状态。Tiller 会在 Kubernetes 集群中运行,并维护 Release 的信息。
无 Tiller(在 Helm 3 中):从 Helm 3 开始,Tiller 被移除,Helm CLI 直接与 Kubernetes API 交互。这种设计提高了安全性,简化了架构,减少了配置和管理的复杂性。
1.2.3 Chart
Chart 是 Helm 的核心概念,是一个定义了 Kubernetes 应用的打包格式。一个 Chart 包含以下内容:
Chart.yaml:定义 Chart 的基本信息,包括名称、版本、描述等。
templates/ 目录:包含 Kubernetes 资源的模板文件,如 Deployment、Service、ConfigMap 等。
values.yaml:定义 Chart 中使用的默认值,这些值可以在安装时被覆盖。
1.2.4 Release
Release 是 Helm 中 Chart 的一个具体实例。当用户安装一个 Chart 时,Helm 会创建一个 Release,每个 Release 都有唯一的名称和版本。用户可以独立管理每个 Release,包括升级和回滚操作。
1.2.5 Repository
Chart 仓库用于存储和分发 Helm Charts。用户可以从公共或私有仓库中获取 Charts。Helm 支持多个 Chart 仓库,用户可以根据需要添加、删除或更新这些仓库。
2 Helm安装部署
2.1 安装Helm
Helm 可以通过多种方式进行安装,可以参考官方文档:https://helm.sh/zh/docs/intro/install/
最简单的安装方式是通过官方提供的安装脚本,适用于大多数系统:
# 安装chart
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
# 查看版本
helm version
该脚本会自动检测操作系统,并下载并安装最新版本的 Helm。
2.2 配置chart仓库
(1)添加官方仓库
可以通过以下命令添加官方的 stable 仓库:
[root@k8s-master ~]# helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories
(2)更新仓库
添加仓库后,使用以下命令更新本地缓存的仓库信息,以获取最新的 Charts 列表:
helm repo update
(3)添加其他仓库
# 添加格式
helm repo add <repo-name> <repo-url>
# 添加阿里云chart存储库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 添加 Bitnami Charts 存储库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 更新存储库
(4)查看已添加的仓库
可以使用以下命令查看已添加的仓库列表:
[root@k8s-master ~]# helm repo list
NAME URL
stable https://charts.helm.sh/stable
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
该命令会列出所有已配置的仓库及其 URL。
(5)查看仓库里面所有的包
[root@k8s-master ~]# helm search repo aliyun
NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/acs-engine-autoscaler 2.1.3 2.1.1 Scales worker nodes within agent pools
aliyun/aerospike 0.1.7 v3.14.1.2 A Helm chart for Aerospike in Kubernetes
....
(6)删除chart仓库
[root@k8s-master ~]# helm repo remove aliyun
"aliyun" has been removed from your repositories
3 Helm基础使用
常用命令
3.1 安装应用
语法格式:
helm install <release-name> <chart-name>
例如,安装一个MySQL应用:
# 查看chart是否有MySQL
[root@k8s-master ~]# helm search repo stable |grep mysql
# 安装MySQL
helm install mysql aliyun/mysql
# 查看pod状态
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-864489f4bf-p5f88 0/1 Pending 0 9m46s
# 查看到是失败的
注意:从stable直接下载的MySQL是默认使用pv存储卷,如果你没有存储卷的话是会失败的。
修改chart.yaml文件
# 先将chart.yaml文件下载
helm show values stable/mysql > values.yaml
# 修改persistence中enabled改为false,表示不适用存储卷
vi chart.yaml
...
## Persist data to a persistent volume
persistence:
enabled: false
...
再次helm install进行安装,这里由于修改了values,所以通过-f指定了本地的values.yaml文件
# 先将刚才部署的删除
[root@k8s-master ~]# helm uninstall mysql
release "mysql" uninstalled
# 再次安装MySQL
[root@k8s-master ~]# helm install mysql -f values.yaml stable/mysql
查看Release和pod状态
# 查看所有已安装的Release
[root@k8s-master ~]# helm list
# 查看pod状态
[root@k8s-master ~]# kubectl get pod
3.2 查看已安装的Release
h[root@k8s-master ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mysql default 1 2024-11-02 09:09:41.074126912 +0800 CST deployed mysql-1.6.9 5.7.30
此命令会显示每个 Release 的名称、命名空间、版本、状态、更新时间等信息。
3.3 升级应用
要对已安装的应用进行升级,可以使用:
helm upgrade <release-name> <chart-name>
例如,升级 nginx 应用:
helm upgrade my-nginx stable/nginx
用户还可以通过 --set 参数直接在命令中覆盖配置。例如:
helm upgrade my-nginx stable/nginx --set service.type=LoadBalancer
3.4 回滚到先前版本
Helm 允许用户轻松回滚到之前的 Release 版本。使用以下命令:
helm rollback <release-name> <revision>
例如,回滚到上一个版本:
helm rollback my-nginx 1
可以使用 helm history <release-name>
查看 Release 的历史记录和版本,确认要回滚的版本号。
3.5 删除Release
要删除一个已安装的 Release,可以使用:
helm uninstall <release-name>
例如,删除 nginx 应用:
helm uninstall my-nginx
该命令会删除 Release 并清理与之关联的 Kubernetes 资源。
3.6 使用 Values 文件
使用 values.yaml 文件可以更灵活地配置 Chart。在安装或升级时,可以通过 -f 参数指定自定义的 Values 文件:
# 安装
helm install my-nginx stable/nginx -f custom-values.yaml
# 升级
helm upgrade my-nginx stable/nginx -f custom-values.yaml
今天分享先到这里。在日常运维中还用到Helm自定义安装,后续文章进行更新。