传统部署方式
传统服务部署到K8s集群的流程:
拉取代码-----》打包编译-----》构建镜像-----》准备相关的yaml文件-----》kubectl apply进行部署
传统方式部署引发的问题:
- 随着引用的增多,需要维护大量的yaml文件
- 不能根据一套yaml文件来创建多个环境,需要手动进行修改。
PS: 一般环境都分为dev、预生产、生产环境,部署完了dev这套环境,后面再部署预生产和生产环境,还需要复制出两套,并手动修改才行。
什么是HELM
Helm是K8s的包管理工具,可以方便地发现、共享和构建K8s应用
Helm是k8s的包管理器,相当于centos系统中的yum工具,可以将一个服务相关的所有资源信息整合到一个chart中,并且可以使用一套资源发布到多个环境中,可以将应用程序的所有资源和部署信息组合到单个部署包中。
就像Linux下的rpm包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到k8s上。
HELM的组件
- Chart:就是helm的一个整合后的chart包,包含一个应用所有的K8s声明模板,类似于yum的rpm包或者apt的dpkg文件。helm将打包的应用程序部署到k8s并将它们构成chart。这些chart将所有预配置的应用程序资源以及所有版本都包含再一个已于管理的包中。
- HELM客户端:helm的客户端组件,负责和K8s apiserver通信
- Repository:用于发布和存储chart包的仓库,类似yum仓库和docker仓库。
- Release:用chart包部署的一个实例。通过chart在K8s中部署的应用都会产生一个唯一的Release,统一chart部署多次就会产生多个Release。
HELM2和HELM3
- helm3移除了Tiller组件 helm2中helm客户端和K8s通信时通过Tiller组件和K8s通信,helm3移除了Tiller组件,直接使用kubeconfig文件和K8s apiserver通信。
- 删除release命令变更
helm delete release-name --purge --------》 helm uninstall release-name - 查看charts信息命令变更
helm inspect release-name -------》 helm show chart-name - 拉取charts包命令变更
helm fetch chart-name -------》 helm pull chart-name helm3中必须指定release名称,如果需要生成一个随机名称,需要加选项--generate-name,helm2中如果不指定release名称,可以自动生成一个随机名称
helm install ./mychart --generate-name安装HELM
相关连接:
Github:https://github.com/helm/helm/releases
官网:https://helm.sh/zh/docs/intro/install/
下载好对应的版本上传到服务器进行解压缩
[root@Kubernetes helm]# ls
helm-v3.11.3-linux-amd64.tar.gz
[root@Kubernetes helm]# tar xvf helm-v3.11.3-linux-amd64.tar.gz
linux-amd64/
linux-amd64/LICENSE
linux-amd64/README.md
linux-amd64/helm
之后配置一下系统环境,让命令可以在系统中随机调用
[root@Kubernetes helm]# ls
helm-v3.11.3-linux-amd64.tar.gz linux-amd64
[root@Kubernetes helm]# cd linux-amd64/
[root@Kubernetes linux-amd64]# pwd
/opt/helm/linux-amd64
[root@Kubernetes linux-amd64]# vim /etc/profile
#追加下面内容
export PATH=$PATH:/opt/helm/linux-amd64
[root@Kubernetes linux-amd64]# source /etc/profile
检查一下是否安装成功
[root@Kubernetes ~]# helm version
version.BuildInfo{Version:"v3.11.3", GitCommit:"323249351482b3bbfc9f5004f65d400aa70f9ae7", GitTreeState:"clean", GoVersion:"go1.20.3"}