Kasten K10 实战系列 01 – 在公有云上部署 K10 概览

Kasten K10 实战系列 01 - 在腾讯云上部署 K10 概览

[toc]

1.前言 - Kasten K10 与 TKE 背景介绍

Kasten K10 是 Veeam 在 Kubernetes 平台的数据管理解决方案,通过部署 Kasten K10 企业可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷等存储资源。解决用户备份、灾难恢复、迁移过程中的数据管理问题,提高云原生环境数据管理的便捷性,帮助用户降低灾备成本,提高生产执行效率。

腾讯云容器服务(Tencent Kubernetes Engine ,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的云硬盘、负载均衡等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题。

本文写作目标 本文将以 TKE K8S 集群为实战目标,为读者展现在腾讯云 TKE 平台上部署 Kasten K10 的逐步说明,旨在为读者提供具有价值的实战参考。具体的解决方案还需要遵循 Kasten K10 文档 与 腾讯云文档中的最佳实践,目前文档编目如下:

  • 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 容灾与迁移
  • Kasten k10 实战系列 08 - Kasten K10 Kanister 应用感知框架的使用
  • Kasten k10 实战系列 09 - Multi-Cluster 多 K8S 环境管理
  • Kasten k10 实战系列 10 - Kasten 实战总结

2.Kasten 在云原生领域中的用例

通过部署 Kasten K10 企业可以安全地备份和还原,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷,可以在 TKE 集群或自建 Kubenetes 集群中部署 Kasten K10 涵盖但不仅限于使用在如下场景:

  • 备份恢复: 保护集群资源并在丢失的情况下进行还原
  • 应用迁移: 将集群资源迁移到其他集群。
  • DevOpS: 将生产集群资源复制到开发和 Staging、测试集群。

3.Kasten K10 如何工作?

Kasten K10 工作原理图如下图所示,当用户执行备份或还原命令时,调用自定义资源 API 创建查找备份对象。

20210627180420

Step1:发现应用组件 : 通过 Orchestrator API, K10 应用可以在几分钟内部署到在您的 Kubernetes 集群上,并与 IAM 身份和访问管理集成,K10 的自动应用程序发现功能。

Step2:发现应用配置 : K10 API Controller 控制器 watch 到生成的备份对象时,执行备份计划,此时 K10 与 将与存储基础架构 API 相集成发现应用的配置,如 Namespaces, deployments , configmaps , secrets , serivceaccounts , serivecs ,storageclass 等等

Step3:发现应用数据 : 通过自动扫描 Kubernetes 环境中需保护的应用和相关组件,发现数据的所在位置。通过使用自动化策略高效执行数据管理操作,如通过CSI接口实现的快照操作,可以保证数据的高速备份、还原、以及应用的可移动性。同理,针对有状态的应用,还可以通过开源应用程序框架 Kanister,提供可扩展的、无代理的、以数据应用程序为中心的蓝图部署与保护方式,实现数据备份和恢复的一致性。

4.Kasten K10 部署规划

4.1 技术资源准备与要求

Kasten K10 部署在 Tencent Cloud 需要以下先决条件 :

  • TKE Tencent Kubenetes Engine 1.18.4(Tencent Kubernetes Engine ,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。
  • TCR Tencent Container Registry 容器镜像服务, 为您提供安全独享、高性能的容器镜像托管分发服务。
  • CBS-CSI 组件 CBS-CSI 组件 支持 TKE 集群通过控制台快捷选择存储类型,并创建对应块存储云硬盘类型的 PV 和 PVC。本文提供 CBS-CSI 组件功能特性等说明并介绍几种常见示例用法。
  • COS 对象存储, 用于存放备份的数据集,用于存储部署Kasten K10的自动化检测脚本,和
  • 技术人员要求 部署人员除了对腾讯云有一定了解以外,还应该具备 K8S 或 TKE 运维的相关知识。

4.2 K8S 集群资源需求

对于Kasten K10 在 TKE 容器平台环境的部署,Kasten K10 将需要以下资源,鉴于 K10 所保护的应用数量不同,对应的数值也做相应的调整。

POD数量: 18 -21
CPU与内存资源: 见 Kasten K10 文档
PVC 存储资源要求:100GB 左右

Kasten K10 系统需求
https://docs.kasten.io/latest/operating/footprint.html

在腾讯云 TKE 的集群配置中,最小配置为一个节点,推荐两个节点

类型 机型 规格 CPU 内存 硬盘
基础配置 标准型SA2 SA2.MEDIUM4 2核 4GB 50GB 高性能云硬盘
推荐配置 标准型SA2 SA2.LARGE8 4核 8GB 100GB SSD云硬盘

5. Kasten K10 部署

5.1 K10 部署先决条件

本指南提供了确保在 TKE 集群中顺利和成功安装 K10 的步骤,同时利用CBS-CSI容器存储快照和克隆特性进行备份和恢复策略,K10 部署的先决条件如下。

  • 通过 Pre-flight checks
  • 安装了 Docker、kubectl、 Helm 的操作端
  • CBS-CSI 组件
  • CAM 角色

5.2 Kasten K10 部署

本文中,我们只将如下步骤进行概览,我们随后还将发布该文档的一个系统版本,来列举部署时的详情。

5.2.1.Step 1 CAM 规划

确保如下策略在角色载体为 CCS的 TCR_QCSRole中被关联

  • QcloudCBSFullAccess
  • CLBAutoPreAuthorization
  • QcloudAccessForTKERoleInOpsManagement
  • QcloudAccessForTKERole

20210627195218

5.2.2. 配置 TCR 存储库

确保 TCR 已经配置完善

20210627200943

5.2.3.启用 CBS-CSI 插件

确保 CBS CSI 已经启用

20210627195734

确保 StorageClass CBS-CSI 已经被定义,并配置为默认存储类型

20210627195935

5.2.4. Step 4 验证部署的前提条件是否满足

通过我们部署在COS上的脚本,我们可调用 k10_permer 应用来检查,当前部署环境的前提条件是否满足

[root@harbor01 ~]# curl https://kasten-1257130361.cos.ap-chengdu.myqcloud.com/k10_primer.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6025  100  6025    0     0  20130      0 --:--:-- --:--:-- --:--:-- 20083
Namespace option not provided, using default namespace
Checking for tools
 --> Found kubectl
 --> Found helm
Checking if the Kasten Helm repo is present
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
 --> The Kasten Helm repo was found
Checking for required Helm version (>= v3.0.0)
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
 --> No Tiller needed with Helm v3.5.4
K10Primer image
 --> Using Image (ccr.ccs.tencentyun.com/kasten-k10/k10tools:4.0.5) to run test
Checking access to the Kubernetes context cls-jrc2egbj-100006537440-context-default
 --> Able to access the default Kubernetes namespace

Running K10Primer Job in cluster with command- 
     ./k10tools primer 
serviceaccount/k10-primer created
clusterrolebinding.rbac.authorization.k8s.io/k10-primer created
job.batch/k10primer created
Waiting for pod k10primer-5z7gl to be ready - ContainerCreating
Pod Ready!

Kubernetes Version Check:
  Valid kubernetes version (v1.18.4-tke.11)  -  OK

RBAC Check:
  Kubernetes RBAC is enabled  -  OK

Aggregated Layer Check:
  The Kubernetes Aggregated Layer is enabled  -  OK

CSI Capabilities Check:
  Using CSI GroupVersion snapshot.storage.k8s.io/v1beta1  -  OK

Validating Provisioners: 
cloud.tencent.com/qcloud-cbs:
  Storage Classes:
    cbs
      Supported via K10 Generic Volume Backup. See https://docs.kasten.io/latest/install/generic.html.

com.tencent.cloud.csi.cbs:
  Is a CSI Provisioner  -  OK
  Missing/Failed to Fetch CSIDriver Object
  Storage Classes:
    cbs-csi
      Valid Storage Class  -  OK
  Volume Snapshot Classes:
    cbs-snapclass
      Has k10.kasten.io/is-snapshot-class annotation set to true  -  OK
      Has deletionPolicy 'Delete'  -  OK
    k10-clone-cbs-snapclass

Validate Generic Volume Snapshot:
  Pod Created successfully  -  OK
  GVS Backup command executed successfully  -  OK
  Pod deleted successfully  -  OK

serviceaccount "k10-primer" deleted
clusterrolebinding.rbac.authorization.k8s.io "k10-primer" deleted
job.batch "k10primer" deleted

5.2.5. Step 6 - 安装 K10

1. 获取 Helm Chart 供本地使用

helm repo update && helm fetch kasten/k10

2. 建立名空间

kubectl create namespace kasten-io

3. 安装 Kasten K10

在选腾讯云CBS-CSI的云硬盘时,有个最小为10GB的限制,对于 Kasten 来说,有些PVC的要求仅为1GB,所以我们将其更改为10G以上为腾讯云部署作适配, 同时配置的参数还有为扩展 gateway 的 LB 用于外网访问 Kasten 图形界面,与安全性相关的 Token 登录认证的设置。

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 global.persistence.storageClass=cbs-csi

查看 Kasten Helm 部署的参数
Complete List of K10 Helm Options
https://docs.kasten.io/latest/install/advanced.html

4. 确认 Kasten K10 Pod 的部署情况

[root@harbor01 ~]# kubectl get pods -n kasten-io -w 
NAME                                  READY   STATUS    RESTARTS   AGE
aggregatedapis-svc-68ffcc6b7f-4p5bd   1/1     Running   0          2d4h
auth-svc-6bdb748896-bsj9p             1/1     Running   0          2d4h
catalog-svc-5f97568f5c-cq4tg          2/2     Running   0          2d4h
config-svc-6f7b48686b-t4npl           1/1     Running   0          2d4h
crypto-svc-bd87f859b-89kzq            1/1     Running   0          2d4h
dashboardbff-svc-696dbdf4b-nhnzw      1/1     Running   0          2d4h
executor-svc-65d4888b8f-6l4ph         2/2     Running   0          2d4h
executor-svc-65d4888b8f-h54pw         2/2     Running   0          2d4h
executor-svc-65d4888b8f-kxgkp         2/2     Running   0          2d4h
frontend-svc-77588f478-5fll9          1/1     Running   0          2d4h
gateway-6c5d9ffc48-mxsgs              1/1     Running   0          2d4h
jobs-svc-59f9f594c-s2bvx              1/1     Running   0          2d4h
kanister-svc-744b459dc6-ppkx8         1/1     Running   0          2d4h
logging-svc-75bf5f7898-b65p5          1/1     Running   0          2d4h
metering-svc-58f99dc4bb-vxjxg         1/1     Running   0          2d4h
prometheus-server-7b99765ccb-jkx87    2/2     Running   0          2d4h
state-svc-57ff7b7846-hknrd            1/1     Running   0          2d4h

5. 访问 K10 控制台

通过 查看 K8S Service 中的Gateway-ext,查看 访问 K10的IP地址
20210627204738

浏览器访问如下地址

http://139.155.161.39/k10/#/

您将见到如下画面,这时需要我们输入 Token

20210627205847

在终端输入如下命令获取 Token

sa_secret=$(kubectl get serviceaccount k10-k10 -o jsonpath="{.secrets[0].name}" --namespace kasten-io)

kubectl get secret $sa_secret --namespace kasten-io -ojsonpath="{.data.token}{'\n'}" | base64 --decode

之后可以看到,Kasten K10 管理界面已经完美的出现在浏览器中。

20210627210142

6. 配置 腾讯云 COS 作为 Kasten 的存储库

我们可以能过设置 S3 Compatible 存储库的方式,将 腾讯云 COS 设置成为备份存储库,满足 3-2-1-1-0 的备份黄金法则。

20210627213313

7. 在TKE 集群管理器中查看 K10 部署情况

腾讯云 TKE 的管理界面非常友好,在这里我们可以非常方便的查看与K8S的应用,当然也包括 Kasten K10

Pod 运行的情况
20210627211440

存储使用情况
20210627211523

8. 总结

以上就是关于 Kasten 在腾讯云 TKE 上部署的有关记录,供大家在部署时参考。我认为Kasten 这个产品的有趣之处是,它与 Veeam 有很多异曲同工之妙,无疑云原生的灾备对于很多人来说是相当复杂的,但 Kasten 以其直观的方式将其图形化、简便化。关于这个过程的细节,我们还会在后续的文章中,逐步呈现给大家!

9. 参考链接

Kasten by Veeam 官网
https://docs.kasten.io/latest/
Complete List of K10 Helm Options
https://docs.kasten.io/latest/install/advanced.html
Kasten K10 系统需求
https://docs.kasten.io/latest/operating/footprint.html
腾讯云 TKE 文档与资源
https://cloud.tencent.com/product/tke/developer
腾讯云 TCR 文档与资源
https://cloud.tencent.com/document/product/1141
腾讯云 CBS-CSI 文档与资源
https://cloud.tencent.com/document/product/457/51099

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注