特别鸣谢:

k8s cronjob之mysql定时备份_愺艮搥豩的技术博客_51CTO博客

[kubernetes]-使用cronjob定时备份mysql_k8s mysql备份_爷来辣的博客-CSDN博客

什么是 CronJobs?

根据Kubernetes 文档,一个 CronJob 对象就像一个 crontab 或 cron 表文件的一行。当您专注于软件开发的其他方面时,它会在后台以 Cron 格式运行预定的 Kubernetes 作业。

下图演示了 CronJob 流程:

 

如您所见,需要一个复杂的机制来提供一个简单的 cron 功能。Kubernetes 至少需要三个不同的对象(CronJob、Job 和 Pod)来完成 cron 任务。这个实现是有意的。该设计遵循 Kubernetes 的核心原则,即在循环中响应集群中的变化和执行自适应操作。

如图所示,流程如下:

  1. 用户应用包含两条主要信息的 CronJob 清单:何时执行和做什么。(您可以在下面看到示例配置。)
  2. 主要逻辑在CronJob 控制器中作为kube-controller-manager. 默认情况下,它每十秒检查一次是否应该运行 CronJob。
  3. 当控制器找到要执行的 CronJob 时(意味着当前时间与通过 cron 语法指定的时间匹配),它将创建另一个名为 Job 的对象。每个作业都跟踪一个特定的调用并包含从 CronJob 继承的关于要做什么的信息。
  4. Kubernetes 检测到新的 Job 对象后,会立即尝试执行。它将根据 CronJob 通过 Job in 传递下来的配置来安排新 Pod 的创建jobTemplate。当 Pod 运行时,它将执行您的 cron 任务。

创建mysql_cronjob 

apiVersion: batch/v1
kind: CronJob
metadata:
  namespace: default 
  name: mysql-full-backup-job
spec:
  concurrencyPolicy: Allow
  #backoffLimit: 6  # 指定job失败后进行重试的次数,默认值是6
  failedJobsHistoryLimit: 10 #保留执行失败的历史记录次数,默认值是1。
  schedule: "0 1 * * *"  # 和linux的crontab规则一样
  successfulJobsHistoryLimit: 14 #保留执行成功的历史记录次数,默认值是3。
  jobTemplate:
    metadata:
    spec:
      template:
        metadata:
        spec:
          restartPolicy: Never
          containers:
          - command:
            - /bin/sh
            - -c
            - /var/lib/mysql/script/mysql_bak.sh
            image: mysql:8.0.29-debian
            imagePullPolicy: IfNotPresent
            name: cronjob
            volumeMounts:
            - mountPath: /var/lib/mysql/script
              name: mysql-script
            - mountPath: /var/lib/mysql/backup
              name: mysql-backup
          volumes:
           - name: mysql-script
             persistentVolumeClaim:
               claimName: mysql-config
           - name: mysql-backup
             persistentVolumeClaim:
               claimName: mysql-backup-pvc

创建mysql备份脚本

#!/bin/bash
#
DB_NAME=""
DB_USER=""
DB_PASS=""
DB_HOST=""
DB_PORT=""
DB_BAK_PATH=""


mysqldump -h${DB_HOST} -u${DB_USER} -p${DB_PASS} -P${DB_PORT} ${DB_NAME} > ${DB_BAK_PATH}/${DB_NAME}_`date "+%Y-%m-%d"`.sql


cd ${DB_BAK_PATH}
tar zcf ${DB_NAME}_`date "+%Y-%m-%d"`.sql.tar.gz ${DB_NAME}_`date "+%Y-%m-%d"`.sql
rm -f ${DB_BAK_PATH}/${DB_NAME}_`date "+%Y-%m-%d"`.sql
#cp ${DB_BAK_PATH}/${DB_NAME}_`date "+%Y-%m-%d"`.sql.tar.gz /tmp/ossfs/db_backup/${DB_NAME}_sql_bak/

find ${DB_BAK_PATH}/ -mtime +3 -name "*.tar.gz" -exec rm -rf {} \;

 查看计划任务

[root@daliangang deploy]# kubectl get cj -w
NAME                    SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
mysql-full-backup-job   0 1 * * *   False     0        <none>          6m19s

Logo

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

更多推荐