如何使用 Velero 在 DigitalOcean 上备份和恢复 Kubernetes 集群

介绍

Velero是 Kubernetes 集群的便捷备份工具,可将 Kubernetes 对象压缩并备份到对象存储。它还使用您的云提供商的块存储快照功能为您的集群的 Persistent Volume 拍摄快照,然后可以将您的集群的对象和 Persistent Volume 恢复到以前的状态。

DigitalOcean Velero插件可以让你用DigitalOcean块存储到快照您持久卷,和空间来备份你的Kubernetes对象。在 DigitalOcean 上运行 Kubernetes 集群时,这允许您快速备份集群的状态并在灾难发生时恢复它。

在本教程中,我们将velero在本地机器上设置和配置命令行工具,并将服务器组件部署到我们的 Kubernetes 集群中。然后,我们将部署一个使用 Persistent Volume 进行日志记录的示例 Nginx 应用程序,然后模拟灾难恢复场景。

先决条件

在开始本教程之前,您应该准备好以下内容:

在本地计算机上:

  • kubectl命令行工具,配置为连接到群集。您可以kubectl官方 Kubernetes 文档 中阅读有关安装和配置的更多信息
  • git命令行实用程序。您可以gitGit 入门 中了解如何安装

在您的 DigitalOcean 帐户中:

  • DigitalOcean Kubernetes群集或群集Kubernetes(版本1.7.5上DigitalOcean液滴或更高版本)。
  • 在集群内部运行的 DNS 服务器。如果您使用的是 DigitalOcean Kubernetes,则默认情况下它正在运行。要了解有关配置 Kubernetes DNS 服务的更多信息,请参阅Kuberentes 官方文档中的自定义 DNS 服务
  • DigitalOcean Space 将存储您备份的 Kubernetes 对象。要了解如何创建 Space,请参阅Spaces 产品文档
  • 您的 DigitalOcean Space 的访问密钥对。要了解如何创建一组访问密钥,请参阅如何管理对空间的管理访问
  • 用于 DigitalOcean API 的个人访问令牌。要了解如何创建个人访问令牌,请参阅如何创建个人访问令牌确保您创建或使用的令牌具有Read/Write权限,否则快照将不起作用。

完成所有这些设置后,您就可以开始使用本指南了。

步骤 1 — 安装 Velero 客户端

Velero 备份工具由安装在本地计算机上的客户端和运行在 Kubernetes 集群中的服务器组成。首先,我们将安装本地 Velero 客户端。

在您的 Web 浏览器中,导航到 Velero GitHub 存储库版本页面,找到与您的操作系统和系统架构相对应的版本,并复制链接地址。出于本指南的目的,我们将使用 x86-64(或 AMD64)处理器上的 Ubuntu 18.04 服务器作为我们的本地机器,以及 Velerov1.2.0版本。

注意:要遵循本指南,您应该下载并安装Velero 客户端v1.2.0

然后,从本地计算机上的命令行,导航到临时/tmp目录并cd进入:

  • cd /tmp

使用wget您之前复制的链接下载发行版 tarball:

  • wget https://link_copied_from_release_page

下载完成后,使用以下命令解压缩 tarball tar(注意文件名可能因发行版本和您的操作系统而异):

  • tar -xvzf velero-v1.2.0-linux-amd64.tar.gz

/tmp目录现在应该包含提取的velero-v1.2.0-linux-amd64目录以及您刚刚下载的 tarball。

velero通过执行二进制文件验证您是否可以运行客户端:

  • ./velero-v1.2.0-linux-amd64/velero help

您应该会看到以下帮助输出:

Output
Velero is a tool for managing disaster recovery, specifically for Kubernetes cluster resources. It provides a simple, configurable, and operationally robust way to back up your application state and associated data. If you're familiar with kubectl, Velero supports a similar model, allowing you to execute commands such as 'velero get backup' and 'velero create schedule'. The same operations can also be performed as 'velero backup get' and 'velero schedule create'. Usage: velero [command] Available Commands: backup Work with backups backup-location Work with backup storage locations bug Report a Velero bug client Velero client related commands completion Output shell completion code for the specified shell (bash or zsh) create Create velero resources delete Delete velero resources describe Describe velero resources get Get velero resources help Help about any command install Install Velero plugin Work with plugins restic Work with restic restore Work with restores schedule Work with schedules snapshot-location Work with snapshot locations version Print the velero version and associated image . . .

