如何使用 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)。
前提条件
要完成本教程,您将需要以下内容:
- 数字海洋账户。 没有账户的,签入新账户。
- 数字海洋Kubernetes集群,有多个命名空间。 您可以在 [如何创建集群] (https://docs.digitalocean.com/products/kubernetes/how-to/create-clusters/ ) 上跟踪我们的文档创建集群 。
- [Doctl] (https://github.com/digitalocean/doctl/releases)用于"数字海洋"API交互. 要开始,请参见我们的指南,关于[如何安装和配置 doctl] (https://docs.digitalocean.com/reference/doctl/how-to/install/)。
- Kubectl用于`Kubernetes ' 互动。 关于安装和设置,见安装工具的Kubernetes产品文档。
- 数字海洋空间桶或任何S3相容的物体存储桶及其 " 存取 " 钥匙。 要使用数字海洋空间桶,请遵循我们关于如何创建空间和如何管理行政访问的指南。 将
进入 ' 和
秘密 ' 钥匙保存在安全的地方供日后使用。 您也可以使用 NFS 导出来存储备份. - [Helm] (https://www.helm.sh/),用于管理 " TrilioVault操作员 " 的发布和升级。 关于安装,请参看我们教程的第1步,如何用Helm 3套件管理器在Kubernetes集群上安装软件。
- TrilioVault许可证作为`yaml'文件保存。 此教程使用) 。 有免费的试验和免费的基本版本。 .
步骤 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 管理备份和恢复等操作. 虽然您可以通过kubectl
和CRD
管理 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入侵服务可配置为NodePort
或LoadBalancer
,可在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 管理控制台验证目标状态. 登录后,选择 备份和恢复 ,然后点击** 目标** 查看。
如果状态显示为 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.yaml
的ClusterBackupPlan
宣言文件,添加以下代码块,这是针对多个名称空间的典型宣言:
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** 以查看。
在此时,您已经创建了一个),这是指向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** 。
完全集群备份需要一段时间才能完成,这取决于有多少名称空间、相关资源和PVC上存在的数据参与了该过程,如果输出看起来像上面的样子,那么备份计划中包含的所有重要应用程序名称空间都成功备份。
您还可以打开 Web 控制台主仪表板并检查多名称空间
备份. 从主仪表板中,选择 备份和恢复 ,然后选择** 名称空间** 。
在 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 将连接到目标存储库以使用datamover
和metamover pods
将备份文件拉动。
要开始恢复操作,您首先需要重新创建目标表达式. 由于已删除现有命名空间,则在这些命名空间中创建的目标自定义资源也被删除。
設定「TVK」目標,如下所述: Creating a TrilioVault Target to Store Backups,並將其指向相同的「S3桶」,您的備份資料位於那裡。 請確保「target browsing」已啟用。
然后,导航到 备份和恢复 ,然后选择** 目标** 与** 名称空间: 所有** :
要列出可用的备份,请点击右侧的 操作 按钮,然后从下载菜单中选择 ** 启动浏览器** 选项。
要做到这一点,目标必须有允许浏览
的旗帜设置为真
。
选择启动浏览器
将引入目标浏览器
:
现在,从备份计划列表中点击 k8s-cluster-backup-plan 项,右侧将出现一个子窗口,显示有关备份的信息,包括其状态。
点击并从右侧子窗口扩展 k8s-cluster-backup 项目:
要开始恢复过程,点击恢复
按钮。
要了解恢复过程的不同选项,您可以在 TrilioVault 文档中的 Restore Flags 部分中找到每个旗帜的详细信息。
输入 恢复名称 用于恢复自定义资源创建。一旦提供该名称,您可以将所有重要名空间从备份中绘制到您想要恢复数据的名空间。
一旦恢复过程开始,您可以监控其进展. 将显示类似于以下的进展窗口:
过了一会儿,当进度完成时,‘多名称空间’恢复操作已成功完成。
在本节中,您使用管理控制台恢复了备份,在下一节中,您将确认恢复操作成功。
检查 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 控制台中,您可以在 备份和恢复 下查看默认策略,然后在** 计划策略** 下查看:
计划策略可以用于 BackupPlan
或 ClusterBackupPlan
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 控制台中查看 备份和恢复 ,然后** 租赁政策** :
存储策略可以用于BackupPlan
或ClusterBackupPlan
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份备份。
创建保留策略资源的基本流程与计划备份相同,您需要一个定义的BackupPlan
或ClusterBackupPlan
CRD来引用保留策略,然后一个Backup
或ClusterBackup
对象来触发该过程。
若要应用保留策略,请打开您的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 产品文档中探索其他主题和材料:
- TVK [海关资源定义API] (https://docs.trilio.io/kubernetes/architecture/apis-and-command-line-reference/custom-resource-definitions-application-1) 文档。
- 如何整合备份操作的预/后钩,并举例说明各种数据库。
- [多单元管理] (https://docs.trilio.io/kubernetes/management-console-ui/index/multicloud-management)
- [Helm Releases backup] (https://docs.trilio.io/kubernetes/architecture/apis-and-command-line-reference/custom-resource-definitions-application-1/triliovault-crds# type-helm-example-1-single-helm-release),显示了Helm发布备份策略的例子.
- [不可移动备份] (https://docs.trilio.io/kubernetes/architecture/apis-and-command-line-reference/custom-resource-definitions-application-1/triliovault-crds# immutability),它限制了目标存储的备份被覆盖.
- [备份加密] (https://docs.trilio.io/kubernetes/architecture/apis-and-command-line-reference/custom-resource-definitions-application-1/triliovault-crds# type-encryption),它解释了如何加密和保护目标上的敏感数据(存储).
- [复原变 (https://docs.trilio.io/kubernetes/overview/features-and-use-cases# restore-transforms)
- [灾后恢复计划] (https://docs.trilio.io/kubernetes/management-console-ui/index/disaster-recovery-plan)
有关 Kubernetes 的更多信息,请参阅 DigitalOcean Kubernetes (DOKS) 的产品文档 和 额外的教程。