k8s etcd 备份和恢复

一.环境准备

1.k8s 集群 (我自己的是单master节点的,多master的只需要将备份好的数据在多个master都执行一遍就行了,备份只需要在一个master上备份。)

二.安装etcdctl命令

1.查看etcd的版本,我用的是阿里的etcd

docker images

2.下载地址

https://github.com/etcd-io/etcd/releaseshttps://github.com/etcd-io/etcd/releases3.安装etcdctl

tar -xf etcd-v3.4.13-linux-amd64.tar.gz

cd etcd-v3.4.13-linux-amd64

cp etcdctl /usr/bin

三.etcdctl备份

粘贴下面的命令,并创建脚本文件

#! /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

# 本机的etcd地址
ENDPOINTS=https://172.16.1.214:2379

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

四.etcdctl恢复

1.移除且备份 /etc/kubernetes/manifests/

mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak

查看 kube-apiserver、etcd镜像是否停止或者直接用kubectl命令 查看是否还能使用,不能使用说明操作成功。

 2.备份现有的etcd数据

mv /var/lib/etcd /var/lib/etcd.bak

3.粘贴下面的命令,并创建脚本文件

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

BACKUP=/root/operation/etc_back/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://172.16.1.214:2380
INITIAL_ADVERTISE_PEER_URLS=https://172.16.1.214: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

 4.恢复kube-apiserver与etcd

mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests

五 错误总结 

1.如果恢复之后pod不能正常启动,可以尝试将pod删除掉,在根据yaml重新创建pod。

2.如果是mysql这类的带有pvc的pod,需要注意了,因为在删除命名空间之后,对应的nfs目录也会被标记为不可用。

因此在重启pod的时候会出现一下错误,在nfs上找不到对应的目录。

 

因此需要在恢复之后,将这个“archived-” 删除掉,说白了就是回复到正常的情况,然后在删除pod就可以启动了

如果svc不能用就根据yaml直接在创建一次就行。  

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值