引言

Velero 是 Kubernetes 集群的一个方便的备份工具,可以将 Kubernetes 对象压缩和备份到对象存储中。 它还使用云提供商的块存储快照特性获取集群的持久卷的快照,然后可以将集群的对象和持久卷恢复到以前的状态。

Digitalocean Velero 插件允许你使用 DigitalOcean 块存储来对你的 Persistent 卷进行快照,而 Spaces 可以备份你的 Kubernetes 对象。 当在 DigitalOcean 上运行一个 Kubernetes 集群时,这允许您快速备份集群的状态,并在灾难发生时恢复它。

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

先决条件

在你开始这个教程之前,你应该有以下可用的东西:

在你本地的电脑上:

  • Kubectl 命令行工具,配置为连接到集群。 您可以在官方的 Kubernetes 文档中阅读关于安装和配置 kubectl 的更多信息。
  • Git 命令行实用程序。 你可以在 Git 入门教程中学习如何安装 Git。

在你的 DigitalOcean 账户中:

  • 一个数码科技库伯内特斯星系团,或库伯内特斯星系团(1.7.5或更高版本)在数码科技飞沫上。
  • 在集群中运行的 DNS 服务器。 如果你使用 DigitalOcean Kubernetes,这是默认运行的。 要了解关于配置 Kubernetes DNS 服务的更多信息,请参考 Kuberentes 官方文档中的自定义 DNS 服务。
  • 一个数码空间,可以存储你备份的库伯内特物品。 要了解如何创建 Space,请参阅 Spaces 产品文档。
  • 数码天地的存取钥匙对。 若要了解如何创建一组访问密钥,请参阅如何管理对空间的管理访问。
  • 一个用于 DigitalOcean API 的个人访问令牌。 若要了解如何创建个人访问令牌,请参阅如何创建个人访问令牌。 确保您创建或使用的令牌具有读 / 写权限或快照将无法工作。

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

第一步ー安装 Velero 客户端

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

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

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

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

  • cd /tmp

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

  • wget https://link_copied_from_release_page

下载完成后,使用 tar 提取 tarball 文件(注意文件名可能因版本和操作系统的不同而有所不同) :

  • 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 中。 要将它添加到 Ubuntu 系统的 PATH 中,只需将它复制到 / usr / local / bin:

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

现在可以配置 Velero 服务器的机密,然后将其部署到您的 Kubernetes 集群。

第二步ー配置秘密

在设置 Velero 的服务器组件之前,你需要准备你的 digitaloceanspaces 键和 API 令牌。 再次使用 cd 命令导航到临时目录 / tmp:

  • cd /tmp

现在我们将下载一个适用于 DigitalOcean 的 Velero 插件。 访问插件的 Github releases 页面,将链接复制到以。 Tar.gz.

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

  • wget https://link_copied_from_release_page

下载完成后,使用 tar 提取 tarball (再次注意,文件名可能因版本不同而有所不同) :

  • tar -xvzf v1.0.0.tar.gz

Tmp 目录现在应该包含解压缩的 velero-plugin-1.0.0目录以及您刚刚下载的 tarball。

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

  • cd velero-plugin-1.0.0

现在,我们可以为我们的数字存储空间和 API 令牌访问密钥使用作为一个库伯内特斯秘密。 首先,使用您喜欢的编辑器打开示例 / 云凭证文件。

  • 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 密钥 id 和 aws secret access 密钥占位符以使用您的数字空间密钥。 一定要删除和字符。

下一步是编辑01-velero-secret。 文件,这样它就包含了你的 DigitalOcean API 令牌。 用你最喜欢的编辑器打开文件:

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

它应该是这样的:

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

更改整个 digitaloceanapi token 占位符以使用你的 DigitalOcean 个人 API 令牌。 这条线应该看起来像数码相机的标记: 18a0d730c0e0... 。 同样,请确保删除和字符。

第三步ー安装 Velero 服务器

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

  • 创建 velero 名称空间。
  • 加上维莱罗服务帐户。
  • 配置以角色为基础的存取控制服务(RBAC)规则以授予 velero 服务帐户权限。
  • 为特定于 velero 的资源安装自定义资源定义(cro) : 备份、计划、恢复、配置。
  • 注册 Velero 插件来管理块快照和空间存储。

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

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

一旦准备好了适当的 bucket 和备份位置设置,就可以安装 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 的服务器组件作为部署安装到了 Kubernetes 集群中。 您还注册您的空间与维莱罗使用库伯内特秘密密钥。

注意: 您可以指定 velero 命令行工具与 -- kubeconfig 标志一起使用的 kubeconfig。 如果你不使用这个标志,velero 将检查 KUBECONFIG 的环境变量,然后退回到 kubectl 默认值(~ / 。 库贝 / 配置)。

步骤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 plugin,并在集群中安装了 Spaces 密钥。

