k8s集群的备份和恢复

背景说明

整个 Kubernetes 集群可分为Master 节点和 Node 节点。

在 Master 节点上,我们运行着 Etcd 集群以及 Kubernetes 控制面的几大组件,比如 kube-apiserver、kube-controller-manager、kube-scheduler 和 cloud-controller-manager(可选)等。

在这些组件中,除了 Etcd,其他都是无状态的服务。只要保证 Etcd 的数据正常,其他几个组件不管出现什么问题,我们都可以通过重启或者新建实例来解决,并不会受到任何影响。因此我们只需要备份 Etcd 中的数据。

看完了 Master 节点,我们再来看看 Node 节点。

Node 节点上运行着 kubelet、kube-proxy 等服务。Kubelet 负责维护各个容器实例,以及容器使用到的存储。为了保证数据的持久化存储,对于关键业务的关键数据,一般都是映射主机目录或使用 PV(Persistent Volume)来保存。鉴于这一点,我们还需要对 PV或主机映射目录 进行备份。

如果是节点出现了问题,我们可以向集群中增加新的节点,替换掉有问题的节点。

备份

前提条件:安装etcdctl工具。

1、下载离线包:etcd-v3.4.14-linux-amd64.tar.gz

wget https://github.com/etcd-io/etcd/releases/download/v3.4.14/etcd-v3.4.14-linux-amd64.tar.gz

2、解压,并加入环境变量

tar -zxf etcd-v3.4.14-linux-amd64.tar.gz
mv etcd-v3.4.14-linux-amd64/etcdctl /usr/local/bin
chmod +x /usr/local/bin/

3、验证etcdctl是否能用

etcdctl version

etcd备份

1、停止所有节点上的etcd

docker ps | grep k8s_etcd
docker stop <CONTAINER_ID>

2、数据备份

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--key=/etc/kubernetes/pki/etcd/peer.key \
--cert=/etc/kubernetes/pki/etcd/peer.crt \
snapshot save ./new.snapshot.db

在这里插入图片描述

3、查看etcd集群的节点

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/peer.crt \
--key=/etc/kubernetes/pki/etcd/peer.key \
member list

在这里插入图片描述

恢复

1、停止etcdkube-apiserver服务

2、启动/var/lib/etcd目录,恢复备份文件

TCDCTL_API=3 etcdctl snapshot restore ./new.snapshot.db --data-dir=/var/lib/etcd --name=controlplane --initial-advertise-peer-urls=https://10.10.10.112:2380 --initial-cluster=controlplane=https://10.10.10.112:2380

cat /etc/kubernetes/manifests/etcd.yaml 能够查看initial-advertise-peer-urlsinitial-cluster=controlplane相关参数的取值。
清空/var/lib/etcd目录前清注意是否有备份,没有的话需要先备份该目录,防止还原失败。若不清除该目录,则还原操作会失败。
在这里插入图片描述

还原过程如果出现报错:

在这里插入图片描述

解决:删除/var/lib/etcd/目录

上述操作需要手动完成,我们也可以利用k8s的CronJob来周期性备份:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: backup
  namespace: kube-system
spec:
  # activeDeadlineSeconds: 100
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            # Same image as in /etc/kubernetes/manifests/etcd.yaml
            image: k8s.gcr.io/etcd:3.2.24
            env:
            - name: ETCDCTL_API
              value: "3"
            command: ["/bin/sh"]
            args: ["-c", "etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save /backup/etcd-snapshot-$(date +%Y-%m-%d_%H:%M:%S_%Z).db"]
            volumeMounts:
            - mountPath: /etc/kubernetes/pki/etcd
              name: etcd-certs
              readOnly: true
            - mountPath: /backup
              name: backup
          restartPolicy: OnFailure
          hostNetwork: true
          volumes:
          - name: etcd-certs
            hostPath:
              path: /etc/kubernetes/pki/etcd
              type: DirectoryOrCreate
          - name: backup
            hostPath:
              path: /data/backup
              type: DirectoryOrCreate

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值