Kasten k10 多云适配系列 08 – 利用 Kasten K10 保护 VMware Tanzu TKG 云原生应用

Kasten k10 多云适配系列 08 - 利用 Kasten K10 保护 VMware Tanzu TKG 云原生应用

[toc]

1. 背景

Build!Run!Manage! 正如 VMware Tanzu 产品组合中所映射的那样,基于 Kubernetes 架构而构建的云原生应用正在影响着企业软件开发和运营的每一个过程。 不仅如此,企业在构建云原生应用程序的同时,企业的 SRE 小组还要践行 Day 2 Operation。简单讲 Day-2 Operation 是系统为组织产生结果的地方。因此,要不断寻求 Day-2 Opeation 的改进,以实现效益最大化,而基于云原生的数据管理就是 Day-2 Opeation 的重要组成部分。Kasten 与 VMware 的合作使企业的 IT 和 DevOps 团队能够立即实现云原生数据管理功能的优势,例如,灾备、和迁移,这不仅与数据安全性有关,还将缩短产品研发周期、提高基础设施利用率和运营效率。这篇文章将探讨了如何利用 Kasten K10 保护 VMware Tanzu Kubernetes Grid (TKG) 云原生应用程序,让我们开始吧!

20220309185843

2. Kasten 与 VMware Tanzu TKG

2.1. Kasten 与 VMware Tanzu TKG 介绍

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

Tanzu Kubernetes 集群是由 VMware 构建、签名和支持的开源 Kubernetes 容器编排平台的完整分发版。可以通过使用 Tanzu Kubernetes Grid 服务在主管集群上置备和运行 Tanzu Kubernetes 集群。主管集群是启用了 vSphere with Tanzu 的 vSphere 集群。

2.2. 使用 Kasten K10 和 VMware 解决数据管理问题

Kasten K10 数据管理软件平台专为 Kubernetes 打造。作为数据管理的 VMware 设计合作伙伴,K10 可以与 vSphere 跨 TKG 和其他 Kubernetes 发行版无缝部署。K10 以应用程序为中心的方法以及与关系数据库和 NoSQL 数据库以及包括 VMware Cloud Native Storage (CNS) 在内的存储系统的深度集成为您的整个 Kubernetes 应用程序提供备份/恢复和移动性。K10 以操作简单为核心宗旨,让Kubernetes 应用移动和备份变得像 1-2-3 一样简单。

20220214215434

这种合作伙伴关系提供了最佳解决方案,可在 vSphere 环境中的 Kubernetes上无缝扩展和操作您的云原生应用程序。Kasten 以应用程序为中心的方法提供了 IT 和运营团队操作云原生应用程序所需的简单性和可移植性,这些应用程序在后台使用多个数据服务并部署在多个集群、区域或云中。

3. 验证目标

在本次验证场景中,我们将借助 VMware Tanzu TKG Demo ApplianceKasten K10 实现云原生应用的数据保护。

  • 部署 Tanzu TKG Cluster
  • 创建 Workload Cluster
  • 安装 Kasten K10 到 workload cluster
  • 创建 云原生应用

利用 K10 对存储 CNS API 进行调用生成快照,达成最快速的 RPO 与 RTO的备份与恢复
利用 S3 对象存储,将快照数据导出到对象存储桶上,实现了异地容灾与数据长期保留

4. 部署 Tanzu TKG Cluster with a Demo Appliance

4.1. 为什么要从 Demo Appliance 开始?

基于来自 Veeam Partner 的反馈,大多数在云原生平台上工作的人,包括管理员、架构师、开发人员、平台运营商等,很难获得 VMware Tanzu TKG 的体验机会。他们的挑战涵盖但不限于下载软件、许可软件以及配置软件运行所需的资源。
Tanzu Demo Appliance 预先捆绑了部分所依赖的资源项,以帮助客户在 VMware Cloud on AWS 或 vSphere 环境上运行的独立 Tanzu Kubernetes Grid (TKG) 集群,可以非常方便的用于学习、测试、开发和搭建预生产环境等目的。

4.2. 部署 TKG Demo Appliance

要部署 TGK Demo Appliance 可以遵从如下文档,将其部署至自己适合的环境。

