Helm工具介绍
- 了解Helm
Helm是kubernetes中查找、分享、构建应用的最佳方式。
Helm是一个Kubernetes应用的包管理工具,用来管理chart(一种预先配置好的安装包资源),有点类似于Ubuntu 的APT和CentOS/Rocky中的YUM。因此,helm的出现解决了k8s应用管理能力缺失的问题。
另外Helm也是dev和ops的桥梁,运维人员在使用Helm的时候,一方面不需要理解大量在Chart中的各种k8s元素,只需要配置少量的环境变量即可安装;另一方面,Helm也给初级运维人员提供了学习的机会,他们可以在Chart中学习并理解各种K8s元素,从而能够更快的掌握K8s。
官网地址:https://helm.sh/
github地址: https://github.com/helm/helm/releases
- Helm核心概念
- Chart:Chart就是helm package,包含了一个k8s app应用运行起来的所有要素,比如service, deployment, configmap, serviceaccount, rbac, 等,这些要素都是以template文件的形式存在,再结合values文件,最终渲染出能够被k8s执行的yaml文件。
- Repository:仓库是charts的集合,方便进行分享和分发。我们可以将这个仓库添加到本地,然后从这些仓库里查找chart,并使用。
- Hub: 不同的个人和组织提供的公共仓库(Repository)形成了分散和分布的Helm仓库,不利于查找,所以官方提供了Helm Hub,各公共仓库可以注册到Helm Hub中以方便集中查找,Helm Hub只是分布的仓库的集中展示中心。仓库注册到Helm Hub时,会将Chart清单文件向Helm Hub同步一份,这样可以在Helm Hub集中展示仓库列表和各仓库中的Chart列表。Chart包也就是tgz文件实际上存储在各仓库中。Helm Hub并不实际存储Chart包。Helm只是在查询Chart时和Helm Hub有交互,其它操作都是和仓库直接交互的。
- Release:Release是Helm Chart在kubernetes的一个运行实例,这个release名字会体现在K8s里,其中service和deploy的名字跟这个release名字一致。
- Helm版本和Kubernetes版本要求
![[Pasted image 20240907173202.png]]
参考:https://helm.sh/zh/docs/topics/version_skew/
Helm工具用法
1)安装Helm
说明:我用的Kubernetes版本为1.25.4,考虑到后期会升级Kubernetes版本,所以helm版本为3.11
获取集群版本号:kubectl get node
。
下载二进制包
wget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz
解压并做软链
tar zxf helm-v3.11.3-linux-amd64.tar.gz -C /opt/
mv /opt/linux-amd64/ /opt/helm
ln -s /opt/helm/helm /bin/
2)Helm常用命令
添加仓库,这样会把该仓库添加到本地
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add helm_sh https://charts.helm.sh/stable
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
更新仓库列表到本地
helm repo update
查看仓库列表
helm repo list
在本地添加的仓库里搜索所有chart
helm search repo
在本地的仓库里搜索mysql
helm search repo mysql
还可以从公共的hub里搜索chart,目的是找到合适的repo
helm search hub mysql
helm search hub mysql --list-repo-url ##查看对应repo的url
helm search hub mysql --max-col-width 100 #可以设置每一列的宽度,这样可以显示所有的描述信息
查看某个chart详细信息
helm show chart bitnami/mysql
查看某个chart values(这个values相当于是该cahrt的配置文件)
helm show values helm_sh/redis
安装chart (示例,安装nginx)
helm search repo nginx ##先搜一下
helm install nginx-test bitnami/nginx #这个nginx-test就是release名字,同时也是service和deployment/statefulset以及pod前缀,当然你也可以不去定义release name,让Helm帮忙定义,那么命令就要改为
helm install bitnami/nginx --generate-name
install过程中会自动生成缓存目录: ~/.cache/helm/repository/
安装完后,查看用helm安装过的chart
helm list -A #-A会列出所有namespace里的release,不加-A只列default namespace里的release
卸载
helm uninstall nginx-test
下载一个chart包
helm pull bitnami/mysql #会下载一个tgz的压缩包
利用本地的chart包,直接安装
tar zxf mysql-9.4.4.tgz
cd mysql
helm install test-mysql .
Helm工具实践
1)安装redis-cluster
先搭建一个NFS的SC(只需要SC,不需要pvc),具体步骤此文档不再提供,请参考前面相关章节。
下载redis-cluster的chart包
helm pull bitnami/redis-cluster --untar #会下载一个目录下来
修改values.yaml
cd redis-cluster
vi values.yaml # 定义sc和密码
storageClass: "nfs-client"
redis:
password: "http://rocky_k8s.com/"
安装
helm install redis-cluster . ##注意,这是在chart的目录里,该目录下有values.yaml,后面的. 表示使用当前目录下的values.yaml
查看状态
helm status redis-cluster
kubectl get po
kubectl get statefulset
kubectl get pvc
测试
To get your password run:
export REDIS_PASSWORD=$(kubectl get secret --namespace "default" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)
You have deployed a Redis® Cluster accessible only from within you Kubernetes Cluster.INFO: The Job to create the cluster will be created.To connect to your Redis® cluster:
1. Run a Redis® pod that you can use as a client:
kubectl run --namespace default redis-cluster-client --rm --tty -i --restart='Never' \
--env REDIS_PASSWORD=$REDIS_PASSWORD \
--image docker.io/bitnami/redis-cluster:7.0.5-debian-11-r19 -- bash
2. Connect using the Redis® CLI:
redis-cli -c -h redis-cluster -a $REDIS_PASSWORD
2)应用的升级和回滚
安装好的应用,如果再次修改values.yaml(比如修改密码为http://rocky_k8s.com1/),则需要做升级处理
helm upgrade redis-cluster . ##注意,这是在chart的目录里,该目录下有values.yaml
查看升级历史
helm history redis-cluster
回滚
helm rollback redis-cluster 1