Kasten K10 实战系列之腾讯TKE部署 01 - 前篇


Userlevel 1
Badge

# Kasten K10 实战系列之腾讯TKE部署 01 - 前篇

 

[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 的逐步说明,旨在为读者提供具有价值的实战参考。 本文是由 Mars Zhang与 腾讯云大咖合作创建的,具体的解决方案还需要遵循 Kasten K10 文档 与 腾讯云文档中的最佳实践,目前文档编目如下:

 

- Kasten K10 实战系列之腾讯TKE 01 - 前篇-销售售前概览版本

- Kasten K10 实战系列之腾讯TKE 02 - 利用腾讯 TCR 搭建镜像库

- Kasten k10 实战系列之腾讯TKE 03 番外篇 - Kasten Kubestr 云原生存储能力评测

- Kasten k10 实战系列之腾讯TKE 04 - Kasten K10 安装及最佳实践

- Kasten k10 实战系列之腾讯TKE 05 - Kasten K10 备份与恢复

- Kasten k10 实战系列之腾讯TKE 06 - Kasten K10 容灾与迁移

- Kasten k10 实战系列之腾讯TKE 07 番外篇 - Kasten K10 Kanister 的使用

- Kasten k10 实战系列之腾讯TKE 08 - Multi-Cluster 多 K8S 环境管理

- Kasten k10 实战系列之腾讯TKE 09 - Kasten 实战总结

 

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

 

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

 

- **备份恢复:** 保护集群资源并在丢失的情况下进行还原

- **应用迁移:** 将集群资源迁移到其他集群。

- **DevOpS:** 将生产集群资源复制到开发和 Staging、测试集群。

 

## 3.Kasten K10 如何工作?

 

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

 

![20210627180420](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627180420.png)

 

**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)

> 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](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627195218.png)

 

#### 5.2.2. 配置 TCR 存储库

 

确保 TCR 已经配置完善

 

![20210627200943](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627200943.png)

 

#### 5.2.3.启用 CBS-CSI 插件

 

确保 CBS CSI 已经启用

 

![20210627195734](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627195734.png)

 

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

 

![20210627195935](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627195935.png)

 

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

 

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

 

```yaml

[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. 建立名空间**

```yaml

kubectl create namespace kasten-io

```

 

**3. 安装 Kasten K10**

 

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

 

```yaml

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)

> https://docs.kasten.io/latest/install/advanced.html

 

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

```yaml

[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](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627204738.png)

 

浏览器访问如下地址

 

```

http://139.155.161.39/k10/#/

```

 

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

 

![20210627205847](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627205847.png)

 

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

 

```yaml

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](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627210142.png)

 

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

 

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

 

![20210627213313](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627213313.png)

 

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

 

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

 

Pod 运行的情况

![20210627211440](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627211440.png)

 

存储使用情况

![20210627211523](https://mars-blog-1257130361.cos.ap-chengdu.myqcloud.com/20210627211523.png)


 

## 8. 总结

 

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

 

## 9. 参考链接

 

> [**Kasten by Veeam 官网**](https://docs.kasten.io/latest/)

> https://docs.kasten.io/latest/

> [**Complete List of K10 Helm Options**](https://docs.kasten.io/latest/install/advanced.html)

> https://docs.kasten.io/latest/install/advanced.html

> [**Kasten K10 系统需求**](https://docs.kasten.io/latest/operating/footprint.html)

> https://docs.kasten.io/latest/operating/footprint.html

> [**腾讯云 TKE 文档与资源**](https://cloud.tencent.com/product/tke/developer)

https://cloud.tencent.com/product/tke/developer

> [**腾讯云 TCR 文档与资源**](https://cloud.tencent.com/document/product/1141)

https://cloud.tencent.com/document/product/1141

> [**腾讯云 CBS-CSI 文档与资源**](https://cloud.tencent.com/document/product/457/51099)

https://cloud.tencent.com/document/product/457/51099



 


0 comments

Be the first to comment!

Comment