如何使用 TrilioVault for Kubernetes 备份和恢复 Kubernetes 集群
如何使用TrilioVault for Kubernetes备份和还原Kubernetes集群。
作者选择了科技多样性基金作为写作捐赠计划的一部分来接受捐款。
引言
TrilioVault for Kubernetes (TVK) 是一种云原生解决方案,通过将应用程序的元数据和数据存储在独立的存储库中,来保护您的应用程序。
使用Trilio有一些优点。使用Trilio,您可以对集群进行完整或增量备份,并在数据丢失的情况下将其恢复。您可以从一个集群迁移到另一个集群,并执行备份和恢复操作的预和后钩子。您还可以安排备份,并为备份定义保留政策。最后,您还可以使用Web管理控制台详细检查备份和恢复操作状态(以及其他许多功能)。
本文提供了使用TVK保护本地Kubernetes群集部署或Silicon Cloud Kubernetes服务的说明,包括对群集上部署的有状态或无状态应用程序的保护。在本教程中,您将部署TVK到您的Kubernetes群集,创建群集备份,并从备份中恢复。
如果你正在寻找一个托管的Kubernetes托管服务,请查看我们为增长而构建的简单易用的托管Kubernetes服务。
先决条件 (Xianjue tiaojian)
要完成这个教程,你需要以下物品:
- A Silicon Cloud account. If you do not have one, sign up for a new account.
- A Silicon Cloud Kubernetes cluster with multiple namespaces. You can create a cluster by following our documentation on How To Create Clusters.
- Doctl for Silicon Cloud API interaction. To get started, see our guide on How To Install and Configure doctl.
- Kubectl for Kubernetes interaction. For installation and set up, see the Kubernetes product documentation for Install Tools.
- A Silicon Cloud Spaces bucket or any S3-compatible object storage bucket with its access keys. To use a Silicon Cloud Spaces bucket, follow our guides on How to Create Spaces and How to Manage Administrative Access with access keys. Save the access and secret keys in a safe place for later use. You can also use NFS export to store the backup.
- Helm for managing TrilioVault Operator releases and upgrades. For installation, see Step 1 of our tutorial, How To Install Software on Kubernetes Clusters with the Helm 3 Package Manager.
- A TrilioVault license saved as a yaml file. This tutorial uses Cluster-scoped installation, which you may need to select when fetching the license. For Silicon Cloud users, the TVK installation is free for five years. If you are not using a Silicon Cloud Kubernetes cluster, you will need to enroll on the Trilio website to request a TVK license. There are free trials and a free basic version available.
第一步 – 配置 Kubernetes 集群
在此步骤中,您将检查Kubernetes集群的配置,以确保TrilioVault能够正常工作。
为了使TrilioVault正常工作并备份您的PersistentVolumeClaim(PVCs),Kubernetes集群需要配置支持容器存储接口(CSI)。默认情况下,Silicon Cloud托管的Kubernetes服务已经安装和配置了CSI驱动程序。您可以使用以下命令检查此配置:
- kubectl get storageclass
输出应该看起来类似于这样:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE do-block-storage (default) dobs.csi.digitalocean.com Delete Immediate true 1d
你可以看到,供应商是dobs.csi.digitalocean.com。
TrilioVault安装还需要volumeSnapshot自定义资源定义(CRD)以实现成功安装。您可以使用以下命令来检查此项:
- kubectl get crd | grep volumesnapshot
如果已经安装了volumeSnapshot,输出将类似于这样:
volumesnapshotclasses.snapshot.storage.k8s.io2022-03-02T07:24:23Z volumesnapshotcontents.snapshot.storage.k8s.io2022-03-02T07:24:23Z volumesnapshots.snapshot.storage.k8s.io2022-03-02T07:24:23Z |
如果还没有安装VolumeSnapshot,请参考安装VolumeSnapshot CRDs的文档。
最后,确保CRD支持v1 API版本,您可以通过运行以下命令来检查。
- kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml
在CRD yaml输出的末尾,您应该看到一个包含v1值的storedVersions列表。
… – lastTransitionTime: “2022-01-20T07:58:06Z” message: approved in https://github.com/kubernetes-csi/external-snapshotter/pull/419 reason: ApprovedAnnotation status: “True” type: KubernetesAPIApprovalPolicyConformant storedVersions: – v1
如果没有安装这个,请参考“Installing VolumeSnapshot CRDs”的文档。
在这一步中,您确认了您的Kubernetes配置已准备好安装TrilioVault,您将在下一步中执行此操作。
步骤2 — 安装适用于Kubernetes的TrilioVault
在这个步骤中,您将部署TrilioVault用于本地的Kubernetes集群,并通过Helm管理TVK的安装。备份数据将存储在您在先决条件中创建的兼容S3的存储桶中。
在不同的 Kubernetes 集群分发中,TrilioVault 应用程序可以通过多种方式进行安装。在本教程中,您将通过 triliovault-operator 图表使用 Helm 安装 TrilioVault。
本教程使用聚集范围安装类型来安装 TVK 应用程序。通过这种类型的安装,TVK 可以保护所有命名空间中的应用程序。(相比之下,使用命名空间范围安装,TVK 只能保护部署在该命名空间中的应用程序。)
要安装Kubernetes的TrilioVault,您需要一个许可证,这是先决条件之一,您已经请求过。获取TVK许可证时,您可能需要选择集群范围的安装。
使用Helm安装TrilioVault
要通过Helm安装TrilioVault,请先添加TrilioVault Helm存储库,并使用以下命令列出可用图表:
- helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
- helm repo update triliovault-operator
- helm search repo triliovault-operator
输出看起来很类似于以下内容:
NAME CHART VERSION APP VERSION DESCRIPTION triliovault-operator/k8s-triliovault-operator 2.10.3 2.10.3 K8s-TrilioVault-Operator is an operator designe…
最后,使用helm安装TrilioVault for Kubernetes。
- helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
- –namespace tvk \
- –set installTVK.ingressConfig.host=“demo-tutorial.tvk-doks.com” \
- –create-namespace
这个命令使用 TrilioVault 安装器和 TriloVault 管理者(TVM)自定义资源,使用 triliovault-values.yaml 中提供的默认参数。
- TVK Operator: TVK has a Helm-based Operator, which is managed by a CRD called TrilioVault Manager. The TVK Operator takes care of the lifecycle of the application and auto-recovery in case one of the application components goes down.
- TVK Manager: The TVK application contains several CRDs and their controllers. It has its own webhook server that manages the validation and mutation of its CRD instances. Controllers reconcile the events generated by the operations done on the Custom Resources.
本教程使用TrilioVault Helm值文件(triliovault-values.yaml)中的默认值,包括以下内容:
- installTVK.applicationScope: The scope for the TVK installation can be Cluster or Namespaced. This parameter protects applications either across the ‘Cluster’ or ‘Namespace’, and the TVK license is also generated based on the installation scope. This tutorial uses Cluster-scoped installation.
- installTVK.ingressConfig.host: The domain name for the TVK UI hostname, which is demo-tutorial.tvk-doks.com. Users will access the TVK Management Console through this domain name.
- installTVK.ComponentConfiguration.ingressController.service.type: The service type to access the TVK UI, such as NodePort or LoadBalancer.
Note
运行以下命令以检查您的tvk部署:
- helm ls -n tvk
这个命令将列出您添加的Helm仓库。
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION triliovault-manager-tvk tvk 1 2022-08-18 08:19:50.409742366 +0000 UTC deployed k8s-triliovault-2.10.3 2.10.3 triliovault-operator tvk 1 2022-08-18 08:15:51.618651231 +0000 UTC deployed k8s-triliovault-operator-2.10.3 2.10.3
状态栏应显示已部署。
接下来,验证TrilioVault是否正常运行。运行下面的命令,它将显示tvk安装的状态:
- kubectl get deployments -n tvk
这个命令将会显示在tvk命名空间中的部署情况。
输出结果将会类似于以下内容:
NAME READY UP-TO-DATE AVAILABLE AGE k8s-triliovault-admission-webhook 1/1 1 1 83s k8s-triliovault-control-plane 1/1 1 1 83s k8s-triliovault-exporter 1/1 1 1 83s k8s-triliovault-ingress-nginx-controller 1/1 1 1 83s k8s-triliovault-web 1/1 1 1 83s k8s-triliovault-web-backend 1/1 1 1 83s triliovault-operator-k8s-triliovault-operator 1/1 1 1 4m22s
READY列显示可用的部署数量,遵循ready/desired的模式。所有的部署pod都处于就绪状态,这意味着tvk已成功安装。接下来,您将检查TrilioVault许可证的类型和有效性。
检查TrilioVault应用程序的许可证
作为先决条件之一,您要求了一个用于集群范围安装类型的TrilioVault许可证,并将其保存为yaml文件。在本节中,您将应用您的TrilioVault许可证,确认其状态并检查其字段。
作为前提条件的一部分,您从Trilio的网站上下载了一个免费许可证并将其保存为yaml文件。现在,使用以下命令应用它。
- kubectl apply -f your_license_filename.yaml -n tvk
接下来,请检查您的集群上是否安装了许可证并处于激活状态。
- kubectl get license -n tvk
输出结果与以下类似:
NAME STATUS MESSAGE CURRENT NODE COUNT GRACE PERIOD END TIME EDITION CAPACITY EXPIRATION TIME MAX NODES your_license Active Cluster License Activated successfully. 1 Basic 100 2023-04-25T00:00:00Z 1
请检查状态,应为活动状态。您还可以在版本列中验证您的许可类型,并在到期时间列中查看许可到期时间。
许可证是通过一个名为“License object”的特殊CRD来管理的。您可以通过运行以下命令来检查它,将其中的突出部分替换为您的许可证名称,如前面的输出所示:
- kubectl describe license your_license -n tvk
输出看起来类似于以下内容:
Name: your_license Namespace: tvk Labels: <none> Annotations: generation: 4 triliovault.trilio.io/creator: trilio.user@trilio.io triliovault.trilio.io/instance-id: 1350188a-9289-49ba-9086-553e8cd7cabe triliovault.trilio.io/updater: [{“username”:”system:serviceaccount:tvk:k8s-triliovault”,”lastUpdatedTimestamp”:”2022-04-21T09:50:40.530365762Z”},{“username”:”0c9f7f19-c4… API Version: triliovault.trilio.io/v1 Kind: License Metadata: Creation Timestamp: 2022-04-06T08:07:16Z … Status: Condition: Message: Cluster License Activated successfully. Status: Active Timestamp: 2022-04-06T08:07:17Z Current CPU Count: 6 Max CP Us: 6 Message: Cluster License Activated successfully. Properties: Active: true Capacity: 100 Company: TRILIO-KUBERNETES-LICENSE-GEN-BASIC Creation Timestamp: 2022-04-21T00:00:00Z Edition: Basic Expiration Timestamp: 2027-04-25T00:00:00Z Kube UID: 1350188a-9289-49ba-9086-553e8cd7cabe License ID: TVAULT-7f70e73e-c158-11ec-990f-0cc47a9fd48e Maintenance Expiry Timestamp: 2027-04-25T00:00:00Z Number Of Users: -1 Purchase Timestamp: 2022-04-21T00:00:00Z Scope: Cluster …
检查消息和容量字段,以及版本。
以上的输出还会告诉您许可证何时在到期时间戳字段过期,以及范围(在此情况下为基于集群)。更多详细信息可以在TrilioVault for Kubernetes许可证文档页找到。
在这一步中,您申请并确认了您的TVK许可证的状态。接下来,您将要探索TVK网络控制台,该控制台将帮助您管理目标、备份、恢复等等。
第三步 – 访问TVK管理控制台
在这一步中,您将访问TVK管理控制台,在此您可以通过图形用户界面创建目标并管理操作,例如备份和还原。虽然您可以通过kubectl和CRDs从命令行界面管理操作,但TVK管理控制台通过点按操作简化了常见任务,并提供了对TVK集群对象的更好可视化和检查。
在之前关于使用Helm安装TrilioVault的章节中,你安装并配置了Web管理控制台所需的组件。为了访问该控制台并探索它所提供的功能,你需要导出Kubernetes集群的kubeconfig文件并对TVK的入口控制器服务进行端口转发。
开始通过导出Kubernetes集群的kubeconfig文件来进行操作。这一步是必需的,以便Web控制台可以进行身份验证。
如果您正在使用Silicon Cloud的Kubernetes服务,您可以按照以下步骤导出您的kubeconfig文件。
列出可用的集群:
- doctl k8s cluster list
将集群配置保存为YAML文件,并将突出显示的值替换为所需集群的名称。
- doctl kubernetes cluster kubeconfig show YOUR_CLUSTER_NAME_ > config_YOUR_CLUSTER_NAME_.yaml
Note
DOKS_CLUSTER_NAME=”$(doctl k8s cluster list –no-header –format Name)”
doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml
注意:如果您只有一个集群,则可以使用以下命令:
DOKS_CLUSTER_NAME=”$(doctl k8s cluster list –no-header –format Name)”
doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml
请务必妥善保管生成的kubeconfig文件,因为文件中包含用于访问集群的令牌和用户详细信息等敏感数据。将文件存储在非公开的位置,并考虑使用密码管理应用程序或加密格式。
现在您已经获得了用于认证的 kubeconfig 文件,您将设置端口转发来访问管理控制台。
首先,从tvk命名空间中识别ingress-nginx-controller服务。您可以通过运行以下命令列出tvk命名空间中的服务来执行此操作:
- kubectl get svc -n tvk
输出的结果类似于以下内容:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE k8s-triliovault-admission-webhook ClusterIP 10.245.202.17 <none> 443/TCP 13m k8s-triliovault-ingress-nginx-controller NodePort 10.245.192.140 <none> 80:32448/TCP,443:32588/TCP 13m k8s-triliovault-ingress-nginx-controller-admission ClusterIP 10.3.20.89 <none> 443/TCP 13m k8s-triliovault-web ClusterIP 10.245.214.13 <none> 80/TCP 13m k8s-triliovault-web-backend ClusterIP 10.245.10.221 <none> 80/TCP 13m triliovault-operator-k8s-triliovault-operator-webhook-service ClusterIP 10.245.186.59 <none> 443/TCP 16m
搜索”k8s-triliovault-ingress-nginx-controller”这一行, 并注意到它在PORT(s)列中监听端口80。
TrilioVault的入口服务可以配置为NodePort或LoadBalancer,您可以在TYPE列中看到。如果设置为NodePort,那么您需要确保域名可访问。如果使用NodePort来访问TVK管理控制台,则TrilioVault的入口服务将无法直接连接到外部网络,除非解析用于访问TVK控制台的域名。为解决这个问题,您需要在etc/hosts文件中添加IP地址和域名条目,以解析域名到IP地址。
要做到这一点,打开/etc/hosts文件进行编辑,并添加此条目。
127.0.0.1 demo-tutorial.tvk-doks.com
demo-tutorial.tvk-doks.com 是设置给 TrilioVault ingress Controller 服务的域名。您将使用此域名来访问 TVK 管理控制台。
保存并关闭文件。
接下来,为TVK入口控制器服务创建端口转发。
- kubectl port-forward svc/k8s-triliovault-ingress-nginx-controller 8080:80 -n tvk &
你现在可以通过浏览器访问控制台,导航到:http://demo-tutorial.tvk-doks.com:8080。当要求提供kubeconfig文件时,请选择在本节中创建的文件。
Note
在这一步中,你需要设置访问TVK管理控制台的权限。关于控制台可用功能的更多信息,请参阅TVK Web管理控制台官方文档。
在下一步中,您将定义TrilioVault的存储后端,称为目标。
第四步 – 创建一个TrilioVault目标以存储备份数据。
TrilioVault需要知道在哪里存储您的备份,也称为目标。支持以下目标类型:S3和NFS。该教程使用S3存储类型。有关更多信息,请参阅TVK文档中的备份目标部分。
为了访问S3存储,每个目标需要知道存储桶的凭证,这些凭证存储在一个秘钥中。在此步骤中,您将为备份创建一个TrilioVault目标,并创建一个用于存储存储桶凭证的秘钥。
要开始,请创建包含目标S3存储桶凭证的Kubernetes秘钥。使用nano或您最喜欢的文本编辑器,创建一个名为trilio-s3-target-secret的文件,并添加以下代码,确保替换掉高亮显示的值,将其替换为您的Silicon Cloud Spaces访问密钥和秘密密钥。
apiVersion: v1
kind: Secret
metadata:
name: trilio-s3-target-secret
namespace: tvk
type: Opaque
stringData:
accessKey: your_bucket_access_key
secretKey: your_bucket_secret_key
The secret name is trilio-s3-target-secret, and it will be mentioned in the spec.objectStoreCredentials.credentialSecret field of the next manifest you create for the target. You can place the secret in the same namespace as TrilioVault (which is usually set as tvk) or choose another namespace of your preference. Just ensure that the referenced namespace is correct.
保存并关闭文件。
要应用这个清单并创建密钥,请运行以下命令:
- kubectl apply -f trilio-s3-target-secret.yaml -n tvk
Note
kubectl create secret generic trilio-s3-target-secret \
–namespace=tvk \
–from-literal=accessKey=”your_bucket_access_key” \
–from-literal=secretKey=”your_bucket_secret_key”
你的输出将会是这样的:
secret/trilio-s3-target-secret created
接下来,您将为目标创建清单。创建一个名为trilio-s3-target.yaml的新文件,并添加以下代码块。将bucketName,region和url的突出显示值替换为有关您的Silicon Cloud存储桶的信息,您可以在存储桶的控制面板中找到。
trilio-s3-target.yaml 可以用以下方式进行释义:
天蓝云对象存储目标配置文件
apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
name: trilio-s3-target
namespace: tvk
spec:
type: ObjectStore
vendor: Other
enableBrowsing: true
objectStoreCredentials:
bucketName: your_bucket_name
region: your_bucket_region # e.g.: nyc1 or us-east-1
url: https://nyc1.digitaloceanspaces.com # update the region to match your bucket
credentialSecret:
name: trilio-s3-target-secret
namespace: tvk
thresholdCapacity: 10Gi
以下是对上述配置的解释:
- spec.type: Type of target for backup storage (S3 is ObjectStore).
- spec.vendor: Third-party storage vendor hosting the target (for Silicon Cloud Spaces, you’ll need to use Other).
- spec.enableBrowsing: Enable browsing for the target.
- spec.objectStoreCredentials: Defines required credentials (via credentialSecret) to access the S3 storage, as well as other parameters such as bucket region and name.
- spec.thresholdCapacity: Maximum threshold capacity to store backup data.
请注意, credentialSecret 名称与您刚刚创建的密钥相匹配。
保存并关闭清单文件。
现在,使用kubectl创建目标对象。
- kubectl apply -f trilio-s3-target.yaml -n tvk
你的输出会是这样的:
target.triliovault.trilio.io/trilio-s3-target created
TrilioVault将生成一个名为trilio-s3-target-validator的工作任务,负责验证您的S3存储桶(例如可用性、权限等)。如果任务成功完成,则表示存储桶是健康的或可用的,并在之后删除trilio-s3-target-validator工作资源。
现在,通过运行以下命令并传入目标的名称来检查之前创建的目标资源是否健康。
- kubectl get target trilio-s3-target -n tvk
输出将会看起来类似于这个:
NAME TYPE THRESHOLD CAPACITY VENDOR STATUS BROWSING ENABLED trilio-s3-target ObjectStore 10Gi Other Available true
状态列的值为“可用”,说明目标处于良好状态。
您还可以使用TVK管理控制台验证目标状态。登录后,选择备份与恢复,然后点击目标进行查看。

如果状态显示为可用,则表示您已成功配置了S3目标对象。
然而,如果配置存在问题,状态将显示为不可用。在这种情况下,S3目标验证任务将持续运行,以便您可以检查日志并找到可能的问题。如果目标对象无法变为健康状态,您可以检查来自trilio-s3-target-validator Pod的日志以找到问题。
要查看日志,您首先要找到目标验证节点。
- kubectl get pods -n tvk | grep trilio-s3-target-validator
输出结果将会与此类似,但会有一个独特的标识符。
trilio-s3-target-validator-tio99a-6lz4q 1/1 Running 0 104s
使用先前输出的目标验证程序,使用以下命令获取数据日志:
- kubectl logs pod/trilio-s3-target-validator-tio99a-6lz4q -n tvk
输出将类似于这个样子(注意这个例外作为例子):
… INFO:root:2021-11-24 09:06:50.595166: waiting for mount operation to complete. INFO:root:2021-11-24 09:06:52.595772: waiting for mount operation to complete. ERROR:root:2021-11-24 09:06:54.598541: timeout exceeded, not able to mount within time. ERROR:root:/triliodata is not a mountpoint. We can’t proceed further. Traceback (most recent call last): File “/opt/tvk/datastore-attacher/mount_utility/mount_by_target_crd/mount_datastores.py”, line 56, in main utilities.mount_datastore(metadata, datastore.get(constants.DATASTORE_TYPE), base_path) File “/opt/tvk/datastore-attacher/mount_utility/utilities.py”, line 377, in mount_datastore mount_s3_datastore(metadata_list, base_path) File “/opt/tvk/datastore-attacher/mount_utility/utilities.py”, line 306, in mount_s3_datastore wait_until_mount(base_path) File “/opt/tvk/datastore-attacher/mount_utility/utilities.py”, line 328, in wait_until_mount base_path)) Exception: /triliodata is not a mountpoint. We can’t proceed further. …
如果需要额外的调试帮助,或者在创建目标过程中遇到问题,可以查阅文档中的故障排除部分,或联系支持。
在这一步骤中,您配置了一个TrilioVault目标并创建了一个密钥来提供您的存储桶凭据。接下来,您将执行备份和恢复操作,从而实现灾难恢复方案。
第五步 – 备份和恢复Kubernetes集群
在这个步骤中,您将对您的Kubernetes集群执行备份操作。然后,您将删除命名空间,并使用备份将所有重要的应用程序恢复到这些命名空间中。您将通过目标位置执行集群恢复操作。当您需要执行集群迁移时,同样的步骤也适用。
这里的主要思想是通过包含所有重要的命名空间来执行完整的集群备份,这些命名空间包含你的关键应用程序和配置。这不是一个完整的集群备份和恢复,而是一个多命名空间备份和恢复操作。在实践中,这是唯一需要的,因为在Kubernetes中所有东西都有命名空间。
创建Kubernetes集群备份。
在本节中,您将使用ClusterBackupPlan CRD创建一个多命名空间备份,该备份针对您的Kubernetes集群中的所有重要命名空间。
首先开始集群备份操作,你将创建一个ClusterBackupPlan,它定义了一组需要备份的资源。规范包括备份计划、备份目标和待备份的资源。资源可以以Helm release、运算符或裸露的Kubernetes API资源的形式定义。
使用文本编辑器创建一个名为k8s-cluster-backup-plan.yaml的ClusterBackupPlan清单文件。添加以下代码块,这是一个针对多个命名空间的典型清单文件:
apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
name: k8s-cluster-backup-plan
namespace: tvk
spec:
backupConfig:
target:
name: trilio-s3-target
namespace: tvk
backupComponents:
- namespace: wordpress
- namespace: mysqldb
- namespace: etcd
确保备份组件中列出的命名空间在集群上存在。
您可能会注意到备份组件中没有包括kube-system(或其他与Kubernetes集群相关的命名空间)。通常情况下,除非需要在该级别保留某些设置,否则不需要这些命名空间。
保存并关闭文件。
现在使用kubectl创建ClusterBackupPlan的资源。
- kubectl apply -f k8s-cluster-backup-plan.yaml
你的输出会是这样的:
clusterbackupplan.triliovault.trilio.io/k8s-cluster-backup-plan created
现在,使用 kubectl 检查 ClusterBackupPlan 的状态。
- kubectl get clusterbackupplan k8s-cluster-backup-plan -n tvk
输出的外观与这个类似。
NAME TARGET … STATUS k8s-cluster-backup-plan trilio-s3-target … Available
检查STATUS列的值,应设为可用。
您还可以通过TVK管理控制台查看ClusterBackupPlan的状态。登录后,选择备份与恢复,然后选择备份计划进行查看。

