1. 前言
本文中,我们会基于sealos制作一个MySQL集群镜像。
使用这个集群镜像,我们能够在sealos拉起的K8S集群中,一键部署单节点的MySQL 8.0.29。
参考文档:
2. 前置条件
安装sealos4.2.0,拉起K8S 1.24.8集群(同时安装helm),具体方法参考《sealos入门篇》。
3. 制作MySQL集群镜像
1、添加chart仓库
1 | helm repo add bitnami https://charts.bitnami.com/bitnami |
2、下载chart
1 | mkdir mysql && cd mysql |
这里下载 chart9.2.1 版本,对应 mysql8.0.29 版本。
下载的文件名为:mysql-9.2.1.tgz
3、修改chart
1 | tar -xzvf mysql-9.2.1.tgz |
修改chart的values.yaml,给一些默认值,然后重新打包chart,后续Dockerfile中的CMD中可以少填一些参数。
如下修改:
- global.storageClass 不变,使用默认的storageclass即可
- architecture 修改为 standalone
- auth.rootPassword 修改为 mysql123
- primary.persistence.size 修改为期望的存储大小 500Gi
- primary.service.type 修改为 NodePort
3、添加镜像列表
1 | mkdir -p images/shim/ |
内容为:
1 | docker.io/bitnami/mysql:8.0.29-debian-11-r9 |
4、编写Dockerfile
1 | FROM scratch |
5、构建集群镜像
1 | sealos build -f Dockerfile -t docker.io/voidking/mysql:v8.0.29 . |
4. 使用mysql集群镜像
4.1. 安装mysql
运行mysql应用,安装mysql
1 | sealos run docker.io/voidking/mysql:v8.0.29 |
报错:
1 | Error: INSTALLATION FAILED: failed to download "nfs-subdir-external-provisioner-4.0.18-custom.tgz" |
这是个新的坑:mysql镜像run,居然使用了nfs-provisioner:v4.0.0这个镜像的CMD。
待办:提个issue。
nfs-provisioner:v4.0.0镜像的制作方法,参考文档《sealos制作nfs-provisioner集群镜像》
4.2. 自定义安装mysql
1 | sealos run docker.io/voidking/mysql:v8.0.29 --cmd="helm install mysql mysql-9.2.1-custom.tgz \ |
4.3. 上传集群镜像
上传到公共镜像仓库
1 | sealos push docker.io/voidking/mysql:v8.0.29 |
上传到私有镜像仓库
1 | sealos tag docker.io/voidking/mysql:v8.0.29 harbor.voidking.com/sealos/mysql:v8.0.29 |
4.4. 卸载mysql
1 | helm list -A |
4.5. 删除历史镜像
1 | sealos images | grep '<none>' | awk '{print $3}' | xargs sealos rmi |