TGK Demo Appliance 安装前的准备
https://hackmd.io/rHOUvdS3QsGlhCpGRU-hOQ
TGK Demo Appliance Workshop Guide
https://hackmd.io/EbTCJhsWRLObk28okTgkuQ

部署之后,连接虚拟机将有如下显示

20220310101023

4.3. 用 Tanzu CLI 部署 TKG Management Cluster

我们需要建立管理集群 (Management Cluster) 与工作负载集群(Workload Cluster)

在创建 Tanzu Kubernetes Grid 实例时,我们首先要部署管理集群 Management Cluster 它承担 TKG 实例的主要管理和运营中心的角色。
在这里,我们可以创建 Workload Cluster 集群和配置集群服务。

The TKG Demo Appliance 默认包括如下 YAML files:

For On-Premises vSphere envionrment

  • vsphere-tkg-mgmt-template.yaml
  • vsphere-tkg-workload-1-template.yaml
  • vsphere-tkg-workload-2-template.yaml

4.3.1. 创建管理集群 Management Cluster

您可以根据环境编辑配置相应的 TKG 管理和工作负载集群模板,并使用 VMC vCenter Server 的内部 IP 地址(例如 10.10.1.18)和具有 cloudadmin@vmc.local 帐户凭据的VSPHERE_PASSWORD变量更新VSPHERE_SERVER变量。您还需要更新VSPHERE_SSH_AUTHORIZED_KEY变量等。在此示例中,将用于管理控制平面以部署 K8s 管理群集的虚拟 IP 地址将是10.10.2.2,可以通过更新 VSPHERE_CONTROL_PLANE_ENDPOINT 变量来更改以下创建集群的命令与示例

执行以下命令建立管理集群

$ tanzu management-cluster create -f vmc-tkg-mgmt-template-mars.yaml -v2

创建管理集群的 yaml 示例

#! ---------------------------------------------------------------------
#! Basic cluster creation configuration
#! ---------------------------------------------------------------------
CLUSTER_NAME: tkg-mgmt-mars
CLUSTER_PLAN: dev
INFRASTRUCTURE_PROVIDER: vsphere
ENABLE_CEIP_PARTICIPATION: "true"
# TMC_REGISTRATION_URL:
ENABLE_AUDIT_LOGGING: true
CLUSTER_CIDR: 100.96.0.0/11
SERVICE_CIDR: 100.64.0.0/13
#! ---------------------------------------------------------------------
#! vSphere configuration
#! ---------------------------------------------------------------------
VSPHERE_SERVER: 10.10.1.18
VSPHERE_PASSWORD: *********
VSPHERE_USERNAME: cloudadmin@vmc.local 
VSPHERE_DATACENTER: /demolab
VSPHERE_RESOURCE_POOL: /demolab/host/demolab-Cluster/Resources/TKG
VSPHERE_DATASTORE: /demolab/datastore/WorkloadDatastore
VSPHERE_FOLDER: /demolab/vm/TKG
VSPHERE_NETWORK: tkg-network
VSPHERE_CONTROL_PLANE_ENDPOINT: 10.10.2.2
VSPHERE_SSH_AUTHORIZED_KEY: ssh-rsa KEY-TOO-LONG root@tkg.demolab.local
VSPHERE_INSECURE: true
DEPLOY_TKG_ON_VSPHERE7: true
ENABLE_TKGS_ON_VSPHERE7: false
#! ---------------------------------------------------------------------
#! Node configuration
#! ---------------------------------------------------------------------
VSPHERE_CONTROL_PLANE_DISK_GIB: "20"
VSPHERE_CONTROL_PLANE_MEM_MIB: "8192"
VSPHERE_CONTROL_PLANE_NUM_CPUS: "4"
VSPHERE_WORKER_DISK_GIB: "20"
VSPHERE_WORKER_MEM_MIB: "8192"
VSPHERE_WORKER_NUM_CPUS: "4"
<truncated...>

4.3.2. 创建管理集群 Wokload Cluster

在此示例中,将用于管理控制平面以部署 K8s 工作负载群集的名为 tkg-cluster-01 的虚拟 IP 地址将为 10.10.2.3 ,可以通过更新 VSPHERE_CONTROL_PLANE_ENDPOINT 变量进行更改。默认情况下,这将部署最新版本的 K8s。

