本文以 Mongo 數(shù)據(jù)備份為例,演示在 Kubernetes 集群中運行 Job,以及相關命令和概念。
部署 MongoDB
1、創(chuàng)建 Mongo 部署文件 mongo.yaml
apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
selector:
app: mongo
ports:
- port: 27017
type: NodePort
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pv-claim
labels:
app: mongo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
labels:
app: mongo
spec:
replicas: 1
template:
metadata:
name: mongo
labels:
app: mongo
spec:
containers:
- name: mongo
image: registry.docker-cn.com/library/mongo
imagePullPolicy: IfNotPresent
ports:
- containerPort: 27017
name: mongo
volumeMounts:
- name: mongo-persistent-storage
mountPath: /data/db
restartPolicy: Always
volumes:
- name: mongo-persistent-storage
persistentVolumeClaim:
claimName: mongo-pv-claim
selector:
matchLabels:
app: mongo
2、部署 Mongo
kubectl create -f mongo.yaml
3、在 Dashboard 中查看 Mongo 服務相關信息,訪問 http://192.168.99.100:30000 ,一般為 Minikube VM IP(192.168.99.100) + Port (30000)
Mongo 持久化卷
Mongo Pod
部署 MongoDB 數(shù)據(jù)備份任務
1、創(chuàng)建備份任務的配置文件 backup.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: mongo-backup
spec:
template:
spec:
containers:
- name: mongo-backup
image: registry.docker-cn.com/library/busybox
command: ["tar", "cvf", "/backup/backup.tar", "/data/db"]
volumeMounts:
- mountPath: /backup
name: mongo-backup-persistent-storage
- mountPath: /data/db
name: mongo-persistent-storage
restartPolicy: Never
volumes:
- name: mongo-backup-persistent-storage
hostPath:
path: /tmp/mongo
- name: mongo-persistent-storage
persistentVolumeClaim:
claimName: mongo-pv-claim
backoffLimit: 4
其中用到了 2 個數(shù)據(jù)卷,mongo-backup-persistent-storage 綁定主機的 /tmp/mongo 路徑, mongo-persistent-storage 對應 MongoDB 的數(shù)據(jù)卷,并同時掛載到 busybox 容器,這樣就能將 MongoDB 的數(shù)據(jù)備份到 /tmp/mongo 目錄下。
2、啟動備份 Job
kubectl create -f backup.yaml
3、查看 Job 執(zhí)行情況
4、確認備份文件存在,在 Minikube VM 中查看 /tmp/mongo 文件
移除備份任務
直接在 Dashboard 面板上刪除任務,包括任務和容器組。
創(chuàng)建 Cron 任務
1、每分鐘備份一次 MongoDB 數(shù)據(jù) backup-cron.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: mongo-backup-cron
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: mongo-backup
image: registry.docker-cn.com/library/busybox
command:
- /bin/sh
- -c
- tar cvf /backup/mongo-data.tar /data/db
volumeMounts:
- mountPath: /backup
name: mongo-backup-persistent-storage
- mountPath: /data/db
name: mongo-persistent-storage
restartPolicy: Never
volumes:
- name: mongo-backup-persistent-storage
hostPath:
path: /tmp/mongo
- name: mongo-persistent-storage
persistentVolumeClaim:
claimName: mongo-pv-claim
2、啟動 Cron 任務
kubectl create -f backup-cron.yaml
3、查看任務調度