k8s集群etcd备份与恢复


目前,仍有很多etcd以容器的方式运行。在多种安装方式中,大部分仍运行在容器中。比如,rancher安装,kubeadm,minikube(以pod的形式运行)。所以,我们可以在宿主机上使用etcdctl操作容器中的etcd。

环境准备

etcdctl安装

wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz
tar zxvf etcd-v3.4.13-linux-amd64.tar.gz
mv etcd-v3.4.13-linux-amd64/etcdctl /usr/bin

基础命令检查

endpoint health

ECTD_API=3 etcdctl  --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key --endpoints=https://10.0.0.69:2379 endpoint health

get
# 查看所有的key

ECTD_API=3 etcdctl  --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key --endpoints=https://10.0.0.69:2379 get / --prefix --keys-only

# 查看某一个key

ECTD_API=3 etcdctl  --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key --endpoints=https://10.0.0.69:2379 get /registry/namespaces/default

ETCD备份

#! /bin/bash
ETCD_PATH=/etc/kubernetes/pki
CACERT=$ETCD_PATH/etcd/ca.crt
CERT=$ETCD_PATH/etcd/server.crt
KEY=$ETCD_PATH/etcd/server.key
ENDPOINTS=https://10.0.0.69:2379

ETCDCTL_API=3 etcdctl \
--cacert="${CACERT}" --cert="${CERT}" --key="${KEY}" \
--endpoints=${ENDPOINTS} \
snapshot save /root/etcd-backup/etcd-snapshot-`date +%Y%m%d%H%M%S`.db

备份是执行./etcd_backup.sh

ETCD恢复

#!/bin/bash
if [ ! -n "$1" ];
then
   echo "请输入etcd备份文件的时间"
   exit
fi

BACKUP=/root/etcd-backup/etcd-snapshot-$1.db
echo $BACKUP
if [ ! -f "$BACKUP" ];
then 
   echo "etcd备份文件不存在,请重新执行并输入正确的备份文件时间"
   exit
fi

ETCD_PATH=/etc/kubernetes/pki
CACERT=$ETCD_PATH/etcd/ca.crt
CERT=$ETCD_PATH/etcd/server.crt
KEY=$ETCD_PATH/etcd/server.key
INITIAL_CLUSTER=https://192.168.5.45:2380
INITIAL_ADVERTISE_PEER_URLS=https://192.168.5.45:2380

rm -rf /var/lib/etcd/

ECTD_API=3 etcdctl  --cacert=$ETCD_PATH/etcd/ca.crt  --cert=$ETCD_PATH/etcd/server.crt --key=$ETCD_PATH/etcd/server.key  --endpoints=$ENDPOINTS snapshot restore \
 $BACKUP --name=master1  --initial-cluster=master1=$INITIAL_CLUSTER --initial-advertise-peer-urls=$INITIAL_ADVERTISE_PEER_URLS --data-dir=/var/lib/etcd

恢复时执行etcd_restore.sh 20220310140803   【20220310140803为备份时的日期时间】