此时,您应该将velero可执行文件移出临时/tmp目录并将其添加到您的PATH. 要将其添加到PATHUbuntu 系统上,只需将其复制到/usr/local/bin

  • sudo mv velero-v1.2.0-linux-amd64/velero /usr/local/bin/velero

您现在已准备好为 Velero 服务器配置机密,然后将其部署到您的 Kubernetes 集群。

第 2 步 – 配置机密

在设置 Velero 的服务器组件之前,您需要准备您的 DigitalOcean Spaces 密钥和 API 令牌。再次/tmp使用以下cd命令导航到临时目录

  • cd /tmp

现在我们将为 DigitalOcean 下载 Velero 插件的副本。访问插件的 Github 发布页面并将链接复制到以.tar.gz.

使用wget您之前复制的链接下载发行版 tarball:

  • wget https://link_copied_from_release_page

下载完成后,使用以下命令提取 tarball tar(再次注意,文件名可能因发行版本而异):

  • tar -xvzf v1.0.0.tar.gz

/tmp目录现在应该包含提取的velero-plugin-1.0.0目录以及您刚刚下载的 tarball。

接下来我们cd进入velero-plugin-1.0.0目录:

  • cd velero-plugin-1.0.0

现在我们可以保存 DigitalOcean Space 的访问密钥和 API 令牌以用作 Kubernetes Secret。首先,examples/cloud-credentials使用您喜欢的编辑器打开文件。

  • nano examples/cloud-credentials

该文件将如下所示:

/tmp/velero-plugin-1.0.0/examples/cloud-credentials
[default]
aws_access_key_id=<AWS_ACCESS_KEY_ID>
aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>

编辑<AWS_ACCESS_KEY_ID><AWS_SECRET_ACCESS_KEY>占位符以使用您的 DigitalOcean Spaces 键。请务必删除<>字符。

下一步是编辑01-velero-secret.patch.yaml文件,使其包含您的 DigitalOcean API 令牌。在您喜欢的编辑器中打开文件:

  • nano examples/01-velero-secret.patch.yaml

它应该是这样的:

---
apiVersion: v1
kind: Secret
stringData:
digitalocean_token: <DIGITALOCEAN_API_TOKEN>
type: Opaque

更改整个<DIGITALOCEAN_API_TOKEN>占位符以使用您的 DigitalOcean 个人 API 令牌。该行应该看起来像digitalocean_token: 18a0d730c0e0..... 再次确保删除<>字符。

第 3 步 – 安装 Velero 服务器

Velero 安装由许多 Kubernetes 对象组成,它们一起工作以创建、安排和管理备份。velero您刚刚下载可执行文件可以为您生成和安装这些对象。velero install命令将执行初步设置步骤,以使您的集群为备份做好准备。具体来说,它将:

  • 创建一个velero命名空间。

  • 添加velero服务帐户。

  • 配置基于角色的访问控制 (RBAC) 规则以向velero服务帐户授予权限

  • 为 Velero 特定资源安装自定义资源定义 (CRD):BackupScheduleRestoreConfig

  • 注册Velero 插件以管理块快照和空间存储。

我们将velero install使用一些非默认配置选项运行该命令。具体来说,您需要在命令的实际调用中编辑以下每个设置以匹配您的 Spaces 配置:

  • --bucket velero-backups:更改velero-backups值以匹配您的 DigitalOcean Space 的名称。例如,如果您将 Space 称为“backup-bucket”,则该选项将如下所示:--bucket backup-bucket
  • --backup-location-config s3Url=https://nyc3.digitaloceanspaces.com,region=nyc3:更改 URL 和区域以匹配您的空间设置。具体来说,编辑这两个nyc3部分以匹配您的空间所在的区域。例如,如果您的空间托管在该fra1地区,则该行将如下所示:对于区域标识符是:,和--backup-location-config s3Url=https://fra1.digitaloceanspaces.com,region=fra1nyc3sfo2sgp1fra1

