diff --git a/etcd-backup-cronjib.yaml b/etcd-backup-cronjib.yaml new file mode 100644 index 0000000..c9a603e --- /dev/null +++ b/etcd-backup-cronjib.yaml @@ -0,0 +1,47 @@ +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: etcd-snapshot + namespace: default +spec: + schedule: "50 23 * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: backup + # Same image as in /etc/kubernetes/manifests/etcd.yaml + image: k8s.gcr.io/etcd:3.4.3-0 + env: + - name: ETCDCTL_API + value: "3" + command: ["/bin/sh"] + args: ["-c", "etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save /backup/etcd/snapshot-$(date +%Y-%m-%d_%H-%M-%S_%Z).db"] + volumeMounts: + - mountPath: /etc/kubernetes/pki/etcd + name: etcd-certs + readOnly: true + - mountPath: /backup/etcd + name: backup + hostNetwork: true + restartPolicy: Never + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: node-role.kubernetes.io/master + operator: Exists + tolerations: + - effect: NoSchedule + operator: Exists + volumes: + - name: etcd-certs + hostPath: + path: /etc/kubernetes/pki/etcd + type: Directory + - name: backup + hostPath: + path: /mnt/backups/etcd + type: Directory