最后一步是修补前面创建的用于使用 DigitalOcean API 令牌的云凭证 Secret。 如果没有这个标记,快照插件将无法通过 DigitalOcean API 进行身份验证。

我们可以使用 kubectl edit 命令通过引用 API 令牌来修改 Velero Deployment 对象。 但是,手工编辑复杂的 YAML 对象可能会非常繁琐并且容易出错。 相反,我们将使用 kubectl 补丁命令,因为 Kubernetes 支持修补对象。 让我们快速浏览一下将要应用的补丁文件的内容。

第一个补丁文件是 examples / 01-velero-secret。 你之前编辑过的文件。 它旨在将您的 API 令牌添加到已经包含您的 Spaces 密钥的 secrets / cloud-credentials Secret 中。 猫的档案:

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

它应该看起来像这样(用你的令牌代替数字 api 令牌占位符) :

examples/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:

examples/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 的 Deployment 的 Pod 规范。 因为这是一个补丁,我们不需要指定一个完整的 Kubernetes 对象规范或元数据。 在这种情况下,已经使用云凭证秘密配置了 Velero Deployment,因为 Velero install 命令为我们创建了它。 所以这个补丁所需要做的就是注册数码环境变量令牌到已经部署的 Velero Pod。

让我们使用 kubectl 补丁命令应用第一个 Secret 补丁:

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

您应该看到以下输出:

Output
secret/cloud-credentials patched

最后,我们将修补 Deployment,运行以下命令:

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

如果补丁成功,你会看到以下内容:

Output
deployment.apps/velero patched

让我们使用 velero 名称空间上的 kubectl get 来验证补丁部署是否正常工作:

  • kubectl get deployment/velero --namespace velero

您应该看到以下输出:

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

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

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

第六步ー测试备份及还原程序

现在我们已经成功地安装和配置了 Velero,我们可以使用 Persistent Volume 和 Service 创建一个测试 Nginx Deployment。 一旦部署正在运行,我们将运行一个备份和恢复演练,以确保 Velero 的配置和工作正常。

确保您仍然在 / tmp / velero-plugin-1.0.0目录中工作。 示例目录包含一个名为 Nginx-example 的示例 Nginx 清单。 亚姆。

使用你选择的编辑器打开这个文件:

  • 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-example 的 Nginx 名称空间
  • 一个 Nginx 部署,包含一个 Nginx: stable 容器映像的副本
  • 使用 do-block-storage StorageClass 的5Gi Persistent Volume Claim (称为 nginx-logs)
  • 公开端口80的 LoadBalancer 服务

使用 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

一旦可用达到1,使用 kubectl get 获取 Nginx 负载均衡器的外部 IP:

  • kubectl get services --namespace=nginx-example

您可以看到 my-nginx 服务的内部 CLUSTER-IP 和 EXTERNAL-IP:

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 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 容器,屏蔽 Nginx 访问日志:

  • 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

我们现在可以执行备份过程,将所有 Nginx Kubernetes 对象复制到 Spaces,并获取部署 Nginx 时创建的 Persistent Volume 的快照。

我们将使用 velero 命令行客户机创建一个名为 nginx-backup 的备份:

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

选择器应用程序 nginx 指示 Velero 服务器只使用应用程序 nginx Label Selector 备份 Kubernetes 对象。

您应该看到以下输出:

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

运行 velero 备份描述了 nginx-backup ——在短时间延迟之后,详细信息应该提供以下输出:

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 云控制面板中进行确认,请导航到包含库伯内茨备份文件的空间。

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

使用左边的导航栏,进入图像,然后快照。 在快照中,导航到卷。 您应该会看到与上面输出中列出的 PVC 对应的快照。

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

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

  • kubectl delete namespace nginx-example

验证您不能再访问负载均衡器端点上的 Nginx,以及 Nginx-example Deployment 不再运行:

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

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

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

在这里,我们使用 create 从 nginx-backup 对象创建 Velero Restore 对象。

您应该看到以下输出:

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.

检查已恢复部署的状态:

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

检查创建持久性卷:

  • 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

然后执行它:

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

一旦进入 Nginx 容器,禁止 Nginx 访问日志:

  • 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 空间,并使用块存储卷快照将持久卷备份到。 我们模拟了一个灾难场景,并恢复了对测试 Nginx 应用程序的服务。

总结

在本指南中,我们在基于 digitalocean 的 Kubernetes 集群上安装并配置了 Velero Kubernetes 备份工具。 我们配置这个工具来备份 Kubernetes 对象到 DigitalOcean 空间,并使用块存储卷快照备份持久卷。

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

要了解更多关于 DigitalOcean Spaces 的信息,请参考官方的 Spaces 文档。 若要了解更多有关块存储卷的信息,请参阅块存储卷文档。

本教程基于 StackPointCloud 的 ark-plugin-digitalocean GitHub repo 中的 README。