一、 helm 是什么
0.问题引入
1.概念
- chart: 包含了一组Kubernetes应用创建的必要信息(应用yaml画像)
- value:包含了应用发布配置信息 (应用配置)
- release:一组 chart 及其配置的一个运行实例 (应用实例)
2.作用:
- Kubernetes生态系统中的软件包管理工具
相当于Kubernetes环境下的yum包管理工具
3.用途–类比和架构
- 创建新的chart
- 构建chart tgz包
- 上传chart到helm仓库;从helm仓库下载chart
- 在kubernetes集群中安装或卸载chart
- 管理用helm安装应用的发布周期
4.组成
- Helm Client
- Tiller Server
client客户端管理 charts,Tiller服务端负责管理release
二、安装helm
0.前提条件
- 本地kubectl 能正常访问kube-api-server
helm client 默认会读 ~/.kube/config
1.安装helm客户端
wget https://get.helm.sh/helm-v2.16.1-linux-amd64.tar.gz
tar -zxvf helm-v2.0.0-linux-amd64.tgz
mv linux-amd64/helm /usr/local/bin/helm
- 需要其他版本可查看:Helm Realese
2.安装Tiller Server
helm init --upgrade --tiller-image sapcc/tiller:v2.16.1
卸载Tiller Server执行:
helm reset
验证:等tiller pod running 执行 helm version
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1nMPv5u-1593951368142)(/download/attachments/134426261/image.png?version=1&modificationDate=1587545627887&api=v2 ‘image.png’)]
**注意:**尽量helm client和tiller server 版本一致,不然可能会遇到神奇的问题
3.给Tiller 授权
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
验证:部署一组标准helm应用
helm install --name redis --set rbac.create=true stable/redis #部署一组redis服务
helm list #查看部署列表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgs5YM2E-1593951368144)(/download/attachments/134426261/image.png?version=3&modificationDate=1587546992761&api=v2 ‘image.png’)]
删除验证应用:
helm delete --purge redis
三、写一个简单的helm应用
1.helm create 项目名
git clone https://github.com/zhaohuabing/testapi.git && cd testapi
helm create testapi-chart
testapi-chart
├── charts
├── Chart.yaml # 这个chart的描述
├── .helmignore # 指定不想包含在 helm chart 中的文件列表
├── templates # 项目的Go模板文件
│ ├── deployment.yaml ## deployment的基本manifest
│ ├── _helpers.tpl ## 模板助手(子模板)
│ ├── ingress.yaml ## ingress的基本manifest
│ ├── NOTES.txt ## 帮助文本(helm install 显示给用户的部署信息)
│ ├── serviceaccount.yaml ## serviceaccount的基本manifest
│ ├── service.yaml ## service的基本manifest
│ └── tests ## test套件(检测chart应用是否符合预期)
│ └── test-connection.yaml ### 简单的链接测试
└── values.yaml # 模板用到的配置变量
2.上传chart至helm仓库(基于腾讯云)
<1>. 创建和添加helm仓库
- 创建一个私有的tcr, 并开启公网访问
- 给本地添加helm chart 仓库
helm repo add mychartrepo https://attlee.cloudcr.com/chartrepo/$namesapce --username 101010 --password [实例临时密码]
helm repo update
helm repo list ## 查看是否成功
<2>. 上传chart应用
- 下载helm push 插件
helm plugin install https://github.com/chartmuseum/helm-push
- 上传chart 文件
helm push ./mychart mychartrepo
- 上传chart tgz 包
helm package ${chart-name} --version ${version} -d ./mychart
helm push mychart-1.2.0.tgz mychartrepo
<3>. 下载和安装chart应用
helm fetch mychartrepo/mychart --version 1.2.0
helm install -f values.yaml mychartrepo/mychart --version 1.2.0
<4>. 升级和回滚chart应用
helm upgrade mychart mychartrepo/mychart --version 1.2.0 ## 升级chart到指定版本
helm history testapi ## 查看chart发布历史
helm rollback testapi 2 ## 回滚chart应用到指定历史