导语: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

Logo

开源、云原生的融合云平台

更多推荐