在此时,您已经创建了一个ClusterBackupPlan。接下来,您将创建一个ClusterBackup,它是一个指向spec.clusterBackupPlan.name中实际ClusterBackupPlan的配置。ClusterBackupPlan将始终保持不变;您可以通过将其刷新到多个ClusterBackup的清单文件中来创建多个备份。
现在,创建一个名为 k8s-cluster-backup.yaml 的 ClusterBackup 清单文件。添加以下代码块:
apiVersion: triliovault.trilio.io/v1
kind: ClusterBackup
metadata:
name: k8s-cluster-backup
namespace: tvk
spec:
type: Full
clusterBackupPlan:
name: k8s-cluster-backup-plan
namespace: tvk
保存并关闭文件。
最后,使用kubectl创建ClusterBackup资源。
- kubectl apply -f k8s-cluster-backup.yaml
通过应用ClusterBackup清单,将触发备份流程。
您的输出将如下所示:
clusterbackup.triliovault.trilio.io/k8s-cluster-backup created
现在,使用kubectl检查ClusterBackup的状态。
- kubectl get clusterbackup k8s-cluster-backup -n tvk
输出看起来类似于:
NAME BACKUPPLAN BACKUP TYPE STATUS … PERCENTAGE COMPLETE k8s-cluster-backup k8s-cluster-backup-plan Full Available … 100
检查STATUS列的值,它应该被设置为Available,同时将PERCENTAGE COMPLETE设置为100。
您还可以使用TVK管理控制台查看集群备份状态。从主仪表板上,选择监控,然后在左侧窗格中选择TrilioVault监控。

