CronJob所描述的,正是定時任務。mysql
一個 CronJob
對象相似於 crontab (cron table)文件中的一行。它根據指定的預約計劃週期性地運行一個 Job。在這裏簡單的說一下cron,是指unix中cron表達式。好比:"*/1 * * * *"
,這個Cron表達式裏/1中 表示從0開始,/表示"每",1表示偏移量,因此它的意思是:從0開始,每1個時間單位執行一次。Cron表達式中五個部分分別表明:分鐘,小時,日,月,星期。因此上述這句Cron表達式的意思是:從當前開始,每分鐘執行一次。那麼咱們能夠利用這個機制來指定建立mysql備份任務的對象:sql
apiVersion: batch/v1beta1 kind: CronJob metadata: name: mysqldump spec: jobTemplate: spec: completions: 1 template: spec: restartPolicy: Never volumes: - name: mysql-master-script hostPath: path: /root/app/mysql/shell - name: mysql-master-backup hostPath: path: /root/app/db/backup - name: local-time hostPath: path: /etc/localtime containers: - name: mysqldump-container image: nacos/nacos-mysql-master:latest volumeMounts: - name: mysql-master-script mountPath: /var/db/script - name: local-time mountPath: /etc/localtime - name: mysql-master-backup mountPath: /var/db/backup command: - "sh" - "/var/db/script/mysqldump.sh" schedule: "50 15 * * *"
在這個Yaml文件當中,最重要的關鍵詞就是jobTemplate。它是由job對象控制的Controller,還有幾點關鍵的屬性我在這裏解釋說明一下:shell
spec.concurrencyPolicy
這個屬性主要是因爲定時任務的特殊性,極可能某個job還沒執行完,另一個新的job就產生了。它的取值分別爲:Allow(job能夠同時存在)
,Forbid(不會建立新的job,該週期會被跳過)
,Replace(新產生的Job替換舊的,沒有執行完的Job)
spec.startingDeadlineSeconds
來指定spec.parallelism
它定義的是一個Job在任意時間最多能夠啓動多少個Pod同時運行。spec.comletions
它定義的是job至少完成的Pod數目mysqldump.sh腳本以下:數據庫
#!/bin/bash #保存備份個數 number=3 #備份保存路徑 backup_dir=/var/db/backup #日期 dd=`date +%Y%m%d` #備份工具 tool=/usr/bin/mysqldump #用戶名 username=root #密碼 password=root #將要備份的數據庫 database_name=test #簡單寫法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql $tool -u $username -p$password -hmysql-master -P3306 --databases $database_name > $backup_dir/$database_name-$dd.sql #寫建立備份日誌 echo "create $backup_dir/$database_name-$dd.sql" >> $backup_dir/log.txt #找出須要刪除的備份 delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1` #判斷如今的備份數量是否大於$number count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l` if [ $count -gt $number ] then rm $delfile //刪除最先生成的備份只保留number數量的備份 #寫刪除文件日誌 echo "delete $delfile" >> $backup_dir/log.txt fi