一个计算机技术爱好者与学习者

0%

好好学Sealos:Sealos制作MySQL集群镜像

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
2
3
mkdir mysql && cd mysql
helm search repo bitnami/mysql -l
helm fetch bitnami/mysql --version 9.2.1

这里下载 chart9.2.1 版本,对应 mysql8.0.29 版本。
下载的文件名为:mysql-9.2.1.tgz

3、修改chart

1
2
3
4
tar -xzvf mysql-9.2.1.tgz
vim mysql/values.yaml
tar -czvf mysql-9.2.1-custom.tgz mysql
rm mysql -rf

修改chart的values.yaml,给一些默认值,然后重新打包chart,后续Dockerfile中的CMD中可以少填一些参数。

如下修改:

  • global.storageClass 不变,使用默认的storageclass即可
  • architecture 修改为 standalone
  • auth.rootPassword 修改为 mysql123
  • primary.persistence.size 修改为期望的存储大小 500Gi
  • primary.service.type 修改为 NodePort

3、添加镜像列表

1
2
mkdir -p images/shim/
vim images/shim/mysql-images.txt

内容为:

1
docker.io/bitnami/mysql:8.0.29-debian-11-r9

4、编写Dockerfile

1
2
3
4
FROM scratch
COPY ../mysql .
CMD ["helm install mysql mysql-9.2.1-custom.tgz \
-n mysql --create-namespace"]

5、构建集群镜像

1
2
sealos build -f Dockerfile -t docker.io/voidking/mysql:v8.0.29 .
sealos inspect 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
2
Error: INSTALLATION FAILED: failed to download "nfs-subdir-external-provisioner-4.0.18-custom.tgz"
Error: exit status 1

这是个新的坑:mysql镜像run,居然使用了nfs-provisioner:v4.0.0这个镜像的CMD。
待办:提个issue。

nfs-provisioner:v4.0.0镜像的制作方法,参考文档《sealos制作nfs-provisioner集群镜像》

4.2. 自定义安装mysql

1
2
3
4
5
sealos run docker.io/voidking/mysql:v8.0.29 --cmd="helm install mysql mysql-9.2.1-custom.tgz \
--namespace mysql --create-namespace \
--set auth.rootPassword=mysql123"

kubectl get all -n mysql

4.3. 上传集群镜像

上传到公共镜像仓库

1
2
3
4
sealos push docker.io/voidking/mysql:v8.0.29
sealos tag docker.io/voidking/mysql:v8.0.29 hub.sealos.cn/voidking/mysql:v8.0.29
sealos login -k config.yml hub.sealos.cn
sealos push hub.sealos.cn/voidking/mysql:v8.0.29

上传到私有镜像仓库

1
2
3
sealos tag docker.io/voidking/mysql:v8.0.29 harbor.voidking.com/sealos/mysql:v8.0.29
sealos login harbor.voidking.com
sealos push harbor.voidking.com/sealos/mysql:v8.0.29

4.4. 卸载mysql

1
2
3
4
5
helm list -A
helm uninstall mysql -n mysql
sealos ps
sealos rm default-xxx
cd /var/lib/sealos/data/default/applications && rm deafult-xxx -rf

4.5. 删除历史镜像

1
2
sealos images | grep '<none>' | awk '{print $3}' | xargs sealos rmi
# sealos rmi docker.io/voidking/mysql:v8.0.29