version: v3.4.17

查看集群状态
  1. etcdctl --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt --key=/etc/kubernetes/pki/apiserver-etcd-client.key --cacert=/etc/kubernetes/pki/etcd/ca.crt --endpoints=https://10.12.3.6:2379,https://10.12.3.7:2379,https://10.12.3.8:2379 endpoint health
查看所有的key
  1. etcdctl --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt --key=/etc/kubernetes/pki/apiserver-etcd-client.key --cacert=/etc/kubernetes/pki/etcd/ca.crt --endpoints=https://10.12.3.6:2379,https://10.12.3.7:2379,https://10.12.3.8:2379 get / --prefix --keys-only

参考文档:https://www.huweihuang.com/kubernetes-notes/etcd/etcdctl-v3.html

ETCD备份
  1. ETCDCTL_API=3 etcdctl --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt --key=/etc/kubernetes/pki/apiserver-etcd-client.key --cacert=/etc/kubernetes/pki/etcd/ca.crt --endpoints=https://10.12.3.6:2379,https://10.12.3.7:2379,https://10.12.3.8:2379 snapshot save /root/etcd-snapshot-`date +%Y%m%d`.db

备份脚本:

  1. #!/usr/bin/env bash
  2. date;
  3. CACERT="/opt/kubernetes/ssl/ca.pem"
  4. CERT="/opt/kubernetes/ssl/server.pem"
  5. EKY="/opt/kubernetes/ssl/server-key.pem"
  6. FILEPATH="/data/etcd_backup_dir"
  7. ENDPOINTS="192.168.1.36:2379"
  8. ETCDCTL_API=3 etcdctl \
  9. --cacert="${CACERT}" --cert="${CERT}" --key="${EKY}" \
  10. --endpoints=${ENDPOINTS} \
  11. snapshot save $FILEPATH/etcd-snapshot-`date +%Y%m%d`.db
  12. # 备份保留30天
  13. find /data/etcd_backup_dir/ -name *.db -mtime +30 -exec rm -f {} \;
单点ETCD恢复备份(k8s)
  1. #1、停止k8s master节点的集群服务组件
  2. systemctl stop kubelet && systemctl stop docker
  3. #2、检查是否还要docker容器启动着,等待容器全部停止
  4. ps aux | grep docker
  5. #etcd恢复
  6. etcdctl snapshot restore /root/etcd-snapshot-v1.db --name v1 --data-dir=/home/etcd_data
集群模式恢复备份

准备工作

  • 停止所有 Master 上 kube-apiserver 服务
  • 停止集群中所有 ETCD 服务
  • 移除所有 ETCD 存储目录下数据
  • 拷贝 ETCD 备份快照
  1. systemctl stop kubelet && docker rm -f $(docker ps -aq) && systemctl stop docker
  2. mv /var/lib/etcd /var/lib/etcd.bak
  3. # 从 k8s-master1 机器上拷贝备份
  4. $ scp /data/etcd_backup_dir/etcd-snapshot-20191222.db root@k8s-master2:/data/etcd_backup_dir/
  5. $ scp /data/etcd_backup_dir/etcd-snapshot-20191222.db root@k8s-master3:/data/etcd_backup_dir/
  1. # k8s-master1 机器上操作
  2. $ ETCDCTL_API=3 etcdctl snapshot restore /data/etcd_backup_dir/etcd-snapshot-20191222.db \
  3. --name etcd-0 \
  4. --initial-cluster "etcd-0=https://192.168.1.36:2380,etcd-1=https://192.168.1.37:2380,etcd-2=https://192.168.1.38:2380" \
  5. --initial-cluster-token etcd-cluster \
  6. --initial-advertise-peer-urls https://192.168.1.36:2380 \
  7. --data-dir=/var/lib/etcd/default.etcd
  8. # k8s-master2 机器上操作
  9. $ ETCDCTL_API=3 etcdctl snapshot restore /data/etcd_backup_dir/etcd-snapshot-20191222.db \
  10. --name etcd-1 \
  11. --initial-cluster "etcd-0=https://192.168.1.36:2380,etcd-1=https://192.168.1.37:2380,etcd-2=https://192.168.1.38:2380" \
  12. --initial-cluster-token etcd-cluster \
  13. --initial-advertise-peer-urls https://192.168.1.37:2380 \
  14. --data-dir=/var/lib/etcd/default.etcd
  15. # k8s-master3 机器上操作
  16. $ ETCDCTL_API=3 etcdctl snapshot restore /data/etcd_backup_dir/etcd-snapshot-20191222.db \
  17. --name etcd-2 \
  18. --initial-cluster "etcd-0=https://192.168.1.36:2380,etcd-1=https://192.168.1.37:2380,etcd-2=https://192.168.1.38:2380" \
  19. --initial-cluster-token etcd-cluster \
  20. --initial-advertise-peer-urls https://192.168.1.38:2380 \
  21. --data-dir=/var/lib/etcd/default.etcd
# 启动etcd和kubelet
  1. systemctl start docker && systemctl start kubelet
文档更新时间: 2022-10-26 16:27   作者:张尚