# cat vsphere-tkg-workload-1-template-mars.yaml
#! ---------------------------------------------------------------------
#! Basic cluster creation configuration
#! ---------------------------------------------------------------------

CLUSTER_NAME: tkg-cluster-01
CLUSTER_PLAN: dev
INFRASTRUCTURE_PROVIDER: vsphere
ENABLE_CEIP_PARTICIPATION: "true"
# TMC_REGISTRATION_URL:
ENABLE_AUDIT_LOGGING: true
CLUSTER_CIDR: 100.96.0.0/11
SERVICE_CIDR: 100.64.0.0/13

#! ---------------------------------------------------------------------
#! vSphere configuration
#! ---------------------------------------------------------------------
VSPHERE_SERVER: 10.10.1.18
VSPHERE_PASSWORD: *********
VSPHERE_USERNAME: administrator@demo.local
VSPHERE_DATACENTER: /demolab
VSPHERE_RESOURCE_POOL: /demolab/host/demolab-Cluster/Resources/TKG
VSPHERE_DATASTORE: /demolab/datastore/WorkloadDatastore
VSPHERE_FOLDER: /demolab/vm/TKG
VSPHERE_NETWORK: tkg-network
VSPHERE_CONTROL_PLANE_ENDPOINT: 10.10.2.3
VSPHERE_SSH_AUTHORIZED_KEY: ssh-rsa KEY-TOO-LONG root@tkg.demolab.local
VSPHERE_INSECURE: true
DEPLOY_TKG_ON_VSPHERE7: true
ENABLE_TKGS_ON_VSPHERE7: false

#! ---------------------------------------------------------------------
#! Node configuration
#! ---------------------------------------------------------------------
VSPHERE_CONTROL_PLANE_DISK_GIB: "20"
VSPHERE_CONTROL_PLANE_MEM_MIB: "8192"
VSPHERE_CONTROL_PLANE_NUM_CPUS: "4"
VSPHERE_WORKER_DISK_GIB: "20"
VSPHERE_WORKER_MEM_MIB: "8192"
VSPHERE_WORKER_NUM_CPUS: "4"
<truncated...>

运行以下命令以创建 TKG Workload Cluster:

$ tanzu cluster create -f vmc-tkg-workload-1-template.yaml

Validating configuration...
Warning: Pinniped configuration not found. Skipping pinniped configuration in workload cluster. Please refer to the documentation to check if you can configure pinniped on workload cluster manually
Creating workload cluster 'tkg-cluster-01'...
Waiting for cluster to be initialized...
Waiting for cluster nodes to be available...
Waiting for addons installation...

Workload cluster 'tkg-cluster-01' created

TKG 群集启动并运行后,我们需要先检索凭据,运行以下命令,直到可以正常检索集群内的信息:

$ tanzu cluster kubeconfig get --admin tkg-cluster-01

Credentials of workload cluster 'tkg-cluster-01' have been saved
You can now access the cluster by running 'kubectl config use-context tkg-cluster-01-admin@tkg-cluster-01'
To switch context to our newly provisioned TKG Cluster, run the following command which will be based on the name of the cluster:

$ k config get-contexts
CURRENT   NAME                                  CLUSTER          AUTHINFO               NAMESPACE
*         tkg-cluster-01-admin@tkg-cluster-01   tkg-cluster-01   tkg-cluster-01-admin
          tkg-mgmt-mars-admin@tkg-mgmt-mars     tkg-mgmt-mars    tkg-mgmt-mars-admin

$ k config use-context tkg-cluster-01-admin@tkg-cluster-01

$  k get ns
NAME                STATUS   AGE
default             Active   1m
kube-node-lease     Active   1m
kube-public         Active   1m
kube-system         Active   1m
tkg-system          Active   1m
tkg-system-public   Active   1m

5. 安装 Kasten K10 到 Workload cluster

5.1 就绪检查 Pre-Flight Checks

通过 Pre-Flight Checks 脚本,我们可以验证部署的前提条件是否满足

$ 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  6081  100  6081    0     0   9144      0 --:--:-Namespace option not provided, using default namespace
- --:--:-- --:--:--  9144
Checking for tools
 --> Found kubectl
 --> Found helm