一旦您准备好适当的存储桶和备份位置设置,就可以安装 Velero。运行以下命令,根据需要替换您的值:

  • velero install \
  • --provider velero.io/aws \
  • --bucket velero-backups \
  • --plugins velero/velero-plugin-for-aws:v1.0.0,digitalocean/velero-plugin:v1.0.0 \
  • --backup-location-config s3Url=https://nyc3.digitaloceanspaces.com,region=nyc3 \
  • --use-volume-snapshots=false \
  • --secret-file ./examples/cloud-credentials

您应该看到以下输出:

Output
CustomResourceDefinition/backups.velero.io: attempting to create resource CustomResourceDefinition/backups.velero.io: created CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource CustomResourceDefinition/backupstoragelocations.velero.io: created CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource CustomResourceDefinition/deletebackuprequests.velero.io: created CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource CustomResourceDefinition/downloadrequests.velero.io: created CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource CustomResourceDefinition/podvolumebackups.velero.io: created CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource CustomResourceDefinition/podvolumerestores.velero.io: created CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource CustomResourceDefinition/resticrepositories.velero.io: created CustomResourceDefinition/restores.velero.io: attempting to create resource CustomResourceDefinition/restores.velero.io: created CustomResourceDefinition/schedules.velero.io: attempting to create resource CustomResourceDefinition/schedules.velero.io: created CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource CustomResourceDefinition/serverstatusrequests.velero.io: created CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource CustomResourceDefinition/volumesnapshotlocations.velero.io: created Waiting for resources to be ready in cluster... Namespace/velero: attempting to create resource Namespace/velero: created ClusterRoleBinding/velero: attempting to create resource ClusterRoleBinding/velero: created ServiceAccount/velero: attempting to create resource ServiceAccount/velero: created Secret/cloud-credentials: attempting to create resource Secret/cloud-credentials: created BackupStorageLocation/default: attempting to create resource BackupStorageLocation/default: created Deployment/velero: attempting to create resource Deployment/velero: created Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.

您可以使用kubectl输出中命令查看部署日志部署准备就绪后,您可以继续下一步,即配置服务器。成功的部署将如下所示(具有不同的 AGE 列):

  • kubectl get deployment/velero --namespace velero
Output
NAME READY UP-TO-DATE AVAILABLE AGE velero 1/1 1 1 2m

此时,您已将 Velero 的服务器组件作为 Deployment 安装到您的 Kubernetes 集群中。您还使用 Kubernetes Secret 向 Velero 注册了您的 Spaces 密钥。

注意:您可以指定kubeconfigvelero命令行工具应与使用--kubeconfig标志。如果不使用此标志,velero将检查KUBECONFIG环境变量,然后回退到kubectl默认值 ( ~/.kube/config)。

第 4 步 – 配置快照

当我们安装 Velero 服务器时,该选项--use-volume-snapshots=false是命令的一部分。由于我们想要拍摄 Kubernetes 集群中底层块存储设备的快照,我们需要告诉 Velero 使用正确的 DigitalOcean 块存储插件。

运行以下命令以启用插件并将其注册为默认快照提供程序:

  • velero snapshot-location create default --provider digitalocean.com/velero

您将看到以下输出:

Output
Snapshot volume location "default" configured successfully.

第 5 步 – 添加 API 令牌

在上一步中,我们在 Velero 服务器中创建了块存储和对象存储对象。我们已经digitalocean/velero-plugin:v1.0.0在服务器上注册了插件,并将我们的 Spaces 密钥安装到集群中。

最后一步是修补cloud-credentials我们之前创建Secret 以使用我们的 DigitalOcean API 令牌。如果没有这个令牌,快照插件将无法通过 DigitalOcean API 进行身份验证。