完整集群备份将花费一些时间来完成,具体取决于参与过程的命名空间、相关资源和PVC上的数据量。如果输出结果与上文相似,那么备份计划中包含的所有重要应用命名空间都已成功备份。
您还可以打开Web控制台的主仪表板,并检查多个命名空间的备份。从主仪表板中,选择备份和恢复,然后选择命名空间。在右上方,您可以在列表视图和蜂窝结构之间切换。

在蜂窝视图中,备份中的所有重要命名空间都会被突出显示。
在这个部分,您创建了一个集群备份。接下来的部分中,您将删除命名空间,然后从备份中恢复它们。
删除命名空间
现在您有了集群备份,您将删除名称空间,以便稍后可以从备份中恢复它们。要删除名称空间,请运行以下命令,并根据需要替换已标记的名称空间。
- kubectl delete ns wordpress
- kubectl delete ns mysqldb
- kubectl delete ns etcd
你的输出结果会是这样的:
namespace “wordpress” deleted namespace “mysqldb” deleted namespace “etcd” deleted
现在你的命名空间已经被删除,你将恢复备份。
使用管理控制台恢复备份。
在本节中,您将使用TVK Web控制台从备份中恢复所有重要的应用程序。恢复过程将验证备份存储的目标。TVK将通过datamover和metamover pods连接到目标存储库,拉取备份文件。TVK将创建从备份存储中拉取的Kubernetes应用程序。
要开始恢复操作,首先需要重新创建目标清单。由于现有的命名空间已被删除,这些命名空间中创建的目标自定义资源也被删除了。这意味着集群上没有目标自定义资源存在。
根据《创建用于存储备份的TrilioVault存储目标》中所述,将TVK目标进行配置,并将其指向与备份数据位于同一的S3存储桶。确保启用目标浏览功能。
然后,导航到备份和恢复,然后选择带有命名空间的目标: 全部选择。

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

