如何使用 TrilioVault for Kubernetes 备份和还原 Kubernetes 集群

如何使用 TrilioVault for Kubernetes 备份和恢复 Kubernetes 集群

作者选择了 Diversity in Tech Fund以作为 Write for Donations计划的一部分接受捐款。

介绍

TrilioVault for Kubernetes (TVK)是一个云原生解决方案,通过在独立的存储库中存储按需备份来保护您的应用程序元数据和数据。

使用 Trilio 有几个优点. 使用 Trilio,您可以对您的集群进行完整或增量备份,并在数据丢失的情况下恢复它们。 您可以从一个集群迁移到另一个集群并运行备份和恢复操作的预和后链。 您还可以计划备份并为您的备份定义保留策略。 最后,您还可以使用 Web 管理控制台来详细检查您的备份和恢复操作状态(以及许多其他功能)。

本文提供了使用 TVK 保护本地 Kubernetes 集群部署或使用 DigitalOcean Kubernetes 服务的说明,包括在集群上部署的具有状态或无状态的应用程序。

如果您正在寻找一个管理的Kubernetes托管服务,请查看我们的简单的,用于增长的管理的Kubernetes服务(https://www.digitalocean.com/products/kubernetes)。

前提条件

要完成本教程,您将需要以下内容:

步骤 1 — 配置 Kubernetes 集群

在此步骤中,您将检查您的 Kubernetes 集群的配置,以确保 TrilioVault 正常工作。

要使 TrilioVault 正常工作,并备份您的 PersistentVolumeClaim (PVCs),Kubernetes 集群需要配置以支持容器存储接口 (CSI)。 默认情况下,DigitalOcean Managed Kubernetes 服务包含已安装和配置的 CSI驱动程序。 您可以使用以下命令来检查:

1kubectl get storageclass

结果应该是这样的:

1[secondary_label Output]
2NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
3do-block-storage (default)   dobs.csi.digitalocean.com Delete Immediate true 1d

正如你所看到的,提供者是 dobs.csi.digitalocean.com

TrilioVault 安装还需要 volumeSnapshot Custom Resource Definition (CRD) 才能成功安装。 您可以使用以下命令来检查:

1kubectl get crd | grep volumesnapshot

如果已经安装了volumeSnapshot,输出将看起来像这样:

1[secondary_label Output]
2volumesnapshotclasses.snapshot.storage.k8s.io2022-03-02T07:24:23Z
3volumesnapshotcontents.snapshot.storage.k8s.io2022-03-02T07:24:23Z
4volumesnapshots.snapshot.storage.k8s.io2022-03-02T07:24:23Z |

如果「volumeSnapshot」尚未安装,请参阅 [Installing VolumeSnapshot CRDs] 的文档(https://docs.trilio.io/kubernetes/appendix/csi-drivers/installing-volumesnapshot-crds)。

最后,请确保 CRD 支持v1 API 版本,您可以通过运行以下命令来检查:

1kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml

在CRD yaml输出的末尾,你应该看到一个包含v1值的存储版本列表:

1[secondary_label Output]
2...
3- lastTransitionTime: "2022-01-20T07:58:06Z"
4    message: approved in https://github.com/kubernetes-csi/external-snapshotter/pull/419
5    reason: ApprovedAnnotation
6    status: "True"
7    type: KubernetesAPIApprovalPolicyConformant
8  storedVersions:
9  - v1

如果没有安装,请参阅 [Installing VolumeSnapshot CRDs] 的文档(https://docs.trilio.io/kubernetes/appendix/csi-drivers/installing-volumesnapshot-crds)。

在此步骤中,您确认您的 Kubernetes 配置已准备好安装 TrilioVault,您将在下一步中完成。

步骤 2 — 安装 TrilioVault for Kubernetes

在此步骤中,您将为本地 Kubernetes 集群部署 TrilioVault,并通过 Helm 管理TVK安装。

TrilioVault 应用程序可以安装在 多种方式,取决于 Kubernetes 集群分布。 在本教程中,您将通过 triliovault-operator图表安装 TrilioVault。

本教程使用)。

要安装 TrilioVault for Kubernetes,您需要一个许可证,您要求作为前提条件的一部分。

使用头盔安装 TrilioVault

若要通过 Helm 安装 TrilioVault,请先添加 TrilioVault Helm 存储库并使用以下命令列出可用的图表:

1helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
2helm repo update triliovault-operator
3helm search repo triliovault-operator

结果看起来类似于以下几点:

1[secondary_label Output]
2NAME CHART VERSION APP VERSION DESCRIPTION
3triliovault-operator/k8s-triliovault-operator 2.10.3 2.10.3 K8s-TrilioVault-Operator is an operator designe...

最后,使用头盔安装 TrilioVault for Kubernetes:

1helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
2  --namespace tvk \
3  --set installTVK.ingressConfig.host="demo-tutorial.tvk-doks.com" \
4  --create-namespace

此命令将使用 TrilioVault Helm 值文件中提供的默认参数来安装) 自定义资源,即triliovault-values.yaml

  • 电视K 运营商:TVK有一个以Helm为主的运营商,由名为 " TrilioVault Manger " 的CRD管理。 TVK操作员负责应用程序的生命周期和自动回收,以防一个应用程序组件下降。
  • 电视K 经理 : TVK应用程序包含多个CRD及其控制器. 它有自己的webhook服务器,管理其CRD实例的验证和突变. 主计长核对自定义资源业务所产生的事件。 .

本教程使用 TrilioVault Helm 值文件(triliovault-values.yaml)中的默认值,包括以下值:

  • " 安装TVK.应用程序范围 " : TVK安装的范围可以是 " Cluster " 或 " Namespaced " 。 这个参数保护跨"Cluster"或"Namespace"的应用程序,TVK许可证也是根据安装范围生成的. 该教程使用 " Cluster " 范围安装。
  • `安装TVK.ingressConfig.host': TVK UI主机名的域名为"demo-tutorial.tvk-doks.com". 用户将通过此域名访问TVK管理控制台.
  • 安装TVK.Componentfigation.engress Captain.service.type': 进入TVK UI的服务类型,例如NodePort'或`LoadBalancer'。 .

<$>[注] 注: 若要查看所有可用的选项,您可以检查 TrilioVault Helm 值文件。 有关更多信息,请查看 TVK 配置选项文档。 <$>

运行以下命令来检查您的tvk部署:

1helm ls -n tvk

此命令会列出您添加的头盔存储库:

1[secondary_label Output]
2NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
3triliovault-manager-tvk tvk 1 2022-08-18 08:19:50.409742366 +0000 UTC deployed k8s-triliovault-2.10.3 2.10.3
4triliovault-operator tvk 1 2022-08-18 08:15:51.618651231 +0000 UTC deployed k8s-triliovault-operator-2.10.3 2.10.3

状态列应显示部署

接下来,检查TrilioVault是否已启动并运行,执行以下命令,该命令将显示tvk安装的状态:

1kubectl get deployments -n tvk

此命令将显示在tvk名称空间中的部署。

结果将类似于以下:

1[secondary_label Output]
2NAME READY UP-TO-DATE AVAILABLE AGE
3k8s-triliovault-admission-webhook 1/1 1 1 83s
4k8s-triliovault-control-plane 1/1 1 1 83s
5k8s-triliovault-exporter 1/1 1 1 83s
6k8s-triliovault-ingress-nginx-controller 1/1 1 1 83s
7k8s-triliovault-web 1/1 1 1 83s
8k8s-triliovault-web-backend 1/1 1 1 83s
9triliovault-operator-k8s-triliovault-operator 1/1 1 1 4m22s

READY列显示了ready/desired模式下可用的部署数量。所有部署插件都处于READY状态,这意味着tvk已成功安装,接下来,您将检查 TrilioVault 许可证类型和有效性。

检查 TrilioVault 应用程序许可证

作为前提条件的一部分,您要求 TrilioVault 许可证用于Cluster的安装类型,并将其保存为yaml文件. 在本节中,您将应用 TrilioVault 许可证,确认其状态,并检查其字段。

作为前提的一部分,您从 Trilio 的 [网站] 下载了免费许可证(https://www.trilio.io/plans),并将其保存为 yaml 文件。

1kubectl apply -f your_license_filename.yaml -n tvk

接下来,检查许可证是否已安装,并在您的集群中处于活跃状态:

1kubectl get license -n tvk

结果看起来类似于以下几点:

1[secondary_label Output]
2NAME STATUS MESSAGE CURRENT NODE COUNT GRACE PERIOD END TIME EDITION CAPACITY EXPIRATION TIME MAX NODES
3your_license Active Cluster License Activated successfully. 1 Basic 100 2023-04-25T00:00:00Z 1

检查状态,应该是活跃。你也可以在EDITION列验证你的许可证类型,并在EXPIRATION TIME列验证许可证的到期时间。

该许可证是通过一个特殊的CRD被称为许可证对象来管理的,您可以通过运行下面的命令来检查它,如上次输出所示,将突出部分替换为您的许可名称:

1kubectl describe license your_license -n tvk

结果看起来类似于以下几点:

 1[secondary_label Output]
 2Name:         your_license
 3Namespace:    tvk
 4Labels:       <none>
 5Annotations:  generation: 4
 6              triliovault.trilio.io/creator: [email protected]
 7              triliovault.trilio.io/instance-id: 1350188a-9289-49ba-9086-553e8cd7cabe
 8              triliovault.trilio.io/updater:
 9                [{"username":"system:serviceaccount:tvk:k8s-triliovault","lastUpdatedTimestamp":"2022-04-21T09:50:40.530365762Z"},{"username":"0c9f7f19-c4...
10API Version:  triliovault.trilio.io/v1
11Kind:         License
12Metadata:
13  Creation Timestamp:  2022-04-06T08:07:16Z
14...
15Status:
16  Condition:
17    Message:         Cluster License Activated successfully.
18    Status:           Active
19    Timestamp:        2022-04-06T08:07:17Z
20  Current CPU Count:  6
21  Max CP Us:          6
22  Message:            Cluster License Activated successfully.
23  Properties:
24    Active:                        true
25    Capacity:                     100
26    Company:                       TRILIO-KUBERNETES-LICENSE-GEN-BASIC
27    Creation Timestamp:            2022-04-21T00:00:00Z
28    Edition:                      Basic
29    Expiration Timestamp:         2027-04-25T00:00:00Z
30    Kube UID:                      1350188a-9289-49ba-9086-553e8cd7cabe
31    License ID:                    TVAULT-7f70e73e-c158-11ec-990f-0cc47a9fd48e
32    Maintenance Expiry Timestamp:  2027-04-25T00:00:00Z
33    Number Of Users:               -1
34    Purchase Timestamp:            2022-04-21T00:00:00Z
35    Scope:                         Cluster
36...

检查消息能力以及编辑字段。

上面的输出还会告诉你许可证在)。更多细节可以在 TrilioVault for Kubernetes licensing的文档页面上找到。

在此步骤中,您应用了您的 TVK 许可证并确认了其状态,接下来,您将探索 TVK 网页控制台,这将帮助您管理目标、备份、恢复等。

步骤 3 — 访问 TVK 管理控制台

在此步骤中,您将访问 TVK 管理控制台,在那里您可以创建目标并通过 GUI 管理备份和恢复等操作. 虽然您可以通过kubectlCRD管理 CLI 的操作,但 TVK 管理控制台通过点击操作简化了常见任务,并提供更好的可视化和检查 TVK 集群对象。

在上一节关于TrilioVault 使用Helm,您安装并配置了网络管理控制台所需的组件. 为了访问控制台并探索其提供的特性,您将导出) 服务.

首先,将 Kubernetes 集群的 kubeconfig 文件导出。 此步骤是必要的,以便 Web 控制台能够验证您的身份。

如果您正在使用 DigitalOcean Kubernetes 服务,您可以按照以下步骤导出您的 kubeconfig 文件。

列出可用的群集:

1doctl k8s cluster list

将群集配置保存到 YAML,以群集名称代替突出值:

1doctl kubernetes cluster kubeconfig show YOUR_CLUSTER_NAME_ > config_YOUR_CLUSTER_NAME_.yaml

注意: 如果您只有一个集群,可以使用下面的命令:

1DOKS_CLUSTER_NAME="$(doctl k8s cluster list --no-header --format Name)"
2doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml

美元

请确保将生成的kubeconfig文件保持安全,因为它包含敏感数据,如用于访问您的集群的代码和用户详细信息。

现在你有你的kubeconfig文件进行身份验证,你将设置端口前进来访问管理控制台。

首先,从tvk名称空间中识别ingress-nginx-controller服务,您可以通过运行以下命令在tvk名称空间中列出服务:

1kubectl get svc -n tvk

结果看起来类似于以下几点:

1[secondary_label Output]
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)                      AGE
3k8s-triliovault-admission-webhook ClusterIP 10.245.202.17    <none>        443/TCP 13m
4k8s-triliovault-ingress-nginx-controller NodePort 10.245.192.140   <none>        80:32448/TCP,443:32588/TCP 13m
5k8s-triliovault-ingress-nginx-controller-admission ClusterIP 10.3.20.89       <none>        443/TCP 13m
6k8s-triliovault-web ClusterIP 10.245.214.13    <none>        80/TCP 13m
7k8s-triliovault-web-backend ClusterIP 10.245.10.221    <none>        80/TCP 13m
8triliovault-operator-k8s-triliovault-operator-webhook-service ClusterIP 10.245.186.59    <none>        443/TCP 16m

搜索)列中的端口80`上响应。

TrilioVault入侵服务可配置为NodePortLoadBalancer,可在TYPE一栏中看到。 如果设定为"NodePort",则需要确保域名可以访问. 如果您正在使用"NodePort"来访问TVK管理控制台,TrilioVault入侵服务将无法直接连接到外部网络,除非解决用于访问TVK控制台的域名. 为了解决这个问题,您将在"etc/hosts"文件中添加IP地址和域名条目来将域名解析到IP中.

要做到这一点,打开/etc/hosts文件进行编辑,并添加此条目:

1[label /etc/hosts]
2127.0.0.1 demo-tutorial.tvk-doks.com

「demo-tutorial.tvk-doks.com」是 TrilioVault ingress Controller 服务的域名,您将使用此域名访问 TVK 管理控制台。

保存并关闭文件。

接下来,创建 TVK 入口控制器服务的端口前进:

1kubectl port-forward svc/k8s-triliovault-ingress-nginx-controller 8080:80 -n tvk &

您现在可以访问您的网页浏览器中的控制台,通过导航到: http://demo-tutorial.tvk-doks.com:8080. 当您被要求找到 kubeconfig 文件时,请选择您在本节中创建的文件。

注意:TVK使用kubeconfig文件来生成用于身份验证的代币,不会存储在kubeconfig文件中存在的用户信息。

在此步骤中,您将设置访问 TVK 管理控制台。 有关主机可用的功能的更多信息,请参阅 TVK Web Management Console 官方文档

在下一步中,您将定义 TrilioVault 的存储后端,称为目标

步骤 4 — 创建 TrilioVault 目标来存储备份

TrilioVault 需要知道存储备份的位置,这被称为)部分提供更多信息。

要访问S3存储,每个目标都需要知道桶的凭据,这些凭据被存储在一个秘密中。

要开始,您将创建 Kubernetes 秘密,其中包含您的目标 S3 桶凭证。 使用nano或您最喜欢的文本编辑器,创建一个名为trilio-s3-target-secret的文件,并添加以下代码,确保您用您的 DigitalOcean Spaces 访问密钥和秘密密密钥取代所突出的值:

 1[label trilio-s3-target-secret.yaml]
 2apiVersion: v1
 3kind: Secret
 4metadata:
 5  name: trilio-s3-target-secret
 6  namespace: tvk
 7type: Opaque
 8stringData:
 9  accessKey: your_bucket_access_key
10  secretKey: your_bucket_secret_key

秘密「名稱」為「trilio-s3-target-secret」。這將會被引用於您下次創建的「目標」宣言的「spec.objectStoreCredentials.credentialSecret」字段中。「秘密」可能存在於安裝「TrilioVault」的相同的「名稱空間(預設為「tvk」)或您選擇的其他名稱空間中。

保存并关闭文件。

若要应用此宣言并创建秘密,请运行以下命令:

1kubectl apply -f trilio-s3-target-secret.yaml -n tvk

另外,您可以通过运行以下命令来创建秘密,以您的 DigtalOcean 桶访问密钥和秘密密密钥替换位置持有者值:

1kubectl create secret generic trilio-s3-target-secret \
2 --namespace=tvk \
3 --from-literal=accessKey="your_bucket_access_key" \
4 --from-literal=secretKey="your_bucket_secret_key"

美元

你的输出将看起来像这样:

1[secondary_label Output]
2secret/trilio-s3-target-secret created

接下来,您将为目标创建一个宣言. 创建一个名为 `trilio-s3-target.yaml’的新文件,并添加以下代码块。

 1[label trilio-s3-target.yaml]
 2apiVersion: triliovault.trilio.io/v1
 3kind: Target
 4metadata:
 5  name: trilio-s3-target
 6  namespace: tvk
 7spec:
 8  type: ObjectStore
 9  vendor: Other
