OpenShift 4 - 备份和恢复 Etcd 数据库(附视频)

本文详细指导了在OpenShift 4.10环境中,如何重新获取kubeconfig、备份和恢复Etcd数据库,以及进行DevSecOps操作,包括创建项目、配置变更和安全恢复流程。通过实例演示,确保Etcd数据恢复并验证应用配置的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenShift / RHEL / DevSecOps 汇总目录
文本已在OpenShift 4.10环境中进行验证。

重新获得集群 kubeconfig

备份恢复 OpenShift 集群 Master 节点的 Etcd 数据库,需要用 kubeconfig 文件免密 SSH 登录 OpenShift 集群节点。如果该文件以找不到了,可以通过以下方式重新获得 kubeconfig 文件。

  1. 创建 recover_kubeconfig.sh 文件,内为如下内容:
#!/bin/bash
 
set -eou pipefail
 
# context
intapi=$(oc get infrastructures.config.openshift.io cluster -o "jsonpath={.status.apiServerInternalURI}")
context="$(oc config current-context)"
# cluster
cluster="$(oc config view -o "jsonpath={.contexts[?(@.name==\"$context\")].context.cluster}")"
server="$(oc config view -o "jsonpath={.clusters[?(@.name==\"$cluster\")].cluster.server}")"
# token
ca_crt_data="$(oc get secret -n openshift-machine-config-operator node-bootstrapper-token -o "jsonpath={.data.ca\.crt}" | base64 --decode)"
namespace="$(oc get secret -n openshift-machine-config-operator node-bootstrapper-token  -o "jsonpath={.data.namespace}" | base64 --decode)"
token="$(oc get secret -n openshift-machine-config-operator node-bootstrapper-token -o "jsonpath={.data.token}" | base64 --decode)"
 
export KUBECONFIG="$(mktemp)"
oc config set-credentials "kubelet" --token="$token" >/dev/null
ca_crt="$(mktemp)"; echo "$ca_crt_data" > $ca_crt
oc config set-cluster $cluster --server="$intapi" --certificate-authority="$ca_crt" --embed-certs >/dev/null
oc config set-context kubelet --cluster="$cluster" --user="kubelet" >/dev/null
oc config use-context kubelet >/dev/null
cat "$KUBECONFIG"
  1. 执行脚本文件,获得 kubeconfig 文件。
$ chmod 755 recover_kubeconfig.sh
$ ./recover_kubeconfig.sh > kubeconfig
  1. 使用 kubeconfig 登录 master 节点。
ssh -i kubeconfig <MASTER-NODE>

准备 OpenShift 应用配置

创建 test1 项目,并在 “开发者” 视图中部署 “openshift/hello-openshift” 镜像。

备份 Etcd 数据库

  1. 登录 Master-0 节点,执行 etcd 数据库备份操作,将 etcd 数据库备份到目标目录中。
$ /usr/local/bin/cluster-backup.sh /home/core/assets/backup
  1. 完成后可在目标目录中查看备份出来的数据文件。
$ ls /home/core/assets/backup
snapshot_<datetimestamp>.db   static_kuberesources_<datetimestamp>.tar.gz

修改 OpenShift 应用配置

为了验证恢复,可以创建 test2 项目,并在 “开发者” 视图中部署 “openshift/hello-openshift” 镜像。然后删除 cluster1 项目。

恢复 Etce 数据库

  1. 在 Master-1 和 Master-2 节点上分别执行以下命令,先将现有 Kubernetes API 服务器 pod 文件和 etcd pod 文件从 kubelet 清单目录中移出。然后确认直到已经没有 etcd 和 kube-apiserver 的 pod 运行。
$ sudo mv /etc/kubernetes/manifests/etcd-pod.yaml /tmp
$ sudo mv /etc/kubernetes/manifests/kube-apiserver-pod.yaml /tmp
$ sudo crictl ps | grep etcd | grep -v operator
$ sudo crictl ps | grep kube-apiserver | grep -v operator
  1. 在 Master-1 和 Master-2 节点上分别执行以下命令,将 etcd 数据目录移走。
$ sudo mv /var/lib/etcd/ /tmp
  1. 在 MASTER-0 节点上执行命令恢复 Etcd 数据库。
$ sudo -E /usr/local/bin/cluster-restore.sh /home/core/backup
  1. 在所有 Master 节点执行命令,重启 kubelet 服务。在确认服务重新运行后 Etcd 数据库即恢复完。
$ sudo systemctl restart kubelet.service
$ sudo systemctl status kubelet.service
  1. 在所有 Master 节点执行命令,确认 etcd pod 正常运行。
$ sudo crictl ps | grep etcd | grep -v operator
$ oc get pods -n openshift-etcd | grep -v etcd-quorum-guard | grep etcd

确认 Etcd 数据库已经恢复

在 OpenShift 中确认 Etcd 数据库被恢复,即 test2 项目已经不见了,而 test1 项目被恢复出现了。

演示视频

视频

参考

https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.10/html/post-installation_configuration/backing-up-etcd-data_post-install-cluster-tasks
https://access.redhat.com/solutions/4923031
https://developer.ibm.com/tutorials/backup-etcd-data-on-ocp-to-cos/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值