kubernetes中部署的應用的信息都存放在etcd裏面,這裏面的數據很是重要,須要備份,以備不時之需。html
這裏使用k8s提供的定時任務來執行備份任務,定時任務的pod要和etcd的pod要在同一個node上面(使用nodeAffinity)。node
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