etcd 备份与恢复

etcd 备份与恢复

复制代码
# 安装 etcdctl 命令
# 方式一:
docker cp $(docker ps | grep -v etcd-mirror | grep -w etcd| awk '{print $1}'):/usr/local/bin/etcdctl /usr/bin

# 方式二:
wget https://github.com/etcd-io/etcd/releases/download/v3.5.10/etcd-v3.5.10-linux-arm64.tar.gz
tar -xf etcd-v3.5.10-linux-arm64.tar.gz
cd etcd-v3.5.10-linux-amd64
cp etcd* /usr/sbin

#  Kubernetes 集群备份主要是备份 ETCD 集群。而恢复时,主要考虑恢复整个顺序:
--------------  停止kube-apiserver --> 停止ETCD --> 恢复数据 --> 启动ETCD --> 启动kube-apiserve ------------------
# 注意:备份ETCD集群时,只需要备份一个ETCD就行,恢复时,拿同一份备份数据恢复。

etcd备份

复制代码
# 单主节点脚本
vim etcd-bak.sh
#!/bin/bash
SNAPSHOT_DIR="/var/lib/etcd-bak"
SNAPSHOT_FILE="${SNAPSHOT_DIR}/etcd-snapshot-$(date +%F-%T).db"

mkdir -p "${SNAPSHOT_DIR}"
ETCDCTL_API=3 etcdctl snapshot save "${SNAPSHOT_FILE}" \
  --endpoints="https://localhost:2379" \
  --cacert="/etc/kubernetes/pki/etcd/ca.crt" \
  --cert="/etc/kubernetes/pki/etcd/server.crt" \
  --key="/etc/kubernetes/pki/etcd/server.key"
  
# 备份文件在/var/lib/etcd/member-bak

etcd 恢复

复制代码
# 所有服务配置文件存放位置 /etc/kubernetes/manifests
# 还原数据时需保证 apiServer 和 etcd 处于关闭状态,最简单的方式就是 mv manifests manifests_back
# 流程:
停止kube-apiserver --> 停止ETCD --> 恢复数据 --> 启动ETCD --> 启动kube-apiserve 

# 如果是按照文档部署的话 停止kubelet 即可
systemctl stop  kubelet

# 恢复数据
--data-dir指向的目录不能提前存在  需要提前删除 etcd目录
etcd-master 当前节点etcd名称
--initial-advertise-peer-urls 为当前节点地址 
--initial-cluster-token 集群认证token

## 需要删除或者移走这个目录
rm -rf /var/lib/etcd

## 恢复
ETCDCTL_API=3 etcdctl  --initial-cluster etcd-master=https://192.168.174.136:2380 --initial-advertise-peer-urls https://192.168.174.136:2380 --initial-cluster-token="k8s_etcd" snapshot restore /var/lib/etcd-bak/etcd-snapshot-2024-12-24-17:15:40.db --data-dir=/var/lib/etcd --name etcd-master

## /var/lib/etcd-bak/etcd-snapshot-2024-12-24-17:15:40.db 是刚刚备份的 etcd 名称
# 启动服务
systemctl start  docker
systemctl start  kubelet

# 查询服务
[root@k8s-master manifests]# docker ps -a | grep apiserver
2bc2506e093a   8a9000f98a52   "kube-apiserver --ad..."   2 minutes ago   Up 2 minutes                                                         
2a6f45f0d783   registry.aliyuncs.com/google_containers/pause:3.9   "/pause"     2 minutes ago   Up 2 minutes                                                       
[root@k8s-master manifests]# docker ps -a | grep etcd
829dbbfb08cf   a0eed15eed44   "etcd --advertise-cl..."   23 hours ago    Up 23 hours                                                         
6ce9f09a3996   registry.aliyuncs.com/google_containers/pause:3.9   "/pause"  23 hours ago    Up 23 hours