10  enableBrowsing: true
11  objectStoreCredentials:
12    bucketName: your_bucket_name
13    region: your_bucket_region           # e.g.: nyc1 or us-east-1
14    url: https://nyc1.digitaloceanspaces.com      # update the region to match your bucket
15    credentialSecret:
16      name: trilio-s3-target-secret
17      namespace: tvk
18  thresholdCapacity: 10Gi

以下是对上述配置的解释:

  • `规格.类型': 备份存储目标类型(S3为"ObjectStore").
  • " spec.vendor " : 目标所在的第三方存储供应商(对于 " 数字海洋空间 " ,你需要使用 " 其他 " )。
  • `光谱可浏览': 启用目标浏览 。
  • `Spec.objectStore Creditis': 界定进入S3存储的所需 " 证书 " (通过 " 证书 " )以及桶区域和名称等其他参数。
  • `spec.tershold Capital':存储备份数据的最大阈值能力。 .

请注意,credentialSecret的名称匹配您刚刚创建的秘密。

保存并关闭 manifest 文件。

现在,使用kubectl创建目标对象:

1kubectl apply -f trilio-s3-target.yaml -n tvk

你的输出将看起来像这样:

1[secondary_label Output]
2target.triliovault.trilio.io/trilio-s3-target created

「TrilioVault」會產生名為「trilio-s3-target-validator」的「工人工作」,負責驗證您的 S3 桶(如可用性、權限等)。

