需要对一个k8s上mysql数据库修改插入数据,sql语句经常会变动。
可以建议使用jobs和configmap的方式完成。

1、完成dockerfile,需要安装mysql前台客户端和部署shell脚本。

FROM centos7-jdk8

COPY init.sh /opt/
COPY mysql-community-client-5.7.23-1.el7.x86_64.rpm /opt/
RUN rpm -ivh /opt/mysql-community-client-5.7.23-1.el7.x86_64.rpm --nodeps --force
RUN mkdir /opt/sql
RUN chmod +x /opt
WORKDIR /opt

init.sh脚本:

#!/bin/bash
#execute all script in specified directory
MYDATE=`date +%F'-'%T'-'%w`
MYSQL_PATH=/opt/sql/common #指定的目录
mysql -h127.0.0.1 -uroot -p12345#LC < /opt/sql/init.sql
for file in ${MYSQL_PATH}/*
do
if [ -f "$file" ] ; then
postfix=`echo $file | awk -F'.' '{print  "."$NF}'`
  if [ $postfix = ".sql" ] ; then
        mysql -h127.0.0.1 -uroot -p12345 < $file 
  fi
fi
done

2、完成jobs

apiVersion: batch/v1
kind: Job
metadata:
 name: mysqlinit
spec:
 template:
  metadata:
   labels:
    job-name: mysqlinit
  spec:
   containers:
   - name: mysqlinit1
     image: mysql-init:1.0.0
     command: ["sh", "init.sh"]
     env:
       - name: MYSQL_ROOT_PASSWORD
         valueFrom:
           configMapKeyRef:
             name: allsmart-config
             key: MYSQL_ROOT_PASSWORD
     volumeMounts:
       - name: init-config
         mountPath: /opt/sql
   volumes:
       - name: init-config
         configMap:
           name: allsmart-config
           items:
            - key: cloud.sql
              path: common/cloud.sql
            - key: config.sql
              path: common/config.sql
   restartPolicy: Never

执行jobs,即可完成对mysql 的修改插入。
原理:所有的sql文件,如cloud.sql都是通过configmap挂载的,脚本会遍历目录common下的所有sql文件执行,后续需要修改的话,直接修改configmap即可。
需要添加sql也只需要修改jobs的yaml文件。
可以参照此方法完成k8s上数据库的插入部署。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