介紹
在本教程中,您將學習如何部署TrilioVault for Kubernetes(或TVK)到您的DOKS集群,創建備份,並在發生故障時從備份中恢復。您可以備份整個集群,或者可選擇基於命名空間或標籤的備份。
使用Trilio的優點:
- 全面(或增量)備份您的集群,並在數據丟失的情況下恢復。
- 從一個集群遷移到另一個集群。
- 支持Helm發布備份。
- 運行備份和恢復操作的預先和後置鉤子。
- Web管理控制台,允許您詳細檢查您的備份/恢復操作狀態。
- 定義您的備份的保留策略。
- 應用程序生命周期(即TVK本身)可以通過專用的TrilioVault操作員來管理。
- Velero集成。
- 您可以備份和還原基於操作員的應用程序。
有關更多信息,請參閱TVK CRD官方文檔。
目錄
- 先決條件
- 步驟1 – 安裝用於 Kubernetes 的 TrilioVault
- 步驟2 – 建立 TrilioVault 目標以存儲備份
- 步驟3 – 熟悉 TVK Web 管理控制台
- 步驟4 – 命名空間備份和還原示例
- 步驟5 – 備份和還原整個集群示例
- 步驟6 – 定期備份
- 步驟7 – 備份保留策略
- 結論
先決條件
完成本教程,您需要以下東西:
- A DO Spaces Bucket and access keys. Save the access and secret keys in a safe place for later use.
- A Git client to clone the Starter Kit repository.
- Helm,用於管理 TrilioVault 運算子的發行版和升級。
- Doctl 用於與 DigitalOcean API 互動。
- Kubectl 用於與 Kubernetes 互動。
要讓TrilioVault正確運作並備份您的PVCs,DOKS需要配置以支援容器存儲接口(簡稱CSI)。默認情況下,它已經安裝並配置了驅動程序。您可以使用以下命令進行檢查:
輸出應該類似於以下片段。請注意,提供程序是dobs.csi.digitalocean.com。
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
do-block-storage (default) dobs.csi.digitalocean.com Delete Immediate true 10d
TrilioVault安裝還需要volumeSnapshot
自定義資源定義(CRD)才能成功安裝。您可以使用以下命令進行檢查:
輸出應該類似於以下片段。如果未安裝VolumeSnapshot
CRD,請參閱安裝VolumeSnapshot CRDs。
volumesnapshotclasses.snapshot.storage.k8s.io 2022-02-01T06:01:14Z
volumesnapshotcontents.snapshot.storage.k8s.io 2022-02-01T06:01:14Z
volumesnapshots.snapshot.storage.k8s.io 2022-02-01T06:01:15Z
同樣,請確保CRD支持v1beta1
和v1
API版本。您可以運行以下命令檢查API版本:
在CRD YAML的末尾,您應該看到一個包含v1beta1
和v1
值的storedVersions
列表(如果未安裝,請參閱安裝VolumeSnapshot CRDs):
...
- 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:
- v1beta1
- v1
步驟1 – 安裝用於Kubernetes的TrilioVault
在這一步,您將學習如何為DOKS部署TrilioVault並通過Helm管理TVK安裝。備份數據將存儲在前面在先決條件部分中創建的DO Spaces存儲桶中。
TrilioVault應用程序可以通過多種方式安裝:
- 通過TrilioVault Operator。您定義一個
TrilioVaultManager
CRD,告訴TrilioVault
操作者如何處理Trilio應用程序組件的安裝、後配置步驟和未來升級。 - 通過完全由Helm管理的triliovault-operator圖表(在本教程中進行了涵蓋)。
使用Helm安裝TrilioVault
Starter Kit教程使用了TVK應用程序的集群安裝類型(applicationScope
Helm值設置為“Cluster”)。本教程中的所有示例都依賴於這種類型的安裝才能正常運行。
首先,複製Starter Kit Git存儲庫並將目錄更改為您的本地副本:
接下來,添加TrilioVault Helm存儲庫,並列出可用的圖表:
輸出看起來類似以下內容:
NAME CHART VERSION APP VERSION DESCRIPTION
triliovault-operator/k8s-triliovault-operator 2.9.2 2.9.2 K8s-TrilioVault-Operator is an operator designe...
感興趣的圖表是 triliovault-operator/k8s-triliovault-operator
,它將在叢集上安裝用於 Kubernetes 的 TrilioVault,以及 TrilioVault-Manager。您可以運行 helm show values triliovault-operator/k8s-triliovault-operator
,並將其匯出到文件中以查看所有可用的選項。
然後,使用您選擇的編輯器(最好支持 YAML lint)打開並檢查起始套件存儲庫中提供的 TrilioVault Helm 值文件。
最後,使用 Helm 安裝 Kubernetes 的 TrilioVault:
–create-namespace \
上述命令將使用 triliovault-values.yaml
中提供的參數安裝 TrilioVault Operator 和 TriloVault Manager(TVM)自定義資源。TVK 版本現在由 05-setup-backup-restore/assets/manifests/triliovault-values.yaml
文件中的 tag
字段管理,因此 helm 命令始終具有 TVK 的最新版本。
- 您可以在
values.yaml
中更新以下字段: installTVK.applicationScope
用於 TVK 安裝的範圍,例如Cluster
或Namespaced
installTVK.ingressConfig.host
用於 TVK UI 主機名,例如tvk-doks.com
installTVK.ComponentConfiguration.ingressController.service.type
用於訪問 TVK UI 的服務類型,例如 NodePort
或 LoadBalancer
現在,檢查您的 TVK 部署:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
triliovault-manager-tvk tvk 1 2022-06-08 08:30:08.490304959 +0000 UTC deployed k8s-triliovault-2.9.2 2.9.2
triliovault-operator tvk 1 2022-06-08 11:32:55.755395 +0300 EEST deployed k8s-triliovault-operator-2.9.2 2.9.2
輸出類似以下程式碼片段(STATUS
欄應顯示 deployed
):
接下來,請驗證 TrilioVault 是否運作正常:
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
輸出類似以下程式碼片段。所有部署的 Pod 必須處於 Ready
狀態。
如果輸出如此,則已成功安裝 TVK。接下來,您將學習如何檢查授權類型和有效性,以及如何更新它。
- 預設情況下,通過 Helm 安裝 TVK 時,不會自動安裝免費試用授權。您隨時可以前往 Trilio 網站,為您的叢集生成新的授權,以滿足您的需求(例如,您可以選擇基本的授權類型,如果您的叢集容量不超過 10 個節點,則可以無限期運行 TrilioVault)。免費試用授權讓您可以在無限叢集節點上運行 TVK 一個月。
- 對於 DigitalOcean 用戶,Kubernetes 叢集最多可容納 100000 個節點的 TrilioVault 是免費的。他們可以按照以下步驟創建專為 DO 用戶提供的特殊授權。
Starter Kit 範例依賴叢集授權類型才能正常運作。
執行以下命令以為您的叢集創建新的授權(它通過 License CRD 進行管理):
上述命令將創建一個作業 job.batch/tvk-license-digitalocean
,該作業將運行一個 Pod tvk-license-digitalocean-828rx
,從 Trilio 授權伺服器提取授權並將其安裝在 DOKS 叢集上。作業完成後,將在 60 秒內刪除。
如果您從 Trilio 的網站下載免費授權,請使用此命令應用它:
請運行以下命令查看授權是否已安裝並在叢集上處於 Active
狀態。
NAME STATUS MESSAGE CURRENT NODE COUNT GRACE PERIOD END TIME EDITION CAPACITY EXPIRATION TIME MAX NODES
test-license-1 Active Cluster License Activated successfully. 1 FreeTrial 100000 2023-02-25T00:00:00Z 1
輸出類似於以下內容。請注意 STATUS
,應為 Active
,以及 EDITION
欄位和 EXPIRATION TIME
。
授權是通過一個名為 License
的特殊 CRD 進行管理。您可以運行以下命令來檢查它:
輸出類似於以下內容。請注意 Message
和 Capacity
欄位,以及 Edition
。
上述输出还将告诉您许可证何时到期,到期时间戳
字段中,并且范围
(在此情况下为集群
)。您可以选择基于集群或基于命名空间的许可证类型。
要更新许可证,您将需要从 Trilio 网站请求一个新的,方法是导航至许可页面来替换旧的许可证。填写完表单后,您应该会收到 License YAML 清单,可以使用kubectl
将其应用到您的集群上。以下命令假定 TVK 安装在默认的tvk
命名空间中(请根据需要替换<>
占位符):
# 从 `tvk` 命名空间获取特定许可证的信息
在下一步中,您将学习如何为 TrilioVault 定义存储后端来存储备份,称为目标。
A typical Target
definition looks like:
TrilioVault 需要首先知道備份存儲在哪裡。TrilioVault 使用 target
這個術語來引用存儲後端,並通過一個名為 Target
的特殊 CRD 來管理它。支持以下目標類型:S3
和 NFS
。對於 DigitalOcean 和入門套件的目的,依賴於 S3
存儲類型是合理的,因為它便宜且可擴展。為了從增強的保護級別中受益,您可以創建多種目標類型(包括 S3
和 NFS
),這樣您的數據就可以在多個地方保持安全,從而實現備份冗余。
- 在此配置中,
spec.type
: 用於備份存儲的目標類型(S3 是對象存儲)。spec.vendor
: 托管目標的第三方存儲供應商(對於 DigitalOcean Spaces,您需要使用Other
而不是AWS
)。spec.enableBrowsing
: 啟用目標的瀏覽功能。spec.objectStoreCredentials
: 定義訪問S3
存儲所需的憑據(通過credentialSecret
),以及其他參數,如存儲桶區域和名稱。
spec.thresholdCapacity
: 存儲備份數據的最大閾值容量。
# 值必须进行 base64 编码
请注意,密钥名称为 trilio-s3-target
,并且它由先前解释的 Target CRD 中的 spec.objectStoreCredentials.credentialSecret
字段引用。 secret
可以位于安装 TrilioVault 的相同 namespace
中(默认为 tvk),也可以位于您选择的其他命名空间中。只需确保正确引用命名空间即可。另一方面,请确保通过 RBAC 保护存储 TrilioVault 密钥的命名空间,出于安全原因。
创建 TrilioVault 的目标的步骤:
首先,更改本地计算机上克隆 Starter Kit Git 存储库的目录:
接下来,创建包含您的目标 S3 存储桶凭据的 Kubernetes 密钥(请相应替换 <>
占位符):
–from-literal=accessKey=“<YOUR_DO_SPACES_ACCESS_KEY_HERE>” \
–from-literal=secretKey=“<YOUR_DO_SPACES_SECRET_KEY_HERE>”
然後,打開並檢查 Starter Kit 存儲庫中提供的目標清單文件,使用您選擇的編輯器(最好支持 YAML lint)。
現在,請相應地替換<>
佔位符,為您的 DO Spaces Trilio 桶命名,例如 bucketName
、region
、url
和 credentialSecret
。
最後,保存清單文件並使用kubectl
創建目標對象:
NAME TYPE THRESHOLD CAPACITY VENDOR STATUS BROWSING ENABLED
trilio-s3-target ObjectStore 10Gi Other Available
接下來,TrilioVault 將生成一個名為 trilio-s3-target-validator
的工作程序,負責驗證您的 S3 桶(如可用性、權限等)。如果該工作成功完成,則認為桶是健康的或可用的,然後刪除 trilio-s3-target-validator
工作資源。如果發生了一些不好的事情,S3 目標驗證器工作將保持運行,以便您可以檢查日誌並找到可能的問題。
現在,請繼續檢查之前創建的目標資源是否健康:
# 輸出看起來類似於:
...
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.
...
#trilio-s3-target-validator-tio99a-6lz4q 1/1 Running 0 104s
# 現在,獲取日誌數據
輸出將是這個異常:
接下來,您將發現 TVK 網絡控制台,這是一個有用的附加功能,可以幫助您輕鬆管理備份和還原操作,還有其他許多功能。
步驟 3 – 了解 TVK Web 管理控制台
雖然您可以完全通過kubectl
和 CRDs 來從 CLI 管理備份和還原操作,但 TVK 提供了一個Web 管理控制台,以通過 GUI 完成相同的操作。管理控制台通過點擊操作簡化了常見任務,提供了更好的 TVK 集群對象的可視化和檢查,以及創建災難恢復計劃(或 DRP)。
在步驟 1 – 安裝 TrilioVault for Kubernetes中涵蓋的基於 Helm 的安裝已經處理了安裝 Web 管理控制台所需的組件。
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
要能夠訪問控制台並探索其提供的功能,您需要將TVK的入口控制器服務端口轉發。
輸出看起來類似以下內容。搜索k8s-triliovault-ingress-nginx-controller
行,並注意它在PORT(S)
列上聆聽80
端口。
127.0.0.1 tvk-doks.com
TVK正在使用Nginx Ingress Controller將流量路由到管理Web控制台服務。路由是基於主機的,主機名為tvk-doks.com
,如在Starter Kit的Helm值文件中定義:
# 通過TVK入口nginx控制器訪問Web控制台時要使用的主機名
最後,導出您的DOKS集群的kubeconfig
文件。此步驟是必需的,以便Web控制台可以對您進行身份驗證。
# 列出可用的集群
# 將集群配置保存為 YAML
如果您只有一個集群,則運行以下命令:
按照這些步驟後,您可以通過在網頁瀏覽器中導航到:http://tvk-doks.com:8080 訪問控制台。當要求kubeconfig
文件時,請選擇您在上面的上一個命令中創建的文件。
請保管好生成的kubeconfig
文件,因為它包含敏感數據。
- 探索 TVK Web 控制台用戶界面
- 從左側探索每個部分,例如:
- 集群管理: 這顯示了主要集群和其他具有 TVK 實例的集群列表,使用多集群管理功能添加到主要的 OVH 集群中。
- 備份與恢復: 這是主要儀表板,可讓您對整個叢集進行一般概述,如已發現的命名空間、應用程式、備份計劃清單、目標、鉤子、策略等。
監控: 有兩個選項- TrilioVault 監控 和 Velero 監控 ,如果用戶在其 OVH 叢集上配置了 Velero。
災難恢復: 允許您管理和執行災難恢復操作。
災難恢復: 允許您管理和執行災難恢復操作。
您還可以通過導航到 備份與恢復 -> 目標 -> <命名空間> 頂部的下拉選單中,查看之前創建的 S3 目標。
更進一步,您可以通過點擊右側的 操作 按鈕,然後從彈出菜單中選擇 啟動瀏覽器 選項,瀏覽目標並列出可用的備份。為了使此操作生效,目標必須將 enableBrowsing
標誌設置為 true
。
有關更多信息和可用功能,請參閱 TVK Web 管理控制台用戶界面 官方文檔。
接下來,您將學習如何針對特定用例執行備份和還原操作。
在這一步中,您將學習如何從您的 DOKS 集群中為整個命名空間(在本例中為 ambassador
)創建一次性備份,並在之後進行還原,確保重新創建所有資源。TVK 具有一項功能,允許您以比僅僅命名空間更高的層次執行備份。
- 創建 Ambassador Helm 發布的備份
- 要在命名空間級別(或 Helm 發布)為單個應用程序執行備份,需要先有一個 BackupPlan,然後是一個 Backup CRD。BackupPlan 定義了備份流程的「什麼」、「哪裡」、「到哪裡」和「如何」,但它不執行實際的備份。Backup CRD 負責根據 BackupPlan 規範觸發實際的備份流程。
- 在此配置中,
A typical Backup CRD looks like below:
spec.backupConfig.target.name
:告訴 TVK 使用哪個目標名稱來存儲備份。
spec.backupConfig.target.namespace
:告訴 TVK 目標是在哪個命名空間中創建的。spec.backupComponents
: 定義了要備份的資源清單。
在這個配置中,
spec.type
: 指定備份類型。
spec.backupPlan
: 指定此備份應使用的 BackupPlan。
發起 Ambassador Helm 發行一次性備份的步驟:
首先,確保 Ambassador Edge Stack 已經部署在您的叢集中,按照 Ambassador Ingress 教程中的步驟進行。
接下來,將目錄更改為在本地機器上克隆了 Starter Kit Git 儲存庫的目錄:
然後,使用您選擇的編輯器(最好支持 YAML lint)打開並檢查 Starter Kit 儲存庫中提供的 Ambassador BackupPlan 和 Backup 清單檔案。
NAME TARGET ... STATUS
ambassador-helm-release-backup-plan trilio-s3-target ... Available
最後,使用 kubectl
創建 BackupPlan 和 Backup 資源。
現在,使用 kubectl
檢查 BackupPlan 狀態(針對 ambassador
Helm 發行):
NAME BACKUPPLAN BACKUP TYPE STATUS ...
ambassador-helm-release-full-backup ambassador-helm-release-backup-plan Full InProgress ...
輸出類似於以下內容。請注意 STATUS
欄位值,應設置為 Available
。
接下來,使用 kubectl
檢查 Backup 物件狀態:
NAME BACKUPPLAN BACKUP TYPE STATUS ... PERCENTAGE
ambassador-helm-release-full-backup ambassador-helm-release-backup-plan Full Available ... 100
輸出類似於以下內容。請注意 STATUS
欄位值,應設置為 InProgress
,以及 BACKUP TYPE
設置為 Full
。
當所有大使的 Helm 發布元件都上傳到 S3 目標後,您應該得到以下結果:
2021-11-25 07:04 28 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/
2021-11-25 07:04 28 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/
2021-11-25 07:04 311 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backup-namespace.json.manifest.00000004
2021-11-25 07:04 302 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backup.json.manifest.00000004
2021-11-25 07:04 305 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backupplan.json.manifest.00000004
2021-11-25 07:04 28 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/
2021-11-25 07:04 28 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/metadata-snapshot/
2021-11-25 07:04 330 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/metadata-snapshot/metadata.json.manifest.00000002
...
# 輸出類似於(請注意 `STATUS` 變為 `Available`,而 `PERCENTAGE` 是 `100`)
如果輸出看起來像這樣,那麼您成功備份了大使的 Helm 發布。您可以繼續查看 TrilioVault 如何存儲 Kubernetes 元數據,方法是列出 TrilioVault S3 存儲桶內容。例如,您可以使用 s3cmd:
ambassador-helm-release-full-backup-metamover-mg9gl0--1-2d6wx 1/1 Running 0 4m32s
輸出類似於以下內容。請注意,列出包含了 JSON 清單和 UID,代表 Kubernetes 對象。
如果備份未能變為可用,您可以檢查 metamover
Pod 的日誌以查找問題:
...
{"component":"meta-mover","file":"pkg/metamover/snapshot/parser/commons.go:1366","func":"github.com/trilioData/k8s-triliovault/pkg/metamover/snapshot/parser.(*Component).ParseForDataComponents","level":"info","msg":"Parsing data components of resource rbac.authorization.k8s.io/v1, Kind=ClusterRoleBinding: [edge-stack]","time":"2022-06-14T06:20:56Z"}
{"component":"meta-mover","file":"pkg/metamover/snapshot/parser/commons.go:1366","func":"github.com/trilioData/k8s-triliovault/pkg/metamover/snapshot/parser.(*Component).ParseForDataComponents","level":"info","msg":"Parsing data components of resource rbac.authorization.k8s.io/v1, Kind=RoleBinding: [edge-stack-agent-config]","time":"2022-06-14T06:20:56Z"}
...
輸出看起來類似於:
現在,取得日誌數據:
輸出看起來類似於以下內容。
最後,您還可以通過在 Web 控制台中導航到 資源管理 -> 大使 -> 備份計畫,來檢查備份是否可用。請注意,它處於 Available
狀態,並且大使的 Helm 發布已在 元件詳情 子視圖中備份。
現在,請模擬一個災難,刻意刪除 ambassador
Helm 發佈:
接下來,檢查命名空間資源是否已被刪除(清單應該為空):
- 最後,驗證
echo
和quote
後端服務端點為DOWN
。請參考創建Ambassador Edge Stack後端服務關於入門套件教程中使用的後端應用程序。您可以使用curl
進行測試(或者您可以使用您的網頁瀏覽器): - 還原Ambassador Helm發佈備份
- 重要
如果要還原相同的命名空間,請確保原始應用程序組件已被刪除。特別是應用程序的 PVC 已被刪除。
如果要恢复到另一个群集(迁移方案),请确保 TrilioVault for Kubernetes 也在远程命名空间/群集中运行。要恢复到新的群集(其中不存在 Backup CR),source.type
必须设置为 location
。请参阅自定义资源定义恢复部分以查看按位置恢复的示例。
- 当您删除
ambassador
命名空间时,与 ambassador 服务关联的负载均衡器资源也将被删除。因此,当您恢复ambassador
服务时,DigitalOcean 将重新创建 LB。问题在于,您将获得新 IP地址用于 LB,因此您需要调整A 记录
以将流量引导到托管在群集上的域中。 - 要恢复特定的备份,您需要创建一个
Restore
CRD。典型的 Restore CRD 如下所示: - 在此配置中,
spec.source.type
:指定要从何种备份类型进行恢复。
spec.source.backup
:包含对要从中恢复的备份对象的引用。
spec.skipIfAlreadyExists
:指定是否在恢复的命名空间中跳过资源的恢复,如果该资源已存在。
恢復允許您為應用程序還原上次成功的備份。它用於還原單個命名空間或Helm發布,受備份CRD保護。備份CRD的識別名為ambassador-helm-release-full-backup
。
首先,從Starter Kit Git存儲庫檢查還原CRD示例:
NAME STATUS DATA SIZE START TIME END TIME PERCENTAGE COMPLETED DURATION
ambassador-helm-release-restore Completed 0 2021-11-25T15:06:52Z 2021-11-25T15:07:35Z 100 43.524191306s
然後,使用kubectl
創建還原資源:
最後,檢查還原對象的狀態:
輸出看起來類似如下。請注意STATUS
列設置為Completed
,以及PERCENTAGE COMPLETED
設置為100
。
如果輸出看起來像這樣,則ambassador
Helm發布恢復過程已成功完成。
NAME READY STATUS RESTARTS AGE
pod/ambassador-5bdc64f9f6-42wzr 1/1 Running 0 9m58s
pod/ambassador-5bdc64f9f6-nrkzd 1/1 Running 0 9m58s
pod/ambassador-agent-bcdd8ccc8-ktmcv 1/1 Running 0 9m58s
pod/ambassador-redis-64b7c668b9-69drs 1/1 Running 0 9m58s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ambassador LoadBalancer 10.245.173.90 157.245.23.93 80:30304/TCP,443:30577/TCP 9m59s
service/ambassador-admin ClusterIP 10.245.217.211 <none> 8877/TCP,8005/TCP 9m59s
service/ambassador-redis ClusterIP 10.245.77.142 <none> 6379/TCP 9m59s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ambassador 2/2 2 2 9m59s
deployment.apps/ambassador-agent 1/1 1 1 9m59s
deployment.apps/ambassador-redis 1/1 1 1 9m59s
NAME DESIRED CURRENT READY AGE
replicaset.apps/ambassador-5bdc64f9f6 2 2 2 9m59s
replicaset.apps/ambassador-agent-bcdd8ccc8 1 1 1 9m59s
replicaset.apps/ambassador-redis-64b7c668b9 1 1 1 9m59s
檢查所有ambassador
命名空間資源是否就位且正在運行:
NAME HOSTNAME STATE PHASE COMPLETED PHASE PENDING AGE
echo-host echo.starter-kit.online Ready 11m
quote-host quote.starter-kit.online Ready 11m
輸出看起來類似:
獲取ambassador主機:
NAME SOURCE HOST SOURCE PREFIX DEST SERVICE STATE REASON
ambassador-devportal /documentation/ 127.0.0.1:8500
ambassador-devportal-api /openapi/ 127.0.0.1:8500
ambassador-devportal-assets /documentation/(assets|styles)/(.*)(.css) 127.0.0.1:8500
ambassador-devportal-demo /docs/ 127.0.0.1:8500
echo-backend echo.starter-kit.online /echo/ echo.backend
quote-backend quote.starter-kit.online /quote/ quote.backend
輸出看起來類似如下。STATE
應為Ready
,以及HOSTNAME
列指向完全合格的主機名。
獲取ambassador映射:
輸出類似以下內容。請注意,echo-backend
被映射到 echo.starter-kit.online
主機和 /echo/
路徑前綴,quote-backend
也是如此。
現在,您需要更新您的 DNS A 記錄
,因為 DigitalOcean 負載均衡器資源已被重新創建,並分配了新的外部 IP。
最後,請檢查後端應用程序是否也對 HTTP 請求作出回應。有關在入門套件教程中使用的後端應用程序,請參閱創建大使邊緣堆棧後端服務。
下一步涉及整個集群的備份和還原。
A typical ClusterBackupPlan
manifest targeting multiple namespaces looks like this:
在此步驟中,您將模擬災害恢復方案。將刪除整個 DOKS 集群,然後從先前的備份中恢復重要應用程序。
這裡的主要想法是通過包括所有重要的命名空間來執行 DOKS 集群備份,這些命名空間包含了您的重要應用程序和配置。
請注意,kube-system
(或其他與 DOKS 集群相關的命名空間)未包含在列表中。通常情況下,除非有特殊情況需要在該級別保留一些設置,否則這些都不是必需的。
首先,更改您本地機器上克隆的 Starter Kit Git 存儲庫的目錄:
然後,使用您選擇的編輯器(最好支持 YAML lint)打開並檢查 Starter Kit 存儲庫中提供的 ClusterBackupPlan
和 ClusterBackup
清單文件。
NAME TARGET ... STATUS
starter-kit-cluster-backup-plan trilio-s3-target ... Available
最後,使用 kubectl
創建 ClusterBackupPlan
和 ClusterBackup
資源:
現在,使用 kubectl
檢查 ClusterBackupPlan
的狀態:
NAME BACKUPPLAN BACKUP TYPE STATUS ... PERCENTAGE COMPLETE
starter-kit-cluster-backup starter-kit-cluster-backup-plan Full Available ... 100
輸出看起來類似以下內容。請注意,STATUS
列的值應設置為 Available
。
接下來,使用 kubectl
檢查 ClusterBackup
的狀態:
輸出看起來類似以下內容。請注意,STATUS
列的值應設置為 Available
,同時 PERCENTAGE COMPLETE
設置為 100
。
如果輸出看起來像上面那樣,則您所有重要的應用程序命名空間都已成功備份。
完整集群備份完成的時間可能會有所不同,具體取決於參與過程的命名空間和相關資源的數量。
您也可以打开网页控制台主仪表板并检查多命名空间备份(请注意,所有已备份的重要命名空间都以绿色突出显示,以蜂窝结构呈现):
需要牢记的重要一点是,每当您销毁一个 DOKS 集群然后进行恢复时,TVK 在恢复您的入口控制器时也会创建一个新的负载均衡器,并附带一个新的外部 IP。因此,请务必相应地更新您的 DigitalOcean DNS A 记录
:
现在,请删除整个 DOKS 集群(确保相应地替换<>
占位符):
接下来,按照设置 DigitalOcean Kubernetes中的描述重新创建集群。
要执行恢复操作,您需要按照第 1 步 – 安装 Kubernetes 的 TrilioVault中的说明安装 TVK 应用程序。重要的是要使用相同的 Helm Chart 版本。
安裝成功後,按照第2步 – 創建一個 TrilioVault 目標以存儲備份中的描述配置 TVK 目標,並將其指向相同的S3 存儲桶
,其中包含您的備份數據。同時,請確保目標瀏覽
已啟用。
接下來,按照TrilioVault 應用許可部分中的說明,驗證並激活新的許可證。
要訪問 Web 控制台用戶界面,請參閱訪問 TVK Web 管理控制台部分。
然後,導航到資源管理 -> TVK 命名空間 -> 目標(在 Starter Kit 的情況下,TVK 命名空間是tvk
):
繼續前進,通過點擊操作按鈕來瀏覽目標並列出可用的備份。然後,從彈出菜單中選擇啟動瀏覽器選項。為了使此操作正常工作,目標必須將enableBrowsing
標誌設置為true
。
現在,從列表中點擊starter-kit-cluster-backup-plan項目,然後點擊並展開右側子窗口中的starter-kit-cluster-backup項目:
要開始還原過程,請點擊還原按鈕。
首先,驗證所有集群 Kubernetes 資源。
然後,確保您的 DNS A 記錄已更新,指向您的新負載平衡器外部 IP。
最後,後端應用程序也應對 HTTP 請求做出回應。請參考創建大使邊緣堆棧後端服務,了解 Starter Kit 教程中使用的後端應用程序。
在下一步中,您將學習如何為您的 DOKS 集群應用程序執行定期(或自動)備份。
根據計劃自動進行備份是一個非常有用的功能。它允許您倒帶時間,將系統還原到以前的工作狀態,如果出現問題。本節提供了一個在 5 分鐘計劃(選擇了 kube-system
命名空間)上自動備份的示例。
首先,您需要創建一個類型為 Schedule
的 Policy
CRD,以 cron 格式(與 Linux
cron 相同)定義備份計劃。計劃策略可以用於 BackupPlan
或 ClusterBackupPlan
CRD。典型的計劃策略 CRD 如下所示(定義了一個 5 分鐘
的計劃):
# 每 5 分鐘觸發
接下來,您可以將計劃策略應用於 ClusterBackupPlan
CRD,例如:
您可以注意到這是一個基本的 ClusterBackupPlan
CRD,通過 spec.backupConfig.schedulePolicy
字段引用了之前定義的 Policy
CRD。您可以為完整備份或增量備份創建單獨的策略,因此可以在 spec 中指定 fullBackupPolicy
或 incrementalBackupPolicy
。
現在,請使用 Starter Kit 教程提供的示例清單創建計劃 Policy
。
NAME POLICY DEFAULT
scheduled-backup-every-5min Schedule false
將目錄更改為您本地機器上克隆 Starter Kit Git 存儲庫的位置。
最後,為 kube-system
命名空間的定期備份創建資源:
# 首先為 kube-system 命名空間創建備份計劃
NAME TARGET ... FULL BACKUP POLICY STATUS
kube-system-ns-backup-plan-5min-schedule trilio-s3-target ... scheduled-backup-every-5min Available
# 為 kube-system 命名空間創建並觸發定期備份
檢查 kube-system
的預定備份計劃狀態:
NAME BACKUPPLAN BACKUP TYPE STATUS ...
kube-system-ns-full-backup-scheduled kube-system-ns-backup-plan-5min-schedule Full Available ...
輸出類似以下內容。注意 FULL BACKUP POLICY
設置為先前創建的 scheduled-backup-every-5min
政策資源,以及應該為 STATUS
的 Available
值。
檢查 kube-system
的預定備份狀態:
輸出類似以下內容。注意 BACKUPPLAN
值設置為先前創建的備份計劃資源,以及應該為 STATUS
的 Available
值。
現在,您可以通過查詢集群備份資源並檢查 START TIME
列(kubectl get clusterbackup -n tvk
)來確認備份是否按照定期間隔(5 分鐘)執行。它應反映出 5 分鐘的間隔,如下圖所示:
在下一步中,您將學習如何設置備份的保留策略。
保留策略允許您定義要保留的備份數量以及根據合規要求刪除備份的節奏。保留策略 CRD 提供了一個簡單的 YAML 規範,用於定義要保留的備份數量(以天、週、月、年、最新等形式)。
- 使用保留策略
- 保留策略可用于
BackupPlan
或ClusterBackupPlan
CRD。Retention
类型的典型Policy
清单如下: - 上述保留策略翻译为:
- 每周,保留每个星期三的一个备份。
每月,在每个月的第15天保留一个备份。
A typical ClusterBackupPlan
example configuration that has a retention set looks like:
每年,在每年的三月份保留一个备份。
总体而言,应该保留最近的2个备份。
创建保留策略资源的基本流程与定期备份的流程相同。您需要定义一个BackupPlan
或ClusterBackupPlan
CRD来引用保留策略,然后拥有一个Backup
或ClusterBackup
对象来触发流程。
请注意,它使用retentionPolicy
字段来引用相关的策略。当然,您可以设置具有两种类型策略的备份计划,以便执行定期备份,并处理保留策略。
使用清理策略
您需要一种清理不再使用的所有对象的方法。为此,您需要引入Cleanup Policy
CRD:
上述清理策略必须在TVK安装命名空间中定义。然后,系统会自动为您创建一个定期运行的cron作业,每30分钟运行一次,根据spec字段中指定的backupdays
值删除失败的备份。
结论
- 在本教程中,您学习了如何执行一次性备份以及定期备份,并进行恢复。
- 本教程中解释的所有基本任务和操作旨在为您提供对TrilioVault for Kubernetes功能的基本介绍和理解。
- 了解更多