本文详述了Veeam Kasten K10 DR备份恢复详细步骤,当Veeam Kasten K10由于各种原因发生故障,如何快速进行DR恢复, 即快速恢复Veeam Kasten K10平台、备份策略及备份存储库等配置。
本文使用的测试环境是Centos8.3,kubernetes版本是1.21.3, Veeam Kasten K10版本是4.5.12.
1. Veeam Kasten K10 DR 备份
在第一次Enable K10 DR时,需要手工设置用于加密的Passphrase(密码),这个一定要记住,以后做K10 DR restore时,需要用到。

编辑切换为居中
当前,本测试环境Veeam Kasten k10使用的Location profile名称为minio,记录下该profile的相关属性,Veeam Kasten K10 DR恢复时需要重建属性相同的Location profile。

编辑切换为居中

编辑
本测试环境Passphrase(密码)是:ibm1!IBM

编辑切换为居中
Cluster ID:
b7da31a6-9fb0-4dd7-b2a5-03dc31e12b1a

编辑切换为居中

编辑切换为居中
以上结果显示,Veeam Kasten K10 DR备份成功。
2. Veeam Kasten K10 DR恢复
本测试环境是在原kubernetes cluster上进行Veeam Kasten K10 DR恢复, 所以需要先卸载k10, 删除Veeam kasten k10的 namespace kasten-io。
卸载kasten k10:
[root@k8s-131 ~]# helm uninstall k10 -n kasten-io
release "k10" uninstalled
删除kasten-io的namespace:
[root@k8s-131 ~]# kubectl delete ns kasten-io
namespace "kasten-io" deleted
创建kasten-io的namespace
[root@k8s-131 ~]# kubectl create namespace kasten-io
namespace/kasten-io created
创建k10-dr-secret,使用第一次enable K10 DR时,手工设置用于加密的passphrase(密码)
[root@k8s-131 ~]# kubectl create secret generic k10-dr-secret --namespace kasten-io --from-literal=key='ibm1!IBM'
secret/k10-dr-secret created

编辑切换为居中
重新安装Kasten K10
[root@k8s-131 ~]# helm install k10 k10-4.5.12.tgz --namespace kasten-io --set global.airgapped.repository=ccr.ccs.tencentyun.com/kasten --set injectKanisterSidecar.enabled=true --set metering.mode=airgap --set secrets.dockerConfig=$(base64 -w 0 </root/config.json) --set prometheus.imagePullSecrets[0].name="k10-ecr" --set prometheus.server.persistentVolume.enabled=false

编辑切换为居中
手工启动minio
[root@k8s-131 ~]# ./minio server /data

编辑切换为居中
使用NodePort方式暴露kasten K10的web管理页面,可以在其它的能访问该node IP的浏览器访问Kasten k10 Dashboard:
[root@k8s-131 ~]# kubectl expose -n kasten-io deployment gateway --type=NodePort --name=gateway-nodeport-svc --port=8000
service/gateway-nodeport-svc exposed
通过以下命令查看通过NodePort方式访问时的Port, 记下8000: 后面跟的端口号:
[root@k8s-131 ~]# kubectl get svc -n kasten-io gateway-nodeport-svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gateway-nodeport-svc NodePort 10.10.131.34 <none> 8000:30368/TCP 15s
暴露kasten k10 Dashboard
[root@k8s-131 ~]# kubectl --namespace kasten-io port-forward service/gateway 8080:8000
浏览器访问Kasten k10 Dashboard
http://192.168.17.131:30368/k10/#/dashboard

编辑切换为居中
创建和DR之前完全一样的location profile

编辑切换为居中

编辑

编辑切换为居中
查看DR恢复之前的pod状态
[root@k8s-131 ~]# kubectl get pod -n kasten-io

编辑切换为居中
如果是第一次运行DR restore, 请跳过以下2条删除命令;如果之前DR restore失败,则需要手工删除以下clusterrole和clusterrolebinding,
[root@k8s-131 ~]# kubectl delete clusterrole k10-restore-cluster-role
[root@k8s-131 ~]# kubectl delete clusterrolebinding kasten-io-k10-restore-k10restore-cluster-role-binding

编辑切换为居中
执行K10 DR restore
以下命令中:
--set sourceClusterID=b7da31a6-9fb0-4dd7-b2a5-03dc31e12b1a 表示使用DR之前的Cluster ID.
--set profile.name=minio 表示使用DR之前的Veeam Kasten K10的Location profile
--set airgapped.repository=ccr.ccs.tencentyun.com/kasten 表示使用的air-gapped镜像库是 ccr.ccs.tencentyun.com/kasten
[root@k8s-131 ~]# helm install k10-restore kasten/k10restore --namespace=kasten-io --set sourceClusterID=b7da31a6-9fb0-4dd7-b2a5-03dc31e12b1a --set profile.name=minio --set airgapped.repository=ccr.ccs.tencentyun.com/kasten

编辑切换为居中
[root@k8s-131 ~]# kubectl get pod -n kasten-io

编辑切换为居中
以上结果显示,k10-restore-k10restore-xxxxx 的pod最终处于 Completed状态。
回到浏览器Kasten k10 Dashboard页面

编辑切换为居中
发现Dashboard页面已经显示Veeam Kasten K10 DR恢复成功。
针对kasten-io重新应用blueprint
本测试环境mysql-blueprintV2.yaml已经保存在本地路径。
[root@k8s-131 ~]# kubectl --namespace kasten-io apply -f mysql-blueprintV2.yaml
blueprint.cr.kanister.io/mysql-blueprint created
回到Dashboard页面,发现application、policy及Usage&Reports里都恢复到DR之前的设置

编辑切换为居中

编辑切换为居中
针对DR之前创建的policy执行备份

编辑切换为居中

编辑切换为居中
以上结果显示针对应用的备份成功。
针对DR之前创建的policy备份进行恢复验证

编辑切换为居中

编辑切换为居中

编辑切换为居中

编辑切换为居中

编辑切换为居中
以上结果显示恢复验证成功。
到此为止,Veeam Kasten K10 DR恢复已经成功完成。
3. 找回第一次Enable DR时设定的passphrase
参考链接:https://kubernetes.io/zh/docs/reference/kubectl/jsonpath/
[root@k8s-131 ~]# kubectl get secret k10-dr-secret -n kasten-io -o jsonpath='{.data}{"\n"}'
显示结果:
{"key":"aWJtMSFJQk0="}

编辑切换为居中
以上密码是经过加密的,解密该密码,运行下列命令
[root@k8s-131 ~]# echo 'aWJtMSFJQk0=' |base64 --decode
显示结果:
ibm1!IBM

编辑切换为居中