为了使此功能正常运作,目标对象必须将enableBrowsing标志设置为true。
选择启动浏览器将会打开目标浏览器。

现在,从备份计划列表中点击k8s集群备份计划项。右侧将显示一个子窗口,显示备份的信息,包括状态。
点击并展开右侧子窗口中的”k8s-cluster-backup”项目。

点击“恢复”按钮开始恢复过程。
接下来,您将看到一个弹窗,其中列出了一些用于恢复过程的选项。要了解恢复过程的不同选项,您可以在TrilioVault文档的恢复选项部分找到有关每个标志的详细信息。

在自定义恢复资源创建时输入一个恢复名称。一旦您提供了名称,您可以将备份中的所有重要命名空间映射到要恢复数据的命名空间。在这种情况下,在配置窗格中选择命名空间配置,然后选择所需的命名空间。

一旦还原过程开始,您可以监视其进度。类似于以下的进度窗口将被显示出来。

一段时间过后,当进度完成后,多个命名空间的恢复操作已成功完成。
在这一部分中,您使用管理控制台恢复了您的备份。在下一部分中,您将确认恢复操作已成功完成。
检查DOKS集群应用状态。
在这个部分,您将确保恢复操作成功,并且在恢复后可以访问应用程序。首先,运行以下命令从列出的命名空间中检索与应用程序相关的所有对象。
- kubectl get all –namespace wordpress
- kubectl get all –namespace mysqldb
- kubectl get all –namespace etcd
对于每个应用程序,您的输出将与下面的类似。
NAME READY STATUS RESTARTS AGE pod/wordpress-5dcf55f8fc-72h9q 1/1 Running 1 2m21s pod/wordpress-mariadb-0 1/1 Running 1 2m20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/wordpress LoadBalancer 10.120.1.38 34.71.102.21 80:32402/TCP,443:31522/TCP 2m21s service/wordpress-mariadb ClusterIP 10.120.7.213 <none> 3306/TCP 2m21s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/wordpress 1/1 1 1 2m21s NAME DESIRED CURRENT READY AGE replicaset.apps/wordpress-5dcf55f8fc 1 1 1 2m21s NAME READY AGE statefulset.apps/wordpress-mariadb 1/1 2m21s
输出详细信息显示,WordPress 应用程序部署的 1/1 个容器处于 READY 状态。此外,WordPress 应用程序 pods 和 WordPress MariaDB pods 的容器也有 1/1 个处于 RUNNING 状态。这些状态确认应用程序已成功恢复。
在下一步中,您将学习为您的DOKS集群应用程序执行定期(或自动)备份。
第六步 — 安排备份计划
根据预定时间自动创建备份是一个非常实用的功能。如果出现问题,它可以让您回溯时间,将系统恢复到以前的工作状态。TrilioVault默认创建了三个预定策略:每天、每周和每月。
在TVK控制台中,您可以在“备份和恢复”下的“调度策略”中查看默认策略。

