1. 前言
任何备份软件必须考虑的是如何进行自我保护,Kasten 也不例外, K10 是以一个应用的状态存在于 K8S 集群中的。虽然 K8S 集群本身具有平台的冗余性,但必须要警惕的是,灾难总是在不经意之间发生。例如 K10 被意外删除,或是 K10 使用的底层存储发生故障,甚至K10 所在的集群被意外破坏等等。Kasten K10 的灾难恢复,旨在保护 K10 免受底层基础架构故障的影响,以达成在各种灾难情况下恢复 K10 灾备平台的能力。
文章目录
- 前言
-
K10 DR 的先决条件
- 外部存储配置
- 启用 K10 灾难恢复
- Cluster ID 与密码
- K10 DR 策略
-
灾后恢复 Kasten K10
- 建立 dr-secret
- 重新安装 K10
- 提供对应的外部存储配置
- 灾后恢复客户应用
- 总结
Kasten 实战系列回顾
- Kasten K10 实战系列 01 - 在腾讯云上部署 K10 概览
- Kasten K10 实战系列 02 - 利用腾讯 TCR 搭建镜像库
- Kasten k10 实战系列 03 - CSI 存储快照适配
- Kasten k10 实战系列 04 - 利用 Kubestr 进行云原生存储能力评测
- Kasten k10 实战系列 05 - Kasten K10 安装及最佳实践
- Kasten k10 实战系列 06 - Kasten K10 备份与恢复
- Kasten k10 实战系列 07 - Kasten K10 Kanister 应用感知框架的使用
- Kasten k10 实战系列 08 - Kasten K10 容灾与迁移
- Kasten k10 实战系列 09 - Kasten K10 整体环境灾备
- Kasten k10 实战系列 10 - Kasten K10 日常运维总结
2. K10 DR 的先决条件
2.1 外部存储配置
为了让 K10 可以实现灾备,我们需要为它设置对象存储桶或 NFS 文件共享服务,Kasten 自身启用 DR后会将数据写入到这个存储库,以实现灾备数据的外部存放。当然,数据存放的原则应遵循 3-2-1-1-0 的方式。
2.2. 启用 K10 灾难恢复
通过 Settings 仪表板右上角的图标访问 K10 DR 设置,如果是新安装的情况,K10 DR 设置将在仪表板底部的提示。利用对象存储设置有效的 Cloud Loction Profile。
2.3. Cluster ID 与密码
配置 K10 DR 时,管理员需要将 K10 DR 的 Cluster ID 记录下来,妥善保存好,用于后续的K10 catalog的恢复。另外,在启用K10 DR时,系统会提示输入一个“通行码(passphrase)”,用于在恢复时,创建 dr-secret,因此这个通行码也需要和 Cluster ID一样,被妥善保管。
Cluster ID 也可以通过命令行来获得
$ kubectl get namespace default -ojsonpath="{.metadata.uid}{'\n'}
0025d690-b580-4791-941c-6b1d56bb0459
2.4. K10 DR 策略
创建的 K10 DR 策略,可从 Policies 页面中查看。
3. 灾后恢复 Kasten K10
从备份中恢复 K10 涉及以下操作序列:
- k10-dr-secret 使用启用 DR 时提供的密码,创建 Kubernetes Secret
- 创建与上述 Secret 相同的命名空间 如 kasten-io ,并安装新的 K10 实例
- 提供预先配置的对象存储,用于数据还原
3.1. 建立 dr-secret
K10 DR 通过使用 AES-256-GCM 算法加密所有 artifacts。启用 DR 时输入的密码。
如果密码忘记了,可以通过如下命令,恢复密码
$ kubectl get secret k10-dr-secret -n kasten-io -o jsonpath='{.data}'
{"key":"U3RhcnQxMjM="}
$ echo 'U3RhcnQxMjM=' |base64 --decode
Start123%
注意:如果您要在同一集群上重新安装 K10,则在创建上述 secret 之前先清除从前安装 的 K10 命名空间。
$ kubectl delete namespace kasten-io
namespace "kasten-io" deleted
#建立名空间
kubectl create namespace kasten-io
#建立 dr-secret
$ kubectl create secret generic k10-dr-secret \
--namespace kasten-io \
--from-literal key=Start123
3.2 重新安装 K10
参考 我们之前的文档
$ helm install k10 k10-4.0.5.tgz --namespace kasten-io --set global.airgapped.repository=ccr.ccs.tencentyun.com/kasten-k10 \
--set global.persistence.metering.size=20Gi \
--set prometheus.server.persistentVolume.size=20Gi \
--set global.persistence.catalog.size=20Gi \
--set externalGateway.create=true \
--set auth.tokenAuth.enabled=true \
--set metering.mode=airgap \
--set injectKanisterSidecar.enabled=true \
--set global.persistence.storageClass=cbs-csi
3.3 提供对应的外部存储配置
配置与源有对象存储相同的存储库
记录 profile 名,或用下命令查看
kubectl get profiles.config.kio.kasten.io --namespace kasten-io -o yaml
name: cos
[root@VM-0-15-centos ~]# helm install k10-restore kasten/k10restore --namespace=kasten-io \
> --set sourceClusterID=0025d690-b580-4791-941c-6b1d56bb0459 \
> --set profile.name=cos \
> --set image.repository=ccr.ccs.tencentyun.com/kasten-k10/restorectl
NAME: k10-restore
LAST DEPLOYED: Tue Jul 6 17:14:47 2021
NAMESPACE: kasten-io
STATUS: deployed
REVISION: 1
TEST SUITE: None
helm install k10-restore1 kasten/k10restore --namespace=kasten-io --set global.airgapped.repository=ccr.ccs.tencentyun.com/kasten-k10 \
--set sourceClusterID=0025d690-b580-4791-941c-6b1d56bb0459 \
--set profile.name=cos
helm install k10-restore kasten/k10restore --namespace=kasten-io --version 4.0.5 \
--set sourceClusterID=0025d690-b580-4791-941c-6b1d56bb0459 \
--set profile.name=cos \
--set image.repository=ccr.ccs.tencentyun.com/kasten-k10/restorectl
NAME: k10-restore
LAST DEPLOYED: Tue Jul 6 16:30:58 2021
NAMESPACE: kasten-io
STATUS: deployed
REVISION: 1
TEST SUITE: None
删除
$ helm delete k10-restore kasten/k10restore --namespace=kasten-io
打开 命令看状态, 直到看到
<mark>k10-restore-k10restore-cx5fn 0/1 Completed </mark>
$ kubectl get po -n kasten-io -w
NAME READY STATUS RESTARTS AGE
aggregatedapis-svc-5d585974d9-gt79q 1/1 Running 0 80m
auth-svc-865fc676d6-h6492 1/1 Running 0 80m
config-svc-6c9f5dc695-zfqmg 1/1 Running 0 80m
crypto-svc-796c7f6c68-rr7s8 1/1 Running 0 80m
dashboardbff-svc-97b8f8ccb-mtq4l 1/1 Running 0 80m
executor-svc-6cd8547867-bdxn9 2/2 Running 0 80m
executor-svc-6cd8547867-bsmnm 2/2 Running 0 80m
executor-svc-6cd8547867-mr2p9 2/2 Running 0 80m
frontend-svc-6d5bc5b4f6-jdb49 1/1 Running 0 80m
gateway-779686f446-8x2rg 1/1 Running 0 80m
jobs-svc-85bc8446bf-9p6f2 1/1 Running 0 80m
k10-restore-k10restore-cx5fn 1/1 Running 0 56s
kanister-svc-7668fd974b-lcjb5 1/1 Running 0 80m
logging-svc-69cd88456-nqw7v 1/1 Running 0 80m
metering-svc-5f958567b4-ckt4q 1/1 Running 0 80m
prometheus-server-5f55997d87-5q9g7 2/2 Running 0 80m
restore-data-fgrlb 0/1 ContainerCreating 0 14s
[truncated...]
k10-restore-k10restore-cx5fn 0/1 Completed 0 2m41s
backup-data-stats-tfhns 0/1 Terminating 0 36s
backup-data-stats-fq47z 0/1 Terminating 0 36s
backup-data-stats-fq47z 0/1 Terminating 0 37s
在界面中,我们看可以看到 Restore succeeded
Activity 里面的内容已经完全恢复回来了
4. 灾后恢复客户应用
完成 DR 还原作业后,转到应用程序卡,Removed 在下拉菜单下选择。Filter by status 单击restore应用程序下方并选择要从中恢复的还原点。
通过向导建立一个还原作业,点击 Retore
观察 Actions 中的 Restore 作业进程
到 TKE 中观察 mariadb 应用已经启动
5. 总结
在历史上IT系统应用的灾难发生的故事屡见不鲜,而备份系统或是灾备系统先挂掉的案例也不会少。只有一个灾备系统,但无法将灾备系统内的数据导入,将成为灾备工程建设者的最大隐忧。在今天的文章中,我们介绍了如何利用 Kasten K10 DR的方式,将整体环境进行灾备。先恢复 K10,再恢复应用,这样就可以让企业在灾难发生时,更加有信心的去面临挑战,做到未雨绸缪,心中不慌。希望今天的文章对您有所起发,我们下期再见。
6.参考文献
Kasten K10 DR
https://docs.kasten.io/latest/operating/dr.html