我们可以使用该kubectl edit命令通过对 API 令牌的引用来修改 Velero 部署对象。但是,手动编辑复杂的 YAML 对象可能既乏味又容易出错。相反,我们将使用该kubectl patch命令,因为 Kubernetes 支持修补对象让我们快速浏览一下我们将应用的补丁文件的内容。

第一个补丁文件是examples/01-velero-secret.patch.yaml您之前编辑文件。它旨在将您的 API 令牌添加到secrets/cloud-credentials已包含您的 Spaces 密钥Secret。cat文件:

  • cat examples/01-velero-secret.patch.yaml

它应该是这样的(用你的令牌代替<DIGITALOCEAN_API_TOKEN>占位符):

示例/01-velero-secret.patch.yaml
. . .
---
apiVersion: v1
kind: Secret
stringData:
  digitalocean_token: <DIGITALOCEAN_API_TOKEN>
type: Opaque

现在让我们看看部署的补丁文件:

  • cat examples/02-velero-deployment.patch.yaml

您应该会看到以下 YAML:

示例/02-velero-deployment.patch.yaml
. . .
---
apiVersion: v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - args:
        - server
        command:
        - /velero
        env:
        - name: DIGITALOCEAN_TOKEN
          valueFrom:
            secretKeyRef:
              key: digitalocean_token
              name: cloud-credentials
        name: velero

这个文件表明我们正在修补一个名为velero. 由于这是一个补丁,我们不需要指定整个 Kubernetes 对象规范或元数据。在这种情况下,Velero 部署已经使用cloud-credentials秘密进行了配置,因为该velero install命令为我们创建了它。所以这个补丁需要做的就是digitalocean_token在已经部署的 Velero Pod 中注册一个环境变量。

让我们使用以下kubectl patch命令应用第一个 Secret 补丁

  • kubectl patch secret/cloud-credentials -p "$(cat examples/01-velero-secret.patch.yaml)" --namespace velero

您应该看到以下输出:

Output
secret/cloud-credentials patched

最后,我们将修补部署。运行以下命令:

  • kubectl patch deployment/velero -p "$(cat examples/02-velero-deployment.patch.yaml)" --namespace velero

如果补丁成功,您将看到以下内容:

Output
deployment.apps/velero patched

让我们验证修补的 Deployment 是否kubectl getvelero命名空间工作

  • kubectl get deployment/velero --namespace velero

您应该看到以下输出:

Output
NAME READY UP-TO-DATE AVAILABLE AGE velero 1/1 1 1 12s

此时,Velero 正在运行并完全配置好,准备将您的 Kubernetes 集群对象和持久卷备份和恢复到 DigitalOcean 空间和块存储。

在下一节中,我们将运行一个快速测试,以确保备份和恢复功能按预期工作。

步骤 6 — 测试备份和恢复过程

现在我们已经成功安装和配置了 Velero,我们可以创建一个测试 Nginx 部署,具有持久卷和服务。一旦部署运行,我们将运行备份和恢复练习,以确保 Velero 已配置并正常工作。

确保您仍在/tmp/velero-plugin-1.0.0目录中工作examples目录包含一个名为nginx-example.yaml.

使用您选择的编辑器打开此文件:

  • nano examples/nginx-example.yaml

您应该看到以下文本:

Output
. . . --- apiVersion: v1 kind: Namespace metadata: name: nginx-example labels: app: nginx --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nginx-logs namespace: nginx-example labels: app: nginx spec: storageClassName: do-block-storage accessModes: - ReadWriteOnce resources: requests: storage: 5Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy namespace: nginx-example labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: volumes: - name: nginx-logs persistentVolumeClaim: claimName: nginx-logs containers: - image: nginx:stable name: nginx ports: - containerPort: 80 volumeMounts: - mountPath: "/var/log/nginx" name: nginx-logs readOnly: false --- apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx-svc namespace: nginx-example spec: ports: - port: 80 targetPort: 80 selector: app: nginx type: LoadBalancer