调度策略可以用于备份计划(BackupPlan)或集群备份计划(ClusterBackupPlan)的CRD。
创建一个名为scheduled-backup-every-5min.yaml的清单文件,并添加以下代码,这是一个典型的自定义计划策略CRD。
apiVersion: triliovault.trilio.io/v1
kind: Policy
apiVersion: triliovault.trilio.io/v1
metadata:
name: scheduled-backup-every-5min
namespace: tvk
spec:
type: Schedule
scheduleConfig:
schedule:
- "*/5 * * * *" # trigger every 5 minutes
这个清单在tvk命名空间下创建了一个名为scheduled-backup-every-5min的定时备份策略。它将根据备份计划对象来触发每五分钟一次的定时备份。
创建完清单后,您可以使用它来制定日程政策。
- kubectl apply -f scheduled-backup-every-5min.yaml
你的输出结果会是这样:
policy.triliovault.trilio.io/scheduled-backup-every-5min created
为了应用调度策略,您将把它添加到ClusterBackupPlan CRD中。打开您在第五步创建的ClusterBackupPlan CRD,然后添加标记的行:
apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
name: k8s-cluster-backup-plan
namespace: tvk
spec:
backupConfig:
target:
name: trilio-s3-target
namespace: tvk
schedulePolicy:
fullBackupPolicy:
name: scheduled-backup-every-5min
namespace: tvk
backupComponents:
- namespace: wordpress
- namespace: mysqldb
- namespace: etcd
ClusterBackupPlan CRD通过spec.backupConfig.schedulePolicy字段引用了先前定义的Policy CRD。您可以为完整备份或增量备份创建单独的策略,因此可以在spec中指定fullBackupPolicy或incrementalBackupPolicy。
保存并关闭你的文件。
在此步骤中,您安排了备份并向ClusterBackupPlan添加了调度策略。在下一步中,您将学习如何设置备份的保留策略。
步骤7 — 创建备份保留政策
在这一步中,你将创建一个备份保留策略,该策略决定了备份的频率。保留策略很重要,因为存储是有限的,如果保留了太多对象,成本会变得很高。
保留策略允许您根据合规要求定义要保留的备份数量和删除备份的频率。保留策略CRD提供了一个YAML规范,用于根据天数、周数、月数、年数、最新备份等来定义要保留的备份数量。
TVK还有一个默认的保留策略,您可以在TVK控制台的备份与恢复下的保留策略中查看。

