etcd 备份还原

etcd 备份还原

1. 查看 etcdctl 是否已经安装

shell 复制代码
# quick check if etcdctl is available or not
ETCDCTL_API=3 etcdctl --help | head

2. 安装 etcdctl

shell 复制代码
# 获取 etcd 版本信息
kubectl exec -it etcd-master -n kube-system -- /bin/sh -c 'ETCDCTL_API=3 /usr/local/bin/etcd --version' | head

# 下载
export RELEASE="3.4.3"
https://github.com/etcd-io/etcd/releases/download/v${RELEASE}/etcd-v${RELEASE}-linux-amd64.tar.gz

# 解压
tar -zxvf etcd-v${RELEASE}-linux-amd64.tar.gz

# 将 etcdctl 拷贝到 、usr/local/bin 目录
cd etcd-v${RELEASE}-linux-amd64
cp etcdctl /usr/local/bin

3. 备份

shell 复制代码
# create a secret
kubectl create secret generic test-secret \
 --from-literal=username='svcaccount' \
 --from-literal=password='password' 
 
 # Verify we are connecting to the right cluster ... define your endpoints and keys 
 ENDPOINT=https://127.0.0.1:2379
 ETCDCTL_API=3 etcdctl --endpoints=$ENDPOINT \
     --cacert=/etc/kubernetes/pki/etcd/ca.crt \
     --cert=/etc/kubernetes/pki/etcd/server.crt \
     --key=/etc/kubernetes/pki/etcd/server.key \
     member list

# Take the backup 
ETCDCTL_API=3 etcdctl --endpoints=$ENDPOINT \
     --cacert=/etc/kubernetes/pki/etcd/ca.crt \
     --cert=/etc/kubernetes/pki/etcd/server.crt \
     --key=/etc/kubernetes/pki/etcd/server.key \
    snapshot save /var/lib/dat-backup.db
 
 # Read the metadata from the backup/snapshot to print out the snapshot status 
 ETCDCTL_API=3 etcdctl --write-out=table snapshot status /var/lib/dat-backup.db

4. 还原

shell 复制代码
# Delete the secrets
 kubectl delete secret test-secret
 
 # Restore the backup 
  ETCDCTL_API=3 etcdctl snapshot restore /var/lib/dat-backup.db
  
  # Confirm our data is in the restore directory, you should see default.etcd 
  ls -l
  
  # Move the old etcd data to a safe location 
  mv /var/lib/etcd /var/lib/etcd.OLD
  
  # Restart the static pod for etcd 
  # if you use kubectl delete it will NOT restart the static pod as it is managed by the kubelet not a controller 
  docker ps | grep k8s_etcd
  CONTAINER_ID=$(docker ps | grep k8s_etcd | awk '{ print $1 }')
  echo $CONTAINER_ID
  
  # Stop the container from our etcd pod and move restored data into place
  docker stop $CONTAINER_ID
  rm -rf /var/lib/etcd/member
  mv ./default.etcd/member /var/lib/etcd
相关推荐
fengkai454520 小时前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa
东风微鸣2 天前
把 DeepSeek Harness 装进 K8s
kubernetes·deepseek·harness
mengge.cloud3 天前
prometheus+k8s+弹性伸缩,综合项目
云原生·容器·kubernetes·prometheus
腾飞开源3 天前
03_Kubernetes 核心概念拆解:从 Spec/Status 收敛到工作负载控制器的设计逻辑
云原生·容器·kubernetes
kuroomi4 天前
Git入门
git·kubernetes
我是koten4 天前
【运维杂谈】K8s遇到Terminating的名称空间删除不了怎么办?(解决方案亲测有效)
linux·运维·服务器·云原生·kubernetes·k8s·名称空间
RuoyiOffice4 天前
KubeSphere 容器云实践:从管理 K8s 到建设企业 PaaS,还需要哪些能力
spring boot·kubernetes·kubesphere·jenkins·paas·微服务部署·ruoyi office
风吹稻子5 天前
etcd备份与恢复:删了 etcd.yaml,容器为什么还在跑?——一次 K8s 控制面死锁排查实录
kubernetes
weirong5 天前
Operator 的测试该写到哪一层?139 个用例之后我划的三条线
kubernetes
逐流人5 天前
手工建集群到全自动发布:k8s集群部署与DevOps流水线整合实战
ci/cd·云原生·kubernetes·云计算·devops