前言
Rancher (v2.5+ ) 应用商店可以方便的安装 Helm3 构建的应用,并且支持私有 helm 应用仓库,方便了内网离线环境下的使用。本文以内网离线环境为前提、以 MySQL 5.7.43 版本为应用举例,从零开始手把手教你如何制作并应用。
1、环境准备
1.1 安装 helm
后续 helm 打包及仓库推送均在一台 centos 7 服务器中进行,所以需要在该服务器上安装 helm 程序。
具体下载及安装教程参考 https://helm.sh/docs/intro/install/
# 解压缩 helm 二进制包
tar -zxvf helm-v3.14.0-linux-amd64.tar.gz
# 移动位置
mv linux-amd64/helm /usr/local/bin/helm
# 验证安装
helm help
1.2 私有 helm 应用仓库搭建
在 Rancher 上或者任意 docker 环境中搭建 helm 应用仓库,后续才可以在 Rancher 中添加自定义应用。
应用商店使用 chartmuseum/chartmuseum:latest
, 可以在 Docker Hub 中搜索该镜像,下载后拷贝至离线环境,启动命令如下:
docker run -d -p 8080:8080 --name chartmuseum \
-v /home/charts:/charts \
-e STORAGE_LOCAL_ROOTDIR=/charts \
-e STORAGE=local
chartmuseum/chartmuseum:latest
注意提前建好持久化目录 /home/charts
1.3 下载 MySQL helm charts
以 bitnami 制作的 mysql helm chart 模板为基础,免去自己从头编写模板文件的步骤,后续深入学习后考虑完全自主编写。
下载地址:mysql 10.1.1 · bitnami/bitnami (artifacthub.io)
点击下载 tgz
包
1.4 拉取应用镜像
打开下载的 tgz
压缩包,用文本工具查看 Chart.yaml
有如下内容:
annotations:category: Databaseimages: |- name: mysqlimage: docker.io/bitnami/mysql:8.0.36-debian-12-r10- name: mysqld-exporterimage: docker.io/bitnami/mysqld-exporter:0.15.1-debian-12-r10- name: os-shellimage: docker.io/bitnami/os-shell:12-debian-12-r18
在这里我们需要把这三个镜像都下载后导出为 tar
包,然后导入到离线环境中才可以使用。由于我的需求是 MySQL 5.7.43 版本,docker.io/bitnami/mysql:5.7.43
是我下载导出的镜像,这里版本根据实际情况修改即可。
至此,我们需要完成以下事情:
-
在离线环境启动 chartmuseum 服务;
-
下载 MySQL chart 压缩包
mysql-10.1.1.tgz
并放至离线环境服务器中; -
导出压缩包内 Chart.yaml 文件中所列出的所有镜像包并导入离线环境服务器或私有镜像仓库中;
2、制作 Helm Chart
2.1 编辑 values.yaml
-
解压缩
mysql-10.1.1.tgz
包,编辑 values.yaml 文件,以下仅列出需要修改的配置:编辑全局层面配置信息:
# 全局层面配置 global:# 配置私有镜像仓库 Harbor 服务地址imageRegistry: "192.168.1.100:18888"# 配置私有镜像仓库秘钥(公开仓库可不配置)imagePullSecrets: ["harbor"]# 配置默认 pvc 存储类为 Longhorn,注意需要小写storageClass: "longhorn"
编辑镜像层面配置信息:
image:registry: docker.iorepository: bitnami/mysql# 这里 tag 需要修改为 5.7.43,和导入的镜像对应tag: 5.7.43
服务层面配置信息:
service:# 服务类型:NodePorttype: NodePortports:mysql: 3306
2.2 新建 questions.yaml
questions.yaml
是针对 Rancher 应用商店可视化配置模板参数的配置文件,通过表单问答式配置相关信息,内容如下:
questions:
- variable: auth.rootPasswordlabel: "MySQL Root Password"description: "MySQL 初始 Root 密码配置"type: passwordrequired: truegroup: "配置信息"- variable: auth.databaselabel: "MySQL Database Name"description: "MySQL 初始创建数据库"type: stringrequired: truedefault: "my_database"group: "配置信息"
解释:可以配置多个参数,此处以 root 密码和初始数据库为例,其中 variable
对应模板配置 values.yaml 中的 key
, 其他属性看字面就能理解。
2.3 重新打包
# 返回到 mysql 目录外部执行
$ helm package mysql
Successfully packaged chart and saved it to: /root/helm/mysql-10.1.1.tgz
2.4 上传至私有 helm chart 仓库
之前搭建的 chartmuseum 服务 url 为 http://192.168.1.100:8080
-
添加私有仓库
helm repo add hntl-helm-chart http://192.168.1.100:8080
-
上传 tgz 包至仓库
curl --data-binary "@mysql-10.1.1.tgz" http://192.168.1.100:8080/api/charts
-
从仓库中删除
curl -X DELETE http://192.168.1.100:8080/api/charts/mysql/10.1.1
-
更新仓库
helm repo update
-
搜索仓库
helm search repo
3、Rancher 应用商店
3.1 添加 Chart 仓库
-
进入 Rancher 仪表板
-
进入应用市场
-
添加私有仓库
填写仓库地址
-
更新仓库
3.2 创建 Chart 应用
在 charts 列表中可以看到我们私有仓库中的应用信息
点击即可进入配置页面,“配置项” 即为 questions.yaml
中的 group
值
配置完成后点击“安装”即可
稍等片刻,在对应的命名空间中就可以看到服务已经正常部署