[kubernetes]-通过job初始化mysql
导语:kubernetes如何通过额外的容器初始化mysql。交付的时候有需求,可能碰到升级的情况,要保留原有数据。采用job的方式来进行对myql容器的初始化,避免重复操作。尝试把sql文件创建成cm,但是报错文件太大了。使用monasca/mysql-init这个镜像。镜像70MB ,把初始化对应版本或者升级的sql 打成镜像。用来维护版本FROM monasca/mysql-initMAIN
导语:kubernetes如何通过额外的容器初始化mysql。交付的时候有需求,可能碰到升级的情况,要保留原有数据。采用job的方式来进行对myql容器的初始化,避免重复操作。
尝试把sql文件创建成cm,但是报错文件太大了。
使用monasca/mysql-init这个镜像。镜像70MB ,把初始化对应版本或者升级的sql 打成镜像。用来维护版本
FROM monasca/mysql-init
MAINTAINER xujiamin
COPY ge930init.sql /opt/ge930init.sql
docker build -t mysql-init:cta_ge_930_2021122_040201 ./
job对应的yaml
apiVersion: batch/v1
kind: Job
metadata:
name: mysql-init
spec:
template:
metadata:
name: myjob
spec:
containers:
- name: init-sql
image: mysql-init:cta_ge_930_2021122_040201
#image: monasca/mysql-init
imagePullPolicy: IfNotPresent
command: ["sh","-c","mysql -uroot -pdeepwise -hmysql-headless.default.svc < /opt/ge930init.sql"]
restartPolicy: OnFailure
启动过程如下 完成之后变成completed状态
测试重启服务器,效果为 job没有restart
但是后续依赖mysql的应用服务我没想好怎么去做监控。用initcontainer如何去检测job是否执行完成。
目前是用shell检测状态,然后分步apply 其余的yaml
#!/bin/bash
second=0
while true
do
result=`kubectl get pods |grep mysql-init |grep Completed `
if [ ${second} -ge 120 ];then
red "mysql初始化sql等待时间过长 判断为部署失败 请自行检查服务状态"
exit 1
fi
if [[ "$result" =~ Completed ]]; then
green "mysql初始化成功 耗时 $second 秒"
break
fi
second=$((second + 5))
sleep 5
echo 目前mysql初始化已经耗费 $second 秒
done
参考
https://blog.csdn.net/weixin_49319422/article/details/121037460?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-1-121037460.pc_agg_new_rank&utm_term=job+k8s+mysql+%E5%88%9D%E5%A7%8B%E5%8C%96&spm=1000.2123.3001.4430
更多推荐
所有评论(0)