在此文件中,我们观察了以下规范:

  • 一个名为的 Nginx 命名空间 nginx-example
  • nginx:stable容器镜像的单个副本组成的 Nginx 部署
  • nginx-logs使用do-block-storageStorageClass 的5Gi 持久卷声明(称为
  • LoadBalancer暴露端口服务80

使用kubectl apply以下方法创建对象

  • kubectl apply -f examples/nginx-example.yaml

您应该看到以下输出:

Output
namespace/nginx-example created persistentvolumeclaim/nginx-logs created deployment.apps/nginx-deploy created service/nginx-svc created

检查部署是否成功:

  • kubectl get deployments --namespace=nginx-example

您应该看到以下输出:

Output
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 1/1 1 1 1m23s

一旦Available达到 1,使用以下命令获取 Nginx 负载均衡器的外部 IP kubectl get

  • kubectl get services --namespace=nginx-example

你应该看到内部CLUSTER-IPEXTERNAL-IPmy-nginx服务:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc LoadBalancer 10.245.147.61 159.203.48.191 80:30232/TCP 3m1s

记下EXTERNAL-IP并使用 Web 浏览器导航到它。

您应该会看到以下 NGINX 欢迎页面:

Nginx 欢迎页面

这表明您的 Nginx 部署和服务已启动并正在运行。

在我们模拟灾难场景之前,让我们首先检查 Nginx 访问日志(存储在附加到 Nginx Pod 的 Persistent Volume 上):

使用kubectl get以下命令获取 Pod 的名称

  • kubectl get pods --namespace nginx-example
Output
NAME READY STATUS RESTARTS AGE nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 4m14s

现在,exec进入正在运行的 Nginx 容器以获取其中的 shell:

  • kubectl exec -it nginx-deploy-694c85cdc8-vknsk --namespace nginx-example -- /bin/bash

进入 Nginx 容器后,catNginx 访问日志:

  • cat /var/log/nginx/access.log

您应该会看到一些 Nginx 访问条目:

Output
10.244.0.119 - - [03/Jan/2020:04:43:04 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-" 10.244.0.119 - - [03/Jan/2020:04:43:04 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-"

记下这些(尤其是时间戳),因为我们将使用它们来确认恢复过程是否成功。退出吊舱:

  • exit

我们现在可以执行备份过程,将所有nginxKubernetes 对象复制到 Spaces,并拍摄我们在部署 Nginx 时创建的持久卷的快照。

我们将创建一个nginx-backup使用velero命令行客户端调用的备份

  • velero backup create nginx-backup --selector app=nginx

--selector app=nginx指示Velero服务器将只备份Kubernetes与对象app=nginx标签选择器。

您应该看到以下输出:

Output
Backup request "nginx-backup" submitted successfully. Run `velero backup describe nginx-backup` or `velero backup logs nginx-backup` for more details.

运行velero backup describe nginx-backup --details应在短暂延迟后提供以下输出:

Output
Name: nginx-backup Namespace: velero Labels: velero.io/backup=nginx-backup velero.io/pv=pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca velero.io/storage-location=default Annotations: <none> Phase: Completed Namespaces: Included: * Excluded: <none> Resources: Included: * Excluded: <none> Cluster-scoped: auto Label selector: app=nginx Storage Location: default Snapshot PVs: auto TTL: 720h0m0s Hooks: <none> Backup Format Version: 1 Started: 2020-01-02 23:45:30 -0500 EST Completed: 2020-01-02 23:45:34 -0500 EST Expiration: 2020-02-01 23:45:30 -0500 EST Resource List: apps/v1/Deployment: - nginx-example/nginx-deploy apps/v1/ReplicaSet: - nginx-example/nginx-deploy-694c85cdc8 v1/Endpoints: - nginx-example/nginx-svc v1/Namespace: - nginx-example v1/PersistentVolume: - pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca v1/PersistentVolumeClaim: - nginx-example/nginx-logs v1/Pod: - nginx-example/nginx-deploy-694c85cdc8-vknsk v1/Service: - nginx-example/nginx-svc Persistent Volumes: pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca: Snapshot ID: dfe866cc-2de3-11ea-9ec0-0a58ac14e075 Type: ext4 Availability Zone: IOPS: <N/A>

此输出表明nginx-backup已成功完成。资源列表显示了备份中包含的每个 Kubernetes 对象。最后一部分显示 PersistentVolume 也使用文件系统快照进行备份。

要从 DigitalOcean 云控制面板中进行确认,请导航到包含 Kubernetes 备份文件的空间。

您应该会看到一个名为的新目录,nginx-backup其中包含 Velero 备份文件。

使用左侧导航栏,转至图像,然后转至快照Snapshots 中,导航到Volumes您应该会看到与上述输出中列出的 PVC 相对应的快照。

我们现在可以测试恢复过程。

让我们首先删除nginx-example命名空间。这将删除命名空间中的所有内容,包括负载均衡器和持久卷:

  • kubectl delete namespace nginx-example

验证您无法再在负载均衡器端点访问 Nginx,并且nginx-example部署不再运行:

  • kubectl get deployments --namespace=nginx-example
Output
No resources found in nginx-example namespace.

我们现在可以执行恢复过程,再次使用velero客户端:

  • velero restore create --from-backup nginx-backup

这里我们使用对象create创建一个 Velero对象。Restorenginx-backup

您应该看到以下输出:

Output
  • Restore request "nginx-backup-20200102235032" submitted successfully.
  • Run `velero restore describe nginx-backup-20200102235032` or `velero restore logs nginx-backup-20200102235032` for more details.

检查恢复的 Deployment 的状态:

  • kubectl get deployments --namespace=nginx-example
Output
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 1/1 1 1 58s

检查 Persistent Volume 的创建:

  • kubectl get pvc --namespace=nginx-example
Output
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nginx-logs Bound pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca 5Gi RWO do-block-storage 75s

还原还创建了一个 LoadBalancer。有时会使用新的 IP 地址重新创建服务。您将需要EXTERNAL-IP再次查找地址:

  • kubectl get services --namespace nginx-example
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc LoadBalancer 10.245.15.83 159.203.48.191 80:31217/TCP 97s

再次导航到 Nginx 服务的外部 IP 以确认 Nginx 已启动并正在运行。

最后,检查恢复的 Persistent Volume 上的日志以确认日志历史记录已在恢复后保留。

为此,再次使用kubectl get以下命令获取 Pod 的名称

  • kubectl get pods --namespace nginx-example
Output
NAME READY STATUS RESTARTS AGE nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 2m20s

然后exec进去:

  • kubectl exec -it nginx-deploy-694c85cdc8-vknsk --namespace nginx-example -- /bin/bash

进入 Nginx 容器后,catNginx 访问日志:

  • cat /var/log/nginx/access.log
Output
10.244.0.119 - - [03/Jan/2020:04:43:04 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-" 10.244.0.119 - - [03/Jan/2020:04:43:04 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-"

您应该看到相同的备份前访问尝试(注意时间戳),确认持久卷恢复成功。请注意,如果您在执行还原后访问了 Nginx 登录页面,则日志中可能会有其他尝试。

此时,我们已成功将 Kubernetes 对象备份到 DigitalOcean Spaces,并使用 Block Storage Volume Snapshots 将我们的 Persistent Volumes 备份。我们模拟了一个灾难场景,并恢复了测试 Nginx 应用程序的服务。

结论

在本指南中,我们在基于 DigitalOcean 的 Kubernetes 集群上安装并配置了 Velero Kubernetes 备份工具。我们将该工具配置为将 Kubernetes 对象备份到 DigitalOcean Spaces,并使用 Block Storage Volume Snapshots 备份 Persistent Volumes。

Velero 还可用于安排 Kubernetes 集群的定期备份以进行灾难恢复为此,您可以使用该velero schedule命令。Velero 还可用于将资源从一个集群迁移到另一个集群。

要了解有关 DigitalOcean Spaces 的更多信息,请参阅官方 Spaces 文档要了解有关 Block Storage Volumes 的更多信息,请参阅Block Storage Volume 文档

本教程基于 StackPointCloud 的ark-plugin-digitalocean GitHub 存储库中的 README 构建

觉得文章有用?

点个广告表达一下你的爱意吧 !😁