2022-12-04-k8s-使用job完成mysql的sql插入以及创建数据库

当我接触到job这个资源对象时,没想到特别的应用场景,直到我看到大佬的文章。

https://blog.csdn.net/weixin_49319422/article/details/121037460

可以使用job完成对Mysql的数据库的插入。

特记录如下:
1.部署Mysql.

2.编写job的yaml.

3.编写sql语句的Configmap,挂载到Job中。

4.编写Job的yaml.

5.运行job完成对Mysql的Sql语句插入。

#部署Mysql。

##Mysql.yaml如下:

apiVersion: apps/v1

kind: Deployment

metadata:

  creationTimestamp: null

  labels:

    app: mysql

  name: mysql

  namespace: demo-test

spec:

  replicas: 1

  selector:

    matchLabels:

      app: mysql

  strategy: {}

  template:

    metadata:

      creationTimestamp: null

      labels:

        app: mysql

    spec:

      containers:

      - image: mysql:5.7

        name: mysql

        env:

        - name:  MYSQL_ROOT_PASSWORD

          value: VMware1!

        ports:

        - containerPort: 3306

        resources: {}

status: {}

##Job的ConfigMap编写。(即sql语句)

#configmap:sql-config.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: mysql-initdb-sql-config

  namespace: demo-test

data:

  initdb.sql: |

    CREATE DATABASE if not exists  `database_audit` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

    USE `database_audit`;

    DROP TABLE IF EXISTS `t_alert`;

    CREATE TABLE `t_alert` (

    `id` int(11) NOT NULL,

    `address` varchar(20) NOT NULL,

    `db_type` varchar(45) NOT NULL,

    `log_type` varchar(45) NOT NULL,

    `message` text,

    `create_date` datetime NOT NULL,

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    DROP TABLE IF EXISTS `t_dic`;

    CREATE TABLE `t_dic` (

    `id` int(11) NOT NULL,

    `type` varchar(45) NOT NULL,

    `value` varchar(45) NOT NULL,

    `code` char(6) NOT NULL,

    `description` text,

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

##Job的yaml

#Jod:init-sql.yaml

apiVersion: batch/v1

kind: Job

metadata:

  name: mysql-init

  namespace: demo-test

spec:

template:

  metadata:

    name: myjob

  spec:

  containers:

  - name: init-sql

    image: monasca/mysql-init

    imagePullPolicy: IfNotPresent

    volumeMounts:

      - name: mysql-initdb

        mountPath: app/config

    command: ["sh","-c","mysql -u root -pVMware1! -P3306 -h $MYSQL_SERVICE_HOST < app/config/init.sql"]

  volumes:

  - name: mysql-initdb

    configMap:

      name: mysql-initdb-sql-config

      items:

      - key: initdb.sql

        path: init.sql

  restartPolicy: OnFailure

#使用kubectl expose deployment mysql --port=3306 -n demo-test 创建Mysql的svc.

#因为K8S服务发现机制1.env 2.coreDNS

创建好Mysql的svc后会在同NS下的pod中,添加MYSQL_SERVICE_HOST的env,即svc的ClusterIp.

##运行job任务前,需要保证:
1.Mysql Runing
2.Mysql Svc 正常。
3.Mysql 的 env正常。(即有MYSQL_SERVICE_HOST的env)如果没有请重启pod.

##运行结果如下:


进入到Mysql容器中查看:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容