Helm
-
Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。
-
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
-
对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
-
对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
如上图所示,helm就是之前我们搭建一个服务时,需要编辑多个yaml文件,而helm所做的事情就是将这些yaml文件打包成为一个包,这样我们需要部署应用时,只需要下载这些包,然后就可以进行部署了
- Helm V3 与 V2 最大的区别在于去掉了tiller:
tar zxf helm-v3.2.0-linux-amd64.tar.gz
cd linux-amd64/
sudo cp helm /usr/local/bin/
ll /usr/local/bin/helm
echo "source <(helm completion bash)" >> ~/.bashrc
- 步骤二:搜索官方helm hub chart库,添加第三方 Chart 库
helm search hub redis #从官方搜索redis库
helm repo add stable http://mirror.azure.cn/kubernetes/charts/ #添加第三方Chart库
helm search repo redis #从添加进来的第三方库中来进行搜索
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm search repo redis
helm remove aliyun
helm search repo redis-ha -l #在search时,加上-l会显示所有的版本
mkdir helm
helm pull stable/redis-ha
ls
tar zxf redis-ha-4.4.4.tgz -C helm
cd helm/redis-ha
ls
tree .
cat Chart.yaml
- 步骤二:部署应用
kubectl create namespace redis
kubectl get namespaces
helm install redis-ha . -n redis
支持多种安装方式:(helm默认读取~/.kube/config信息连接k8s集群)
$ helm install redis-ha stable/redis-ha
$ helm install redis-ha redis-ha-4.4.0.tgz
$ helm install redis-ha path/redis-ha
$ helm install redis-ha https://example.com/charts/redis-ha-4.4.0.tgz
helm create mychart
cd mychart
ls
tree mychart
vim values.yaml
helm lint . #检测当前目录中是否存在错误
- 步骤三:建立本地Chart仓库
helm repo list #列出当前已有的仓库
helm repo add mychart https://reg.westos.org/chartrepo/charts #添加本地的私有仓库
cd /etc/docker/certs.d/reg.westos.org/
cp ca.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
==在我们的私有仓库上添加chartmuseum ==
cd /mnt/harbor
./prepare --with-chartmuseum
docker-compose up -d
docker-compose ps
helm repo add mychart https://reg.westos.org/chartrepo/charts #添加本地的私有仓库
helm repo list
- 步骤四:安装helm-push插件,上传打包好的应用
helm plugin install https://github.com/chartmuseum/helm-push #在线安装
我们这里选择离线安装
helm env
cd /home/kubeadm/.local/share/helm/plugins
mkdir helm-push
tar zxf helm-push_0.8.1_linux_amd64.tar.gz -C /home/kubeadm/.local/share/helm/plugins/helm-push/
cd helm/
helm push mychart-0.1.0.tgz mychart -u admin -p westos
helm repo update
helm search repo mychart
helm show values mychart/mychart
helm search repo mychart
helm install test mychart/mychart --debug #这里添加的debug就是在安装时检测我们写的各个yaml是否存在错误
helm list #查看部署的应用,一般指定默认会安装到当前的namespace下
- 步骤二:做升级和回滚
vim Chart.yaml
vim value.yaml
helm package mychart #打包更改后的应用
helm push mychart-0.2.0.tgz mychart -u admin -p westos #上传
helm repo update #做更新
helm search repo mychart
helm search repo mychart -l #查找mychart的所有版本
升级
helm upgrade test mychart/mychart
helm list
helm history test
kubectl get pod -o wide
回滚
kubectl get all
helm history test
helm rollback test 1
helm history test
kubectl get pod -o wide
卸载
helm uninstall test
helm list
kubectl get all
注意:我们卸载了test后,原来创建在k8s集群中的pod、RS等全部被删除,从这里我们可以看出来。在使用helm命令时,其实它就是在调用k8s的APIServer,直接读取我们的当前节点的kube/config文件,完成授权
helm search repo nfs
helm pull stable/nfs-client-provisioner
tar zxf nfs-client-provisioner-1.2.8.tgz
vim values.yaml
kubectl create namespace nfs-client-provisioner
helm install nfs-client-provisioner . -n nfs-client-provisioner
helm list -n nfs-client-provisioner
kubectl get all -n nfs-client-provisioner
vim pvc.yaml
kubectl create -f pvc.yaml
kubectl get pvc
kubectl get pv
helm search repo nginx-ingress
helm pull stable/nginx-ingress --version 1.36.3
tar zxf nginx-ingress-1.36.3.tgz
vim value.yaml
kubectl create namespace nginx-ingress
helm -n nginx-ingress install nginx-ingress .
helm -n nginx-ingress list
kubectl get all -n nginx-ingress
- 做一个测试
vim ingress.yaml
vim deployment.yaml
vim service.yaml
kubectl apply -f ingress.yaml
kubectl apply -f deployment.yaml
deployment.yaml service.yaml
在classroom上来添加解析,并且进行访问
helm repo add bitnami https://charts.bitnami.com/bitnami
helm search repo kubeapps -l
helm pull bitnami/kubeapps --version 3.4.3
tar zxf kubeapps-3.4.3.tgz
cd kubeapps
vim values.yaml
- 步骤二:部署应用到指定的namespace
kubectl create namespace kubeapps
kubectl get namespace
helm -n kubeapps install kubeapps .
kubectl -n kubeapps get all
kubectl -n kubeapps get pod
kubectl create serviceaccount kubeapps-operator -n kubeapps
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=kubeapps:kubeapps-operator