背景
mysql备份是做为运维的一个常规工作,在传统环境中很容易实现,这边记录一下使用k8s cronjob定时备份,代码如下:
创建nfs类型pvc
vi mysql-cronjob-pvc.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-cronjob-pv
labels:
pv: mysql-cronjob-pv
namespace: test
spec:
capacity:
storage: 10Gi #指定pv的容量为10Gi
#指定访问模式
accessModes:
- ReadWriteOnce #pv能以readwriteMany模式mount到单个节点
#指定pv在nfs服务器上对应的目录
storageClassName: ""
nfs:
path: /data/nfs
server: 10.10.10.236
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-cronjob-pvc
namespace: test
labels:
app: mysql-cronjob-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ""
selector:
matchLabels:
pv: mysql-cronjob-pv
创建cronjob
vi mysql-cronjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:
namespace: test
spec:
concurrencyPolicy: Allow
failedJobsHistoryLimit: 1
jobTemplate:
metadata:
spec:
template:
metadata:
spec:
containers:
- command:
- /bin/sh
- -c
- mysqldump -uroot -p123456 -h mysql --databases nacos_config >/var/lib/mysql/nacos_config.sql
image: mysql:8.0.29-debian
imagePullPolicy: IfNotPresent
name: mysql-cronjob
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql-cronjob
volumes:
- name: mysql-cronjob
persistentVolumeClaim:
claimName: mysql-cronjob-pvc
查看cronjob
kubectl create -f mysql-cronjob-pvc.yml
kubectl create -f mysql-cronjob.yml
[root@k8s-master-10 mysql]# kubectl -n test get cronjobs.batch
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 18 37s 4h12m
查看Job日志
kubectl -n test get jobs.batch
pods=$(kubectl -n test get pods --selector=job-name=hello-27559124 --output=jsonpath={.items..metadata.name})
kubectl -n test logs $pods
说明:jobname
是上面kubectl -n test get jobs.batch
取出来的其中一个,因为是个定时任务,每分钟执行一次,所以随机取一个就可以
验证是否成功
在nfs服务器的相关目录查看是否生成了nacos_config.sql文件