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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 对于k8s etcd备份恢复,可以按照以下步骤进行操作。首先,确保已经有了备份文件。可以使用以下命令检查备份文件是否存在:\[1\] 如果备份文件不存在,则需要重新执行备份命令并输入正确的备份文件时间。接下来,可以使用etcdctl命令进行备份恢复。根据备份文件的位置和名称,使用以下命令进行恢复:\[3\] ``` ETCDCTL_API=3 etcdctl snapshot restore /path/to/etcd-snapshot.db \ --data-dir /path/to/etcd-data-dir \ --initial-cluster <etcd-cluster-endpoints> \ --initial-cluster-token <cluster-token> \ --initial-advertise-peer-urls <peer-urls> ``` 其中,`/path/to/etcd-snapshot.db`是备份文件的路径和名称,`/path/to/etcd-data-dir`是etcd数据目录的路径,`<etcd-cluster-endpoints>`是etcd集群的节点地址,`<cluster-token>`是集群的令牌,`<peer-urls>`是etcd节点的URL。根据实际情况替换这些参数。执行命令后,etcd将使用备份文件恢复数据到指定的数据目录。 需要注意的是,恢复过程可能需要一些时间,具体时间取决于备份文件的大小和系统性能。恢复完成后,可以启动etcd集群并验证数据是否成功恢复。 请注意,备份恢复是一个敏感的操作,务必谨慎执行,并确保备份文件的完整性和可用性。在执行恢复操作之前,建议先进行测试和验证,以确保备份文件可用并且可以成功恢复数据。 希望以上信息对您有所帮助。如果还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* [k8s etcd 备份恢复](https://blog.csdn.net/liudongyang123/article/details/124145618)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [KubernetesETCD集群备份恢复](https://blog.csdn.net/heian_99/article/details/123398209)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值