Kubernetes中使用CronJob定时备份etcd集群数据
- 注意:这里的内容已经过时!
- 使用kubernetes1.12.3和etcd3.2.24请参考 Kubernetes的etcd探秘-状态数据备份 。
kubernetes中部署的应用的信息都存放在etcd里面,这里面的数据非常重要,需要备份,以备不时之需。
这里使用k8s提供的定时任务来执行备份任务,定时任务的pod要和etcd的pod要在同一个node上面(使用nodeAffinity)。
要求
- kubernetes 1.6
- etcd 3.0.17
yaml文件
apiVersion: batch/v2alpha1
kind: CronJob
metadata:
name: etcd-disaster-recovery
namespace: cron
spec:
schedule: "0 22 * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: etcd-disaster-recovery
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/role
operator: In
values:
- master
containers:
- name: etcd
image: coreos/etcd:v3.0.17
command:
- sh
- -c
- "export ETCDCTL_API=3; \
etcdctl --endpoints $ENDPOINT snapshot save /snapshot/$(date +%Y%m%d_%H%M%S)_snapshot.db; \
echo etcd backup sucess"
env:
- name: ENDPOINT
value: "127.0.0.1:2379"
volumeMounts:
- mountPath: "/snapshot"
name: snapshot
subPath: data/etcd-snapshot
- mountPath: /etc/localtime
name: lt-config
- mountPath: /etc/timezone
name: tz-config
restartPolicy: OnFailure
volumes:
- name: snapshot
persistentVolumeClaim:
claimName: cron-nas
- name: lt-config
hostPath:
path: /etc/localtime
- name: tz-config
hostPath:
path: /etc/timezone
hostNetwork: true
参考
- https://v1-6.docs.kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
- https://coreos.com/etcd/docs/3.0.17/op-guide/recovery.html
- Kubernetes Master节点 灾备恢复操作指南,https://yq.aliyun.com/articles/561894
- Kubernetes 备份,https://my.oschina.net/u/2306127/blog/2032463
来源:oschina
链接:https://my.oschina.net/u/2306127/blog/2032457