- 博客/
K8S 使用 CronJob 备份 MySQL 数据至 MInIO

作者
Johny
熟练的 云原生搬砖师
Table of Contents
说明#
目前 K8S 已相当成熟,完全具备生产环境的落地应用。在各应用复杂的运行场景下,有时也会将 MySQL 这类有状态应用也部署至 K8S 中,但是部署后,如何保证其数据的安全性,却成了运维人员一个棘手的问题,本文将论述,如何使用 CronJob 将 MySQL 实例数据备份至
MinIO S3
存储中,来保证其数据安全性。
备份#
下述 YAML 中所使用的镜像,我已整理至下述仓库中 。
CronJob 部署清单#
更改下述
Secret
环境变量为你实际环境中所对应的。
MINIO_SERVER:
Minio 实例地址
MINIO_ACCESS_KEY: MinIO 用户
MINIO_SECRET_KEY: MinIO 密码
MINIO_BUCKET: 存储桶 / 存放路径
MINIO_BUCKET
更改下述
ConfigMap
环境变量为你实际环境中所对应的
- dbhost: mysql service 地址
- all_databases: 是否备份所有数据库
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: mysqldump
spec:
schedule: 0 4 * * *
failedJobsHistoryLimit: 1
successfulJobsHistoryLimit: 3
suspend: false
jobTemplate:
spec:
template:
spec:
containers:
- name: mysqldump
image: cdryzun/kube-mysqldump-tominio-cron:v0.1.0
env:
# Injecting NAME_SPACE using Downward API
- name: MYSQL_ENV_NAME_SPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: ALL_DATABASES
valueFrom:
configMapKeyRef:
name: mysqldump
key: all_databases
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: mysqldump
key: dbhost
- name: DB_USER
value: root
- name: DB_PASS
valueFrom:
secretKeyRef:
name: mysql-server
key: mysql-root-password
- name: MINIO_SERVER
valueFrom:
secretKeyRef:
name: miniocreds
key: MINIO_SERVER
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
name: miniocreds
key: MINIO_ACCESS_KEY
- name: MINIO_SECRET_KEY
valueFrom:
secretKeyRef:
name: miniocreds
key: MINIO_SECRET_KEY
- name: MINIO_BUCKET
valueFrom:
secretKeyRef:
name: miniocreds
key: MINIO_BUCKET
imagePullPolicy: Always
volumeMounts:
- mountPath: /mysqldump
name: mysqldump
volumes:
- name: mysqldump
emptyDir: {}
restartPolicy: OnFailure
---
apiVersion: v1
data:
dbhost: "mysql-server"
all_databases: "true"
kind: ConfigMap
metadata:
name: mysqldump
---
apiVersion: v1
kind: Secret
metadata:
name: miniocreds
type: Opaque
stringData:
MINIO_SERVER: http://oss.example.com:9000
MINIO_ACCESS_KEY: root
MINIO_SECRET_KEY: iexample
MINIO_BUCKET: "mysql-backups/example-dev"
使用后效果#
总结#
使用上述方法就能将对应MySQL实例中所有数据进行备份了,实现方式也比较简单,感兴趣的朋友可以看一下项目的源码。如果有多个MySQL实例需要备份时,可以创建多个
CronJob
解决。后面有时间把基于 PVC 文件备份的同时也做实现一下。
相关文章
修复 SSH 免密无法连接
·296 字·1 分钟·
SRE
linux
sshd
Velero 备份迁移工具的安装
·279 字·1 分钟·
devops
k8s
Velero
docker-compose
backup
Linux 使用 LVM 来扩充分区
·143 字·1 分钟·
SRE
linux
lvm
Argocd Cli Usage Tips
·269 字·1 分钟·
devops
argocd
记录一次 Nexus3 Pypi 私服 Blob Storage 异常的修复
·1234 字·3 分钟·
devops
neuxs3
fix
pypi
jenkins
pipeline
Git Docs
·307 字·1 分钟·
devops
git