现在,检查以前创建的目标资源是否健康,运行以下命令并输入目标名称:

1kubectl get target trilio-s3-target -n tvk

结果将看起来像这样:

1[secondary_label Output]
2NAME TYPE THRESHOLD CAPACITY VENDOR STATUS BROWSING ENABLED
3trilio-s3-target ObjectStore 10Gi Other Available true

状态列值为可用,这意味着目标处于健康状态。

您还可以使用 TVK 管理控制台验证目标状态. 登录后,选择 备份和恢复 ,然后点击** 目标** 查看。

Screencapture showing the list of targets

如果状态显示为 Available ,则您已成功配置 S3 目标对象。

但是,如果配置中出现问题,状态将显示 Unavailable . 在这种情况下,S3 目标验证器的工作被留下来运行,以便您可以检查日志并找到可能的问题。

要检查日志,您将从找到目标验证器开始:

1kubectl get pods -n tvk | grep trilio-s3-target-validator

输出将看起来类似于此,但具有唯一的标识符:

1[secondary_label Output]
2trilio-s3-target-validator-tio99a-6lz4q 1/1 Running 0 104s

使用来自上一个输出的目标验证器,使用以下命令获取数据日志:

1kubectl logs pod/trilio-s3-target-validator-tio99a-6lz4q -n tvk