Checking if the Kasten Helm repo is present
 --> The Kasten Helm repo was found
Checking for required Helm version (>= v3.0.0)
 --> No Tiller needed with Helm v3.6.0
K10Primer image
 --> Using Image (ccr.ccs.tencentyun.com/kasten/k10tools:4.5.10) to run test
Checking access to the Kubernetes context tkg-cluster-01-admin@tkg-cluster-01
 --> 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-rx6ln to be ready - ContainerCreating
Pod Ready!
Kubernetes Version Check:
  Valid kubernetes version (v1.20.5+vmware.2)  -  OK

RBAC Check:
  Kubernetes RBAC is enabled  -  OK

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

W0309 14:24:45.749065       8 warnings.go:70] storage.k8s.io/v1beta1 CSIDriver is deprecated in v1.19+, unavailable in v1.22+; use storage.k8s.io/v1 CSIDriver
CSI Capabilities Check:
  VolumeSnapshot CRD-based APIs are not installed  -  Error

Validating Provisioners:
csi.vsphere.vmware.com:
  Storage Classes:
    default
      K10 supports the vSphere CSI driver natively. Creation of a K10 infrastucture profile is required.
      Valid Storage Class  -  OK
    vsan-csi
      K10 supports the vSphere CSI driver natively. Creation of a K10 infrastucture profile is required.
      Valid Storage Class  -  OK

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 安装 Kasten-io

  1. 获取 Helm Chart 供本地使用
    
    添加 Kasten Helm charts 存储库
    $ helm repo add kasten https://charts.kasten.io/

$ helm repo list
NAME URL ls
kasten https://charts.kasten.io/

$ helm repo update

以下这条命令会把 k10-4.0.x.tgz 包下载下来,如果不加任何参数,则会下载最新的版本

在Air Gapped 的环境中安装时,可以先行下载再使用。

$ helm fetch kasten/k10 --version=4.5.4
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "kasten" chart repository
Update Complete. ⎈Happy Helming!⎈

