【k8s】 etcd服务端及客户端版本及快照【定时】备份 20260730
1、master节点-etcd服务端版本
####先获取 etcd 静态 Pod 名称
kubectl get pods -n kube-system | grep etcd
####查看集群 etcd 版本
kubectl exec -n kube-system etcd-k8s-master -- etcd --version

服务端版本:etcd Version: 3.5.9

2、master节点-etcd客户端版本
客户端v3.5.31
wget https://github.com/etcd-io/etcd/releases/download/v3.5.33/etcd-v3.5.33-linux-amd64.tar.gz
tar -zxvf etcd-v3.5.33-linux-amd64.tar.gz
cd etcd-v3.5.33-linux-amd64
cp etcdctl etcdutl /usr/local/bin/

# 验证客户端版本
etcdctl version

etcdutl version

3、master节点-etcd健康检测命令
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
endpoint health

https://127.0.0.1:2379 is healthy: successfully committed proposal: took = 26.893613ms
####etcd 连接正常、集群健康探测成功!
4、etcd 快照备份(生产核心命令)
4.1 master 节点提前创建备份目录
mkdir -p /data/etcd-backup
4.2 备份完成立刻查看快照信息
ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /data/etcd-backup/etcd-$(date +%Y%m%d-%H%M).snap \
&& etcdutl snapshot status /data/etcd-backup/etcd-$(date +%Y%m%d-%H%M).snap


4.3
#集群成员列表
ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
member list


#集群版本
ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
version

#集群领导者
ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
endpoint status

####可以把证书参数写入环境变量,后续命令不用重复携带证书
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key
####简写
##健康检测命令
etcdctl endpoint health
##备份快照命令
etcdctl snapshot save test.snap

####集群列表
etcdctl member list

####单独查看快照命令(手动执行)
etcdutl snapshot status /data/etcd-backup/test.snap


# 查看集群领导者、版本、数据大小
etcdctl endpoint status

4.4 备份完成立刻查看快照信息脚本
#创建脚本
vi /data/etcd-backup/etcd-backup.sh
#赋予执行权限
chmod +x /data/etcd-backup/etcd-backup.sh
##手动立即执行测试
###手动临时清理环境变量再运行
unset ETCDCTL_API ETCDCTL_ENDPOINTS ETCDCTL_CACERT ETCDCTL_CERT ETCDCTL_KEY
./etcd-backup.sh

./etcd-backup.sh或/data/etcd-backup/etcd-backup.sh

4.5
4.6 etcd-backup.sh脚本内容
#!/bin/bash
# 清除etcdctl环境变量冲突
unset ETCDCTL_API
unset ETCDCTL_ENDPOINTS
unset ETCDCTL_CACERT
unset ETCDCTL_CERT
unset ETCDCTL_KEY
SNAP=/data/etcd-backup/etcd-$(date +%Y%m%d-%H%M).snap
ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save "${SNAP}"
echo "====快照信息===="
if [ -f "${SNAP}" ];then
etcdutl snapshot status "${SNAP}"
else
echo "❌快照文件生成失败!"
fi
echo "====删除7天前快照===="
# 算出7天前日期 YYYYMMDD
DEL_DATE=$(date -d "7 days ago" +%Y%m%d)
find /data/etcd-backup -name "etcd-*.snap" | while read file;do
# 提取文件名中的8位日期
FILE_DATE=$(echo "$file" | grep -oE "etcd-[0-9]{8}" | cut -d'-' -f2)
if [[ "$FILE_DATE" < "$DEL_DATE" ]];then
echo "删除旧备份:$file"
rm -f "$file"
fi
done