输出将看起来类似于此(以例外为例):

 1[secondary_label Output]
 2...
 3INFO:root:2021-11-24 09:06:50.595166: waiting for mount operation to complete.
 4INFO:root:2021-11-24 09:06:52.595772: waiting for mount operation to complete.
 5ERROR:root:2021-11-24 09:06:54.598541: timeout exceeded, not able to mount within time.
 6ERROR:root:/triliodata is not a mountpoint. We can't proceed further.
 7Traceback (most recent call last):
 8  File "/opt/tvk/datastore-attacher/mount_utility/mount_by_target_crd/mount_datastores.py", line 56, in main
 9    utilities.mount_datastore(metadata, datastore.get(constants.DATASTORE_TYPE), base_path)
10  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 377, in mount_datastore
11    mount_s3_datastore(metadata_list, base_path)
12  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 306, in mount_s3_datastore
13    wait_until_mount(base_path)
14  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 328, in wait_until_mount
15    base_path))
16Exception: /triliodata is not a mountpoint. We can't proceed further.
17...

若要获取额外的帮助,或者在创建目标时遇到问题,请参阅文档(https://docs.trilio.io/kubernetes/support/troubleshooting-guide/issues-and-workaround# target-creation-failure)部分,或联系 support

在此步骤中,您配置了 TrilioVault 目标,并创建了一个秘密,以提供您的桶的凭据。

第5步:备份和恢复Kubernetes集群

在此步骤中,您将对您的 Kubernetes 集群进行备份,然后将删除名空间,并使用备份将所有重要应用程序恢复到这些名空间。

这里的主要想法是执行一个完整的集群备份,包括所有重要的命名空间,其中包含您的基本应用程序和配置. 它不是一个完整的集群备份和恢复,而是一个多名称空间备份和恢复操作。

创建Kubernetes集群备份

在本节中,您将使用 ClusterBackupPlan CRD创建一个多名称空间备份,该备份针对您的Kubernetes集群中的所有重要名称空间

要开始集群备份操作,您将创建一个ClusterBackupPlan,该计划定义了一组要备份的资源。该规范包括备份时间表、备份目标和要备份的资源。

使用您的文本编辑器,创建一个名为k8s-cluster-backup-plan.yamlClusterBackupPlan宣言文件,添加以下代码块,这是针对多个名称空间的典型宣言:

 1[label k8s-cluster-backup-plan.yaml]
 2apiVersion: triliovault.trilio.io/v1
 3kind: ClusterBackupPlan
 4metadata:
 5  name: k8s-cluster-backup-plan
 6  namespace: tvk
 7spec:
 8  backupConfig:
 9    target:
10      name: trilio-s3-target
11      namespace: tvk
12  backupComponents:
13    - namespace: wordpress
14    - namespace: mysqldb
15    - namespace: etcd

确保在备份组件中列出的名称空间存在于集群中。

您可能會注意到「cube-system」(或其他與 Kubernetes 集群相關的名稱空間)不包含在「備份元件」中,通常,除非有一個特殊情況要求某些設定在該級別保持。

保存并关闭文件。

现在,使用kubectl创建ClusterBackupPlan资源:

1kubectl apply -f k8s-cluster-backup-plan.yaml

你的输出将看起来像这样:

1[secondary_label Output]
2clusterbackupplan.triliovault.trilio.io/k8s-cluster-backup-plan created

现在,使用kubectl检查ClusterBackupPlan状态:

1kubectl get clusterbackupplan k8s-cluster-backup-plan -n tvk

结果看起来像这样:

1[secondary_label Output]
2NAME TARGET             ... STATUS
3k8s-cluster-backup-plan trilio-s3-target   ... Available

检查状态列值,该值应设置为可用

您还可以使用 TVK 管理控制台查看ClusterBackupPlan状态。登录后,选择 Backup & Recovery ,然后选择** Backupplans** 以查看。

Screencapture showing the status of the Cluster Backup Plan

在此时,您已经创建了一个),这是指向spec.clusterBackupPlan.name中的实际ClusterBackupPlan的配置。ClusterBackupPlan将始终保持相同;您可以创建多个备份,将其更新为多个ClusterBackupPlan显示文件。

