目录
什么是helm
helm是kubernetes生态系统中的一个软件包管理工具,类似ubuntu的apt,centos的yum或python的pip一样,专门负责管理kubernetes应用资源;使用helm可以对kubernetes应用进行统一打包、分发、安装、升级以及回退等操作。
helm利用Chart来封装kubernetes原生应用程序的一些列yaml文件,可以在部署应用的时候自定义应用程序的一些Metadata,以便于应用程序的分发。
即之前学过的所有的东西,都可以打包成一个helm,一键部署
部署helm
官网: Helm | 快速入门指南
下载二进制文件,解压二进制文件
[root@k8s2 ~]# tar zxf helm-v3.11.0-linux-amd64.tar.gz
进入解压出来的目录,复制helm到/usr/local/bin,使其可执行
[root@k8s2 ~]# cd linux-amd64/
[root@k8s2 linux-amd64]# mv helm /usr/local/bin/
添加环境变量,重新应用,成功设置helm命令补齐
[root@k8s2 ~]# echo "source <(helm completion bash)" >> ~/.bashrc
[root@k8s2 ~]# source ~/.bashrc
[root@k8s2 ~]# helm version
查询官方应用中心
[root@k8s2 ~]# helm search hub nginx
添加第三方repo源
[root@k8s2 ~]# helm repo add my-repo https://charts.bitnami.com/bitnami
"my-repo" has been added to your repositories
查看repo源
[root@k8s2 ~]# helm repo list
NAME URL
拉取应用到本地
[root@k8s2 helm]# helm pull my-repo/nginx
解压
[root@k8s2 helm]# tar zxf nginx-13.2.23.tgz
进入解压得到的目录
[root@k8s2 helm]# cd nginx/
按需修改,大部分都是默认的
[root@k8s2 nginx]# vim values.yaml
指定仓库地址
不支持loadbalancer就改为ClusterIP
启用ingress
主机名
部署应用
[root@k8s2 nginx]# helm install myapp .
测试
再次修改配置
[root@k8s2 nginx]# vim values.yaml
更新应用
[root@k8s2 nginx]# helm upgrade myapp .
查看应用
[root@k8s2 nginx]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
myapp default 2 2023-02-02 14:40:39.212215274 +0800 CST deployed nginx-13.2.23 1.23.3
[root@k8s2 nginx]# helm history myapp
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Thu Feb 2 14:35:41 2023 superseded nginx-13.2.23 1.23.3 Install complete
2 Thu Feb 2 14:40:39 2023 deployed nginx-13.2.23 1.23.3 Upgrade complete
回滚应用
[root@k8s2 nginx]# helm rollback myapp 1
Rollback was a success! Happy Helming!
回收
[root@k8s2 helm]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
myapp default 3 2023-02-02 14:42:47.257098415 +0800 CST deployed nginx-13.2.23 1.23.3
[root@k8s2 helm]# helm uninstall myapp
release "myapp" uninstalled
helm chart
helm提供了一个应用所需要的所有清单文件.比如对于一个nginx,我们需要一个deployment的清单文件、一个service的清单文件、一个hpa的清单文件,把这三个文件打包到一起,就是一个应用程序的程序包,称之为Chart.
Chart是一个helm程序包,其实质只是一个模板,我们可以对这个模板进行赋值(value),形成我们自定义的清单文件,也就实现我们生产个性化的需求,这样的仓库叫Chart仓库,一个https/http服务器.
Helm 有两个重要的概念:chart 和 release
chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包
release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release
搭建一个Helm Chart
执行一下命令,自动生成一系列文件,结构如图
[root@k8s2 helm]# helm create mychart
编辑Chart.yaml文件,指定chart的版本为0.1.0,app版本为v1
[root@k8s2 mychart]# vim Chart.yaml
编辑values.yaml 文件,指定镜像为myapp,版本为v1
[root@k8s2 mychart]# vim values.yaml
主机名
检测语法
[root@k8s2 helm]# helm lint mychart/
==> Linting mychart/
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed
打包
[root@k8s2 helm]# helm package mychart/
Successfully packaged chart and saved it to: /root/helm/mychart-0.1.0.tgz
添加本地仓库
在harbor仓库中创建charts项目
添加认证密钥
[root@k8s2 helm]# cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/ca-trust/source/anchors/
更新密钥
[root@k8s2 helm]# update-ca-trust
添加自己的私有仓库路径
[root@k8s2 ~]# helm repo add mychart https://reg.westos.org/chartrepo/charts
"mychart" has been added to your repositories
查看已经添加的仓库路径
[root@k8s2 ~]# helm repo list
NAME URL
my-repo https://charts.bitnami.com/bitnami
mychart https://reg.westos.org/chartrepo/charts
想上传我的mychart到仓库,但是默认没有push命令,需要手动添加push插件。
安装插件
在线安装
[root@k8s2 helm]# yum install -y git
[root@k8s2 helm]# helm plugin install https://github.com/chartmuseum/helm-push
Downloading and installing helm-push v0.10.3 ...
Installed plugin: cm-push
[root@k8s2 helm]# helm plugin list
NAME VERSION DESCRIPTION
cm-push 0.10.3 Push chart package to ChartMuseum
离线安装
获取plugin默认目录
[root@k8s2 helm]# helm env
创建插件目录
[root@k8s2 helm]# mkdir -p /root/.local/share/helm/plugins/helm-push/
解压插件
[root@k8s2 ~]# tar zxf helm-push_0.10.3_linux_amd64.tar.gz -C /root/.local/share/helm/plugins/helm-push
[root@k8s2 helm]# helm cm-push -h
上传chart包到repo仓库
[root@k8s2 helm]# helm cm-push mychart-0.1.0.tgz mychart -u admin -p westos
Pushing mychart-0.1.0.tgz to mychart...
Done.
更新repo库
刷新repo,就可查找到mychart包
[root@k8s2 helm]# helm repo update mychart
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "mychart" chart repository
Update Complete. ⎈Happy Helming!⎈
[root@k8s2 helm]# helm search repo mychart
NAME CHART VERSION APP VERSION DESCRIPTION
mychart/mychart 0.1.0 v1 A Helm chart for Kubernetes
安装应用
[root@k8s2 helm]# helm install myapp mychart/mychart
测试
[root@k8s1 harbor]# curl myapp.westos.org
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
升级
重新打包应用
[root@k8s2 mychart]# vim Chart.yaml
镜像更改v2版本
打包
[root@k8s2 helm]# helm package mychart
Successfully packaged chart and saved it to: /root/helm/mychart-0.2.0.tgz
上传
[root@k8s2 helm]# helm cm-push mychart-0.2.0.tgz mychart -u admin -p westos
Pushing mychart-0.2.0.tgz to mychart...
Done.
更新
[root@k8s2 helm]# helm repo update mychart
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "mychart" chart repository
Update Complete. ⎈Happy Helming!⎈
查看
[root@k8s2 helm]# helm search repo mychart
NAME CHART VERSION APP VERSION DESCRIPTION
mychart/mychart 0.2.0 v2 A Helm chart for Kubernetes
两个版本,-l
参数可以查看到所有的版本
[root@k8s2 helm]# helm search repo mychart -l
NAME CHART VERSION APP VERSION DESCRIPTION
mychart/mychart 0.2.0 v2 A Helm chart for Kubernetes
mychart/mychart 0.1.0 v1 A Helm chart for Kubernetes
更新应用
[root@k8s2 helm]# helm upgrade myapp mychart/mychart
Release "myapp" has been upgraded. Happy Helming!
NAME: myapp
LAST DEPLOYED: Thu Feb 2 16:11:28 2023
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
1. Get the application URL by running these commands:
http://myapp.westos.org/
测试,成功升级
[root@k8s1 harbor]# curl myapp.westos.org
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
查看历史版本
[root@k8s2 helm]# helm history myapp
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Thu Feb 2 16:09:13 2023 superseded mychart-0.1.0 v1 Install complete
2 Thu Feb 2 16:11:28 2023 deployed mychart-0.2.0 v2 Upgrade complete
回滚应用版本
[root@k8s2 helm]# helm rollback myapp 1
Rollback was a success! Happy Helming!
查看历史版本
[root@k8s2 helm]# helm history myapp
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Thu Feb 2 16:09:13 2023 superseded mychart-0.1.0 v1 Install complete
2 Thu Feb 2 16:11:28 2023 superseded mychart-0.2.0 v1 Upgrade complete
3 Thu Feb 2 16:12:10 2023 deployed mychart-0.1.0 v1 Rollback to 1
回收
[root@k8s2 helm]# helm uninstall myapp
release "myapp" uninstalled
helm部署例子
helm部署storageclass
删除原有的部署
[root@k8s2 nfs]# kubectl delete -f deploy.yaml
添加repo仓库
[root@k8s2 helm]# helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
拉取下来
[root@k8s2 helm]# helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
解压
[root@k8s2 helm]# tar zxf nfs-subdir-external-provisioner-4.0.17.tgz
进目录
[root@k8s2 helm]# cd nfs-subdir-external-provisioner/
根据需求修改以下地方
[root@k8s2 nfs-subdir-external-provisioner]# vim values.yaml
为其创建一个ns
[root@k8s2 nfs-subdir-external-provisioner]# kubectl create ns nfs-client
从当前目录安装,名字为nfs-provisioner,安装的ns为nfs-client
[root@k8s2 nfs-subdir-external-provisioner]# helm install nfs-provisioner . -n nfs-client
helm部署ingress-nginx
回收原有部署
[root@k8s2 ingress]# kubectl delete -f deploy.yaml
添加repo源
[root@k8s2 helm]# helm repo add ingress-nginx Welcome - NGINX Ingress Controller
拉取镜像
[root@k8s2 helm]# helm pull ingress-nginx/ingress-nginx
解压并进入
[root@k8s2 helm]# tar zxf ingress-nginx-4.4.3.tgz
[root@k8s2 helm]# cd ingress-nginx/
修改
[root@k8s2 ingress-nginx]# vim values.yaml
仓库,1.6.1的版本需要自己去找,然后放仓库里
默认类
地址修改为自己的仓库
为其创建ns
[root@k8s2 ingress]# kubectl create ns ingress-nginx
安装
[root@k8s2 ingress-nginx]# helm install ingress-nginx . -n ingress-nginx
helm部署metrics-server
回收原有部署
[root@k8s2 metrics]# kubectl delete -f components.yaml
添加repo
[root@k8s2 helm]# helm repo add metrics-server Kubernetes Metrics Server | metrics-server
拉取一下
[root@k8s2 helm]# helm pull metrics-server/metrics-server
解压进入目录
[root@k8s2 helm]# tar zxf metrics-server-3.8.3.tgz
[root@k8s2 helm]# cd metrics-server
按需修改
[root@k8s2 metrics-server]# vim values.yaml
加个选项,否则会出现证书问题
创建ns
[root@k8s2 metrics]# kubectl create ns metrics-server
安装
[root@k8s2 metrics-server]# helm install metrics-server . -n metrics-server
安装成功
helm图形化
部署kubeapps
上传所需镜像
解压进入目录
[root@k8s2 helm]# tar zxf kubeapps-12.0.0.tgz
[root@k8s2 helm]# cd kubeapps/
创建ns并安装
[root@k8s2 kubeapps]# kubectl create ns kubeapps
[root@k8s2 kubeapps]# helm install kubeapps . -n kubeapps
授权
[root@k8s2 kubeapps]# kubectl create serviceaccount kubeapps-operator -n kubeapps
[root@k8s2 kubeapps]# kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=kubeapps:kubeapps-operator
获取token
[root@k8s2 kubeapps]# kubectl -n kubeapps create token kubeapps-operator
使用token登录
设置context
添加本地仓库域名解析
[root@k8s2 reg.westos.org]# kubectl -n kube-system edit cm coredns
添加repo仓库
复制ca证书:/etc/docker/certs.d/reg.westos.org/ca.crt
kubeapps图形化部署mychart
查看到以前自己打包的mychart
选择v1,点击部署
成功部署
可以进行更新,打开ingress,添加域名
更新版本,标签换为v2,再次更新
版本回退