2. 建立名空间
```yaml
$ kubectl create ns kasten-io   
namespace/kasten-io created

$ helm fetch kasten/k10 --version=4.5.4 
  1. 安装 Kasten K10
# 查看存储类
$ kubectl get sc
NAME                PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
default (default)   csi.vsphere.vmware.com   Delete          Immediate           true                   8d
vsan-csi            csi.vsphere.vmware.com   Delete          Immediate           false                  8d

#
$ helm install k10 k10-4.5.4.tgz --namespace kasten-io --set global.airgapped.repository=ccr.ccs.tencentyun.com/kasten-k10 \
  --set auth.tokenAuth.enabled=true \
  --set metering.mode=airgap \
  --set global.persistence.storageClass=default

$ kubectl get po -n kasten-io
NAME                                READY   STATUS    RESTARTS   AGE
aggregatedapis-svc-c9d8d45-4bsp2    1/1     Running   0          12m
auth-svc-7887459498-gll5c           1/1     Running   0          12m
catalog-svc-5f85f46c5b-7jmf8        2/2     Running   0          12m
config-svc-5778964469-gl5s9         1/1     Running   1          12m
crypto-svc-687b4678f7-4cs7s         2/2     Running   0          12m
dashboardbff-svc-66785d9dbb-tz8mn   1/1     Running   11         12m
executor-svc-79c75d7fbf-hcvlk       2/2     Running   0          12m
executor-svc-79c75d7fbf-tfv68       2/2     Running   0          12m
executor-svc-79c75d7fbf-tp5pf       2/2     Running   0          12m
frontend-svc-d4494f7c6-c5f9v        1/1     Running   0          12m
gateway-6b8cb9f84d-4kkjm            1/1     Running   2          12m
jobs-svc-cd7499cc8-zpmt2            1/1     Running   0          12m
k10-grafana-8464f566bd-2pd2v        1/1     Running   0          12m
kanister-svc-7dcdcdbdb7-6hmbw       1/1     Running   0          12m
logging-svc-84cf4b4cbf-lrs5h        1/1     Running   1          12m
metering-svc-7b74f597d7-hk2pf       1/1     Running   1          12m
prometheus-server-fc8fb9bb7-glktg   2/2     Running   0          12m
state-svc-f646c68dd-9gmq4           1/1     Running   0          12m

5.3 登录 Kasten UI

查看 Kasten 的服务

$ kubectl get svc -n kasten-io
NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                        AGE
aggregatedapis-svc      ClusterIP      100.64.9.166     <none>        443/TCP                        14m
auth-svc                ClusterIP      100.69.27.196    <none>        8000/TCP                       14m
catalog-svc             ClusterIP      100.68.136.174   <none>        8000/TCP                       14m
config-svc              ClusterIP      100.69.155.26    <none>        8000/TCP,443/TCP               14m
crypto-svc              ClusterIP      100.68.233.16    <none>        8000/TCP,8001/TCP              14m
dashboardbff-svc        ClusterIP      100.64.120.212   <none>        8000/TCP                       14m
executor-svc            ClusterIP      100.67.122.139   <none>        8000/TCP                       14m
frontend-svc            ClusterIP      100.70.72.16     <none>        8000/TCP                       14m
gateway                 ClusterIP      100.70.140.97    <none>        8000/TCP                       14m
gateway-admin           ClusterIP      100.64.104.45    <none>        8877/TCP                       14m
jobs-svc                ClusterIP      100.71.36.220    <none>        8000/TCP                       14m
k10-grafana             ClusterIP      100.66.119.187   <none>        80/TCP                         14m
kanister-svc            ClusterIP      100.66.170.60    <none>        8000/TCP                       14m
logging-svc             ClusterIP      100.67.127.211   <none>        8000/TCP,24224/TCP,24225/TCP   14m
metering-svc            ClusterIP      100.70.38.115    <none>        8000/TCP                       14m
prometheus-server       ClusterIP      100.71.46.21     <none>        80/TCP                         14m
prometheus-server-exp   ClusterIP      100.71.117.84    <none>        80/TCP                         14m
state-svc               ClusterIP      100.70.12.175    <none>        8000/TCP                       14m

$ $ kubectl expose service gateway -n kasten-io --type=NodePort --name=gateway-nodeport
service/gateway-nodeport exposed

查看 登录中的 IP

$ kubectl get svc -n kasten-io
NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)                        AGE
<truncated...>
gateway-nodeport        NodePort       100.67.123.119   <none>        8000:32099/TCP               11s
<truncated...>

浏览器访问如下地址
http:// 10.10.2.238:32099/k10/#/

20220309224649

在终端输入如下命令获取 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

登录后的UI

20220309232618

5.4. 使用 octant 查看 Kasten 部署情况

在 控制台输入 octant, 等特下方出现 Dashboard is available at http://127.0.0.1:7777

$ octant
2022-03-09T14:51:42.543Z        INFO    dash/watcher.go:117     watching config file    {"component": "config-watcher", "config": "/root/.kube/config"}
2022-03-09T14:51:42.550Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/containerEditor", "module-name": "overview"}
2022-03-09T14:51:42.550Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/serviceEditor", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/deploymentConfiguration", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "overview/stopPortForward", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/cordon", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/uncordon", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/cronJob", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/suspendCronJob", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/resumeCronJob", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/update", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "overview/startPortForward", "module-name": "overview"}
2022-03-09T14:51:42.551Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/apply", "module-name": "overview"}
2022-03-09T14:51:42.552Z        INFO    module/manager.go:87    registering action      {"component": "module-manager", "actionPath": "action.octant.dev/deleteObject", "module-name": "configuration"}
2022-03-09T14:51:42.554Z        INFO    dash/dash.go:694        Dashboard is available at http://127.0.0.1:7777

在本机的命令行窗口输入 ssh root@10.10.1.107 -L 7777:127.0.0.1:7777(注意不是 Putty 这类工具而是本机的 Terminal

C:\Users\mars.zhang\Downloads\cmder
λ ssh root@10.10.1.107 -L 7777:127.0.0.1:7777
(root@10.10.1.107) Password:
Last login: Wed Mar  9 15:10:46 2022 from 10.10.1.175

20220309232446

我们也可以从 Octant 获取 Token ,点击 token 后面的剪贴板图标

20220309232748

6. 配置存储基础架构与备份存储库

6.1.配置存储基础架构 Infrastructure Profiles

K10 支持 vSphere 存储集成,可以通过从“设置”菜单创建 vSphere 基础架构配置文件来启用。必须使用 vSphere CSI 置备程序置备持久卷。

20220309232932

6.2. 配置 Tencent COS 作为对象存储库

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

20220310090847

7 安装测试应用 yelb

在这个 TKG Demo Appliance 中有一个非常有用的投票 Demo 应用 yelb,我们可以用它来进行备份恢复的测试。在 TKG Demo Appliance/root/demo/yelb 目录中,有个 yelb.yaml 我们就用它来创建应用。

$ cd /root/demo/yelb
#创建 `yelb` 命名空间
$ k create ns yelb
namespace/yelb created

#部署应用
$ k apply -f yelb.yaml
service/redis-server created
service/yelb-db created
service/yelb-appserver created
service/yelb-ui created
deployment.apps/yelb-ui created
deployment.apps/redis-server created
deployment.apps/yelb-db created
deployment.apps/yelb-appserver created

#检查应用的状态
$ k -n yelb get deployments
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
redis-server     1/1     1            1           15s
yelb-appserver   1/1     1            1           15s
yelb-db          1/1     1            1           15s
yelb-ui          1/1     1            1           15s

#查找 yelb UI IP
$ k -n yelb get pods |grep ui
yelb-ui-6b4cc6685d-tgzzb         1/1     Running   0          4m5s

$ k -n yelb describe po yelb-ui-6b4cc6685d-tgzzb  |grep Node
Node:         tkg-cluster-01-md-0-d99699b98-nkdrv/10.10.2.238
Node-Selectors:  <none>

$ k -n yelb get svc |grep ui
yelb-ui          NodePort    100.71.31.29     <none>        80:31001/TCP   5m41s

在一个访问 TKG 网络的浏览器中输入: http://192.168.2.185:31001

20220310094040

8. 云原生应用的备份与还原

8.1 云原生应用的备份

点击 Create Policy, 让我们创建一个数据备份策略,除本地备份之外还备份到云端的对象存储,实现 3-2-1-1-0 的数据保护。

注:Veeam主张使用“3-2-1-1-0”规则作为通用数据管理的策略。即数据必须有三个备份,两个不同的媒介来储存,一份异地备份。新增加的“1”是离线备份数据或不变备份,“0”是零恢复错误。

20220310094329

点击 Run Once 执行备份任务

20220310094453

观察 Dashboard 可以看到应用已经备份完成
20220310094808

8.2 云原生应用的还原

在 Dashboard 中找到 Applications 点击 Restore

20220310095305

选择还原的时间点,新建一个 Namespace 进行还原,这里我们命名为 yelb-restore

20220310095502

在控制台观察还原操作已经顺利完成

20220310095741

在Tanzu Octant 控制台中我们已经看到还原的应用在正常的运行了

20220310095903

9. 总结

通过上述实验,我们可以看到 Kasten by Veeam K10 数据管理平台为企业运营团队提供了一个易于使用、可扩展和安全的系统,用于 VMware Tanzu TKG 的备份/恢复、容灾、应用迁移。K10 使用以应用程序为中心的方法,可以适配多种云原生应用、Kubernetes 发行版、VMware Tanzu TKG 版本 和多种云的深度集成,为企业运维团队提供了选择基础设施的自由度。VMware 和 Veeam 的合作伙伴关系不仅解决了传统解决方案面临的所有数据管理挑战,而且遵循了我们之前概述的云原生备份解决方案的核心原则 -- 面向未来,践行 Day 2 Operation。

10. 参考链接

什么是 Day-2 Operation
https://jimmysong.io/blog/what-is-day-2-operation/
kasten partner with VMware
https://www.kasten.io/partner-vmware
Demo Appliance for Tanzu Kubernetes Grid
https://flings.vmware.com/demo-appliance-for-tanzu-kubernetes-grid
TGK Demo Appliance 安装前的准备
https://hackmd.io/rHOUvdS3QsGlhCpGRU-hOQ
TGK Demo Appliance Workshop Guide
https://hackmd.io/EbTCJhsWRLObk28okTgkuQ

发表回复

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