现在,创建一个名为 k8s-cluster-backup.yaml 的 manifest 文件,添加以下代码块:

 1[label k8s-cluster-backup.yaml]
 2apiVersion: triliovault.trilio.io/v1
 3kind: ClusterBackup
 4metadata:
 5  name: k8s-cluster-backup
 6  namespace: tvk
 7spec:
 8  type: Full
 9  clusterBackupPlan:
10    name: k8s-cluster-backup-plan
11    namespace: tvk

保存并关闭文件。

最后,创建ClusterBackup资源,使用kubectl:

1kubectl apply -f k8s-cluster-backup.yaml

通过应用ClusterBackup宣言,将触发备份过程。

你的输出将看起来如下:

1[secondary_label Output]
2clusterbackup.triliovault.trilio.io/k8s-cluster-backup created

现在,检查ClusterBackup状态,使用kubectl:

1kubectl get clusterbackup k8s-cluster-backup -n tvk

结果看起来很像:

1[secondary_label Output]
2NAME BACKUPPLAN BACKUP TYPE STATUS      ... PERCENTAGE COMPLETE
3k8s-cluster-backup k8s-cluster-backup-plan Full Available   ... 100

检查状态列值,该值应设置为可用,以及百分比完整设置为100

您也可以使用 TVK 管理控制台查看集群备份状态,从主仪表板中选择 Monitoring ,然后从左窗格选择** TrilioVault Monitoring** 。