保留策略可用于BackupPlan或ClusterBackupPlan CRDs。创建一个名为sample-retention-policy.yaml的新文件,并添加以下内容:
apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
name: sample-retention-policy
spec:
type: Retention
retentionConfig:
latest: 2
weekly: 1
dayOfWeek: Wednesday
monthly: 1
dateOfMonth: 15
monthOfYear: March
yearly: 1
这是一个典型的保留类型政策清单。以下是对上述配置的解释:
- spec.type: Defines the policy type: Retention or Schedule.
- spec.retentionConfig: Describes the retention configuration, such as the interval to use for backup retention and how many to retain.
- spec.retentionConfig.latest: Maximum number of latest backups to be retained.
- spec.retentionConfig.weekly: Maximum number of backups to be retained in a week.
- spec.retentionConfig.dayOfWeek: Day of the week to maintain weekly backups.
- spec.retentionConfig.monthly: Maximum number of backups to be retained in a month.
- spec.retentionConfig.dateOfMonth: Date of the month to maintain monthly backups.
- spec.retentionConfig.monthOfYear: Month of the backup to retain for yearly backups.
- spec.retentionConfig.yearly: Maximum number of backups to be retained in a year.
在上述配置的保留策略中,备份策略将每周保留每个星期三的一个备份;每月保留每个月15日的一个备份;每年保留三月份的一个备份。总体而言,最近的两个备份将可用。
创建保留策略资源的基本流程与定期备份相同。您需要定义一个BackupPlan或ClusterBackupPlan CRD来引用保留策略,然后创建一个Backup或ClusterBackup对象来触发该过程。
要应用保留策略,请打开您的ClusterBackupPlan CRD,并将其更新为以下内容:
apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
name: k8s-cluster-backup-plan
namespace: tvk
spec:
backupConfig:
target:
name: trilio-s3-target
namespace: tvk
retentionPolicy:
fullBackupPolicy:
name: sample-retention-policy
namespace: tvk
backupComponents:
- namespace: wordpress
- namespace: mysqldb
- namespace: etcd
清单使用retentionPolicy字段来引用所讨论的策略。您可以设置一个备份计划,其中同时包含这两种类型的策略,以便可以进行定期备份,并处理保留策略。
在这个步骤中,您为备份设置保留策略。
结论
在这个教程中,您安装了适用于Kubernetes的TrilioVault,并使用它来备份和恢复一个集群。您还安排了备份并配置了保留策略。
你使用TrilioVault for Kubernetes成功完成了集群备份的基本任务,因此你现在已经具备了通过TrilioVault产品文档中的以下内容来探索其他主题和材料的能力。
- TVK Custom Resource Definition API Documentation.
- How to Integrate Pre/Post Hooks for Backup Operations, with examples given for various databases.
- Multi-Cluster Management
- Helm Releases Backup, which shows examples of Helm releases backup strategies.
- Immutable Backups, which restrict backups on the target storage to be overwritten.
- Backups Encryption, which explains how to encrypt and protect sensitive data on the target (storage).
- Restore Transforms
- Disaster Recovery Plan
如果想要了解更多关于Kubernetes的内容,请查阅Silicon Cloud Kubernetes(DOKS)的产品文档和其他教程。