k8s在使用单集群或者多集群的时候,使用cronjob进行定时备份etcd,尤其是在多个etcd的时候,尤其方便。
将cronjob调度到master节点上,因为使用kubeadm部署的时候,一般etcd会以host模式部署在master上。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: etcd-bak
spec:
schedule: "*/1 * * * *"
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 5
#activeDeadlineSenconds: 60
jobTemplate:
spec:
template:
metadata:
labels:
app: etcd-bak
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/role
operator: In
values:
- master
containers:
- name: etcd
image: xx.xx.xx.8x:8901/etcd/etcd:3.3.10
command:
- sh
- -c
- "export ETCDCTL_API=3; \
etcdctl --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
--endpoints $ENDPOINT snapshot save /tmp/$(date +%Y%m%d_%H%M%S)_snapshot.db; \
echo etcd backup sucess;
env:
- name: ENDPOINT
value: "127.0.0.1:2379"
volumeMounts:
- mountPath: "/tmp"
name: snapshot
# subPath: data/etcd-snapshot
- mountPath: /etc/localtime
name: lt-config
- mountPath: /etc/kubernetes/pki/etcd
name: etcd-secret
restartPolicy: OnFailure
volumes:
- name: snapshot
hostPath:
path: /data
- name: lt-config
hostPath:
path: /etc/localtime
- name: etcd-secret
hostPath:
path: /etc/kubernetes/pki/etcd
hostNetwork: true