Screencapture showing the status of the Cluster Backup

完全集群备份需要一段时间才能完成,这取决于有多少名称空间、相关资源和PVC上存在的数据参与了该过程,如果输出看起来像上面的样子,那么备份计划中包含的所有重要应用程序名称空间都成功备份。

您还可以打开 Web 控制台主仪表板并检查多名称空间备份. 从主仪表板中,选择 备份和恢复 ,然后选择** 名称空间** 。

Screencapture showing the honeycomb view of the namespaces

在 honeycomb 视图中,突出显示了备份中的所有重要名称空间。

在本节中,您创建了一个集群备份;在下一节中,您将删除名空间,然后从备份中恢复它们。

删除命名空间

现在你有一个集群备份,你会删除你的命名空间,这样你可以从后一步的备份中恢复它们. 要删除你的命名空间,运行以下命令,根据需要更换突出的命名空间。

1kubectl delete ns wordpress
2kubectl delete ns mysqldb
3kubectl delete ns etcd

你的输出将看起来像这样:

1[secondary_label Output]
2namespace "wordpress" deleted
3namespace "mysqldb" deleted
4namespace "etcd" deleted

现在您的命名空间已被删除,您将恢复备份。

使用管理控制台恢复备份

在本节中,您将使用 TVK 网页控制台从备份中恢复所有重要应用程序。恢复过程将验证备份存储的目标。TVK 将连接到目标存储库以使用datamovermetamover pods将备份文件拉动。

要开始恢复操作,您首先需要重新创建目标表达式. 由于已删除现有命名空间,则在这些命名空间中创建的目标自定义资源也被删除。

設定「TVK」目標,如下所述: Creating a TrilioVault Target to Store Backups,並將其指向相同的「S3桶」,您的備份資料位於那裡。 請確保「target browsing」已啟用。

然后,导航到 备份和恢复 ,然后选择** 目标** 与** 名称空间: 所有** :

Screencapture showing the TVK target list

要列出可用的备份,请点击右侧的 操作 按钮,然后从下载菜单中选择 ** 启动浏览器** 选项。

Screencapture showing the Actions button drop-down menu

要做到这一点,目标必须有允许浏览的旗帜设置为

选择启动浏览器将引入目标浏览器:

Screencapture showing the TVK target browser

现在,从备份计划列表中点击 k8s-cluster-backup-plan 项,右侧将出现一个子窗口,显示有关备份的信息,包括其状态。

点击并从右侧子窗口扩展 k8s-cluster-backup 项目:

Screencapture showing the TVK Cluster Backup item

要开始恢复过程,点击恢复按钮。

要了解恢复过程的不同选项,您可以在 TrilioVault 文档中的 Restore Flags 部分中找到每个旗帜的详细信息。

Screencapture showing the restore operation options

输入 恢复名称 用于恢复自定义资源创建。一旦提供该名称,您可以将所有重要名空间从备份中绘制到您想要恢复数据的名空间。

Screencapture showing namespace configuration options

一旦恢复过程开始,您可以监控其进展. 将显示类似于以下的进展窗口:

Screencapture showing the cluster restore progress pane

过了一会儿,当进度完成时,‘多名称空间’恢复操作已成功完成。

在本节中,您使用管理控制台恢复了备份,在下一节中,您将确认恢复操作成功。

检查 DOKS 集群应用程序状态

在本节中,您将确保恢复操作成功,并在恢复后可以访问应用程序. 首先,运行以下命令,从列出的名称空间中获取与应用程序相关的所有对象:

1kubectl get all --namespace wordpress
2kubectl get all --namespace mysqldb
3kubectl get all --namespace etcd

您的输出将为每个应用程序看起来如下:

 1[secondary_label Output]
 2NAME READY STATUS RESTARTS AGE
 3pod/wordpress-5dcf55f8fc-72h9q 1/1 Running 1 2m21s
 4pod/wordpress-mariadb-0 1/1 Running   			1 2m20s
 5
 6NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)                      AGE
 7service/wordpress LoadBalancer 10.120.1.38 34.71.102.21 80:32402/TCP,443:31522/TCP 2m21s
 8service/wordpress-mariadb ClusterIP 10.120.7.213   <none>         3306/TCP 2m21s
 9
10NAME READY UP-TO-DATE AVAILABLE AGE
11deployment.apps/wordpress 1/1 1 1 2m21s
12
13NAME DESIRED CURRENT READY AGE
14replicaset.apps/wordpress-5dcf55f8fc 1 1 1 2m21s
15
16NAME READY AGE
17statefulset.apps/wordpress-mariadb 1/1 2m21s

输出细节显示,WordPress应用部署的1/1容器处于准备状态。 此外,WordPress应用 pods和WordPress MariaDB pods有1/1容器处于运行状态。

在下一步中,您将学习如何为您的)备份。

步骤6:备份计划

根据日程安排自动创建备份是一个非常有用的功能,它允许您重启时间并将系统恢复到以前的工作状态,如果有什么不对劲. 默认情况下,TrilioVault创建了三个日程政策:每日,每周和每月。

在 TVK 控制台中,您可以在 备份和恢复 下查看默认策略,然后在** 计划策略** 下查看:

Screencapture showing the default scheduled policies in the TVK management console

计划策略可以用于 BackupPlanClusterBackupPlan CRDs

创建一个名为scheduled-backup-every-5min.yaml的明示文件,并添加以下代码,这是一个典型的自定义时间表策略CRD:

 1[label scheduled-backup-every-5min.yaml]
 2apiVersion: triliovault.trilio.io/v1
 3kind: Policy
 4apiVersion: triliovault.trilio.io/v1
 5metadata:
 6  name: scheduled-backup-every-5min
 7  namespace: tvk
 8spec:
 9  type: Schedule
10  scheduleConfig:
11    schedule:
12      - "*/5 * * * *" # trigger every 5 minutes

此宣言在tvk名称空间中创建了一个名为scheduled-backup-every-5min的计划备份策略,它将用于根据BackupPlan对象,每五分钟启动一个计划备份策略。

创建宣言后,您可以使用它来创建政策日程表:

1kubectl apply -f scheduled-backup-every-5min.yaml

你的输出将看起来像这样:

1[secondary_label Output]
2policy.triliovault.trilio.io/scheduled-backup-every-5min created

