k8s备份etcd3.5

时间:2025-05-11 15:54:12
  • # cat etcd_back.yaml
  • apiVersion: v1
  • kind: PersistentVolumeClaim
  • metadata:
  • name: etcdback
  • namespace: crontabs
  • spec:
  • storageClassName: "nfs-client"
  • accessModes:
  • - ReadWriteMany
  • resources:
  • requests:
  • storage: 50Gi
  • ---
  • apiVersion: batch/v1
  • kind: CronJob
  • metadata:
  • name: etcddisasterrecovery
  • namespace: crontabs
  • spec:
  • schedule: "0 */4 * * *"
  • jobTemplate:
  • spec:
  • template:
  • metadata:
  • labels:
  • app: etcddisasterrecovery
  • spec:
  • # affinity:
  • # nodeAffinity:
  • # requiredDuringSchedulingIgnoredDuringExecution:
  • # nodeSelectorTerms:
  • # - matchExpressions:
  • # - key: /hostname
  • # operator: In
  • # values:
  • # - master01 # 选择特定的节点(这里是选择 hostname 为 master01 的节点)
  • nodeName: yl2.
  • containers: # 定义 Pod 中的容器
  • - name: etcd # 容器名称
  • image: 8/etcd:3.5.10-3 # 使用的 etcd 镜像版本为 3.5.10-0,此容器经过了加工
  • imagePullPolicy: "IfNotPresent" # 镜像拉取策略,如果本地已存在该镜像,则不重新拉取
  • command: # 容器启动命令
  • - sh
  • - -c
  • - "mkdir /snapshot/`date +%Y%m%d%H` \
  • export ETCDCTL_API=3; \
  • etcdv359/etcdctl --endpoints=$ENDPOINT \
  • --cert=/etc/kubernetes/pki/etcd/ \
  • --key=/etc/kubernetes/pki/etcd/ \
  • --cacert=/etc/kubernetes/pki/etcd/ \
  • snapshot save /snapshot/`date +%Y%m%d%H`/; \
  • echo etcd backup success"
  • env: # 环境变量配置,设置了一个名为 ENDPOINT 的环境变量,值为 "https://127.0.0.1:2379"
  • - name: ENDPOINT
  • value: "https://192.168.110.38:2379"
  • volumeMounts: # 挂载配置,指定了容器中需要挂载的卷和挂载路径
  • - mountPath: "/etc/kubernetes/pki/etcd" # 将主机上的 /etc/kubernetes/pki/etcd 目录挂载到容器的 /etc/kubernetes/pki/etcd 路径
  • name: etcd-certs
  • - mountPath: "/var/lib/etcd" # 将主机上的 /var/lib/etcd 目录挂载到容器的 /var/lib/etcd 路径
  • name: etcd-data
  • - mountPath: "/snapshot" # 将主机上的 /root/etcd/snapshot 目录挂载到容器的 /snapshot 路径
  • name: snapshot
  • subPath: data/etcd-snapshot # 在主机上的 /root/etcd/snapshot 目录下,将数据挂载到容器的 /snapshot/data/etcd-snapshot 路径下
  • - mountPath: /etc/localtime # 将主机上的 /etc/localtime 文件挂载到容器的 /etc/localtime 路径
  • name: lt-config
  • restartPolicy: OnFailure # 定义容器重启策略,当容器失败时才会重启
  • volumes: # 卷配置,定义了 Pod 中使用的卷
  • - name: etcd-certs
  • hostPath:
  • path: /etc/kubernetes/pki/etcd # 使用主机上的 /etc/kubernetes/pki/etcd 目录作为卷
  • - name: etcd-data
  • hostPath:
  • path: /var/lib/etcd # 使用主机上的 /var/lib/etcd 目录作为卷
  • #- name: snapshot
  • # hostPath:
  • # path: /root/etcd/snapshot # 使用主机上的 /root/etcd/snapshot 目录作为卷
  • - name: snapshot
  • persistentVolumeClaim:
  • claimName: etcdback
  • - name: lt-config
  • hostPath:
  • path: /etc/localtime # 使用主机上的 /etc/localtime 文件作为卷
  • #hostNetwork: true # 使用主机网络模式,Pod 将共享主机的网络命名空间
  • ## 建命名空间
  • # kubectl create ns crontabs
  • ## 部署cronjob
  • # kubectl apply -f etcd_back.yaml