Kasten k10 实战系列 09 - K10 整体环境灾备

1. 前言

任何备份软件必须考虑的是如何进行自我保护,Kasten 也不例外, K10 是以一个应用的状态存在于 K8S 集群中的。虽然 K8S 集群本身具有平台的冗余性,但必须要警惕的是,灾难总是在不经意之间发生。例如 K10 被意外删除,或是 K10 使用的底层存储发生故障,甚至K10 所在的集群被意外破坏等等。Kasten K10 的灾难恢复,旨在保护 K10 免受底层基础架构故障的影响,以达成在各种灾难情况下恢复 K10 灾备平台的能力。

文章目录

  1. 前言
  2. K10 DR 的先决条件

    • 外部存储配置
    • 启用 K10 灾难恢复
    • Cluster ID 与密码
    • K10 DR 策略
  3. 灾后恢复 Kasten K10

    • 建立 dr-secret
    • 重新安装 K10
    • 提供对应的外部存储配置
  4. 灾后恢复客户应用
  5. 总结

Kasten 实战系列回顾

2. K10 DR 的先决条件

2.1 外部存储配置

为了让 K10 可以实现灾备,我们需要为它设置对象存储桶或 NFS 文件共享服务,Kasten 自身启用 DR后会将数据写入到这个存储库,以实现灾备数据的外部存放。当然,数据存放的原则应遵循 3-2-1-1-0 的方式。

20210703041124

2.2. 启用 K10 灾难恢复

通过 Settings 仪表板右上角的图标访问 K10 DR 设置,如果是新安装的情况,K10 DR 设置将在仪表板底部的提示。利用对象存储设置有效的 Cloud Loction Profile。

20210704154355

2.3. Cluster ID 与密码

配置 K10 DR 时,管理员需要将 K10 DR 的 Cluster ID 记录下来,妥善保存好,用于后续的K10 catalog的恢复。另外,在启用K10 DR时,系统会提示输入一个“通行码(passphrase)”,用于在恢复时,创建 dr-secret,因此这个通行码也需要和 Cluster ID一样,被妥善保管。

20210704154412

Cluster ID 也可以通过命令行来获得

$ kubectl get namespace default -ojsonpath="{.metadata.uid}{'\n'}
0025d690-b580-4791-941c-6b1d56bb0459

2.4. K10 DR 策略

创建的 K10 DR 策略,可从 Policies 页面中查看。

20210706151318

3. 灾后恢复 Kasten K10

从备份中恢复 K10 涉及以下操作序列:

  1. k10-dr-secret 使用启用 DR 时提供的密码,创建 Kubernetes Secret
  2. 创建与上述 Secret 相同的命名空间 如 kasten-io ,并安装新的 K10 实例
  3. 提供预先配置的对象存储,用于数据还原

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 提供对应的外部存储配置

配置与源有对象存储相同的存储库

20210706161330

记录 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

20210706173320

Activity 里面的内容已经完全恢复回来了

20210706180103

4. 灾后恢复客户应用

完成 DR 还原作业后,转到应用程序卡,Removed 在下拉菜单下选择。Filter by status 单击restore应用程序下方并选择要从中恢复的还原点。

20210706174910

通过向导建立一个还原作业,点击 Retore

20210706180621

观察 Actions 中的 Restore 作业进程

20210706180825

到 TKE 中观察 mariadb 应用已经启动

20210706180907

5. 总结

在历史上IT系统应用的灾难发生的故事屡见不鲜,而备份系统或是灾备系统先挂掉的案例也不会少。只有一个灾备系统,但无法将灾备系统内的数据导入,将成为灾备工程建设者的最大隐忧。在今天的文章中,我们介绍了如何利用 Kasten K10 DR的方式,将整体环境进行灾备。先恢复 K10,再恢复应用,这样就可以让企业在灾难发生时,更加有信心的去面临挑战,做到未雨绸缪,心中不慌。希望今天的文章对您有所起发,我们下期再见。

6.参考文献

Kasten K10 DR
https://docs.kasten.io/latest/operating/dr.html

标签: none

添加新评论