若要应用日程安排策略,您将其添加到ClusterBackupPlan CRD. 打开您在步骤 5 中创建的ClusterBackupPlan CRD,并添加所突出的行:

 1[label k8s-cluster-backup-plan]
 2apiVersion: triliovault.trilio.io/v1
 3kind: ClusterBackupPlan
 4metadata:
 5  name: k8s-cluster-backup-plan
 6  namespace: tvk
 7spec:
 8  backupConfig:
 9    target:
10      name: trilio-s3-target
11      namespace: tvk
12    schedulePolicy:
13      fullBackupPolicy:
14        name: scheduled-backup-every-5min
15        namespace: tvk
16  backupComponents:
17    - namespace: wordpress
18    - namespace: mysqldb
19    - namespace: etcd

ClusterBackupPlan CRD 通过spec.backupConfig.schedulePolicy字段引用了先前定义的Policy CRD. 您可以为完整增量备份创建单独的策略,因此可以在规格中指定fullBackupPolicy增量BackupPolicy

保存并关闭您的文件。

在此步骤中,您计划备份,并将计划策略添加到ClusterBackupPlan。在下一步,您将学习如何为您的备份设置保留策略。

第7步:创建备份保留策略

在此步骤中,您将创建备份保留策略,该策略决定了您的备份的频率。

保留策略允许您根据合规性要求定义要保留的备份数量和删除备份的频率。保留策略CRD提供了YAML规格,以定义要保留的备份数量为,,,,最近等等。

TVK 还具有默认的保留策略,您可以在 TVK 控制台中查看 备份和恢复 ,然后** 租赁政策** :

Screencapture showing the default retention policy in the TVK management console

存储策略可以用于BackupPlanClusterBackupPlan CRD. 创建一个名为sample-retention-policy.yaml的新文件,并添加以下行:

 1[label sample-retention-policy.yaml]
 2apiVersion: triliovault.trilio.io/v1
 3kind: Policy
 4metadata:
 5  name: sample-retention-policy
 6spec:
 7  type: Retention
 8  retentionConfig:
 9    latest: 2
10    weekly: 1
11    dayOfWeek: Wednesday
12    monthly: 1
13    dateOfMonth: 15
14    monthOfYear: March
15    yearly: 1

这是保留类型的典型政策表现,这里为上述配置提供了解释:

  • `规格.类型': 界定政策类型: " 保留 " 或 " 附表 " 。
  • `spec.readingConfig':描述保留配置,如用于备份保留的时间间隔和保留多少个。
  • `Spec.readfig.latest': 要保留的最新备份数 。
  • `注意.保留 ' 在一周内保留最多数量的备份 。
  • `spec.readfig.dayOfWeek':维持每周备份的周日。
  • `spec.readfig.month':一个月后保留最多数量的备份。
  • `spec.readfig.date of Month': 维持每月备份的月份日期 。
  • " spec.reading.months of Year ":年度备份保留月份。
  • `光谱.保留 ' 一年中要保留的最大备份数量 。 .

在上文配置的保留策略中,备份策略将保留每周三的1份备份;每月15日的1份备份;每年3月的1份备份。

创建保留策略资源的基本流程与计划备份相同,您需要一个定义的BackupPlanClusterBackupPlanCRD来引用保留策略,然后一个BackupClusterBackup对象来触发该过程。

若要应用保留策略,请打开您的ClusterBackupPlan CRD,并更新它以如下方式:

 1[label k8s-cluster-backup-plan]
 2apiVersion: triliovault.trilio.io/v1
 3kind: ClusterBackupPlan
 4metadata:
 5  name: k8s-cluster-backup-plan
 6  namespace: tvk
 7spec:
 8  backupConfig:
 9    target:
10      name: trilio-s3-target
11      namespace: tvk
12    retentionPolicy:
13      fullBackupPolicy:
14        name: sample-retention-policy
15        namespace: tvk
16  backupComponents:
17    - namespace: wordpress
18    - namespace: mysqldb
19    - namespace: etcd

该宣言使用一个 retentionPolicy字段来参考该策略. 您可以有一个备份计划,其中有两种类型的策略设置,以便它可以执行计划备份,以及处理保留策略。

在此步骤中,您为您的备份设置保留策略。

结论

在本教程中,您安装了 TrilioVault for Kubernetes,并使用它来备份和恢复群集,您还安排了备份和配置了保留策略。

您已经完成了 TrilioVault for Kubernetes 的集群备份的基本任务,因此您现在可以从 TrilioVault 产品文档中探索其他主题和材料:

有关 Kubernetes 的更多信息,请参阅 DigitalOcean Kubernetes (DOKS) 的产品文档额外的教程

Published At
Categories with 技术
comments powered by Disqus