介绍
Velero是 Kubernetes 集群的便捷备份工具,可将 Kubernetes 对象压缩并备份到对象存储。它还使用您的云提供商的块存储快照功能为您的集群的 Persistent Volume 拍摄快照,然后可以将您的集群的对象和 Persistent Volume 恢复到以前的状态。
该DigitalOcean Velero插件可以让你用DigitalOcean块存储到快照您持久卷,和空间来备份你的Kubernetes对象。在 DigitalOcean 上运行 Kubernetes 集群时,这允许您快速备份集群的状态并在灾难发生时恢复它。
在本教程中,我们将velero
在本地机器上设置和配置命令行工具,并将服务器组件部署到我们的 Kubernetes 集群中。然后,我们将部署一个使用 Persistent Volume 进行日志记录的示例 Nginx 应用程序,然后模拟灾难恢复场景。
先决条件
在开始本教程之前,您应该准备好以下内容:
在本地计算机上:
- 该
kubectl
命令行工具,配置为连接到群集。您可以kubectl
在官方 Kubernetes 文档 中阅读有关安装和配置的更多信息。 - 该
git
命令行实用程序。您可以git
在 Git 入门 中了解如何安装。
在您的 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
您应该会看到以下帮助输出:
OutputVelero 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
. 要将其添加到PATH
Ubuntu 系统上,只需将其复制到/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
该文件将如下所示:
[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):
Backup
、Schedule
、Restore
、Config
。 -
注册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=fra1
nyc3
sfo2
sgp1
fra1
一旦您准备好适当的存储桶和备份位置设置,就可以安装 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
您应该看到以下输出:
OutputCustomResourceDefinition/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
OutputNAME READY UP-TO-DATE AVAILABLE AGE
velero 1/1 1 1 2m
此时,您已将 Velero 的服务器组件作为 Deployment 安装到您的 Kubernetes 集群中。您还使用 Kubernetes Secret 向 Velero 注册了您的 Spaces 密钥。
注意:您可以指定kubeconfig
的velero
命令行工具应与使用--kubeconfig
标志。如果不使用此标志,velero
将检查KUBECONFIG
环境变量,然后回退到kubectl
默认值 ( ~/.kube/config
)。
第 4 步 – 配置快照
当我们安装 Velero 服务器时,该选项--use-volume-snapshots=false
是命令的一部分。由于我们想要拍摄 Kubernetes 集群中底层块存储设备的快照,我们需要告诉 Velero 使用正确的 DigitalOcean 块存储插件。
运行以下命令以启用插件并将其注册为默认快照提供程序:
- velero snapshot-location create default --provider digitalocean.com/velero
您将看到以下输出:
OutputSnapshot 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>
占位符):
. . .
---
apiVersion: v1
kind: Secret
stringData:
digitalocean_token: <DIGITALOCEAN_API_TOKEN>
type: Opaque
现在让我们看看部署的补丁文件:
- cat examples/02-velero-deployment.patch.yaml
您应该会看到以下 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
您应该看到以下输出:
Outputsecret/cloud-credentials patched
最后,我们将修补部署。运行以下命令:
- kubectl patch deployment/velero -p "$(cat examples/02-velero-deployment.patch.yaml)" --namespace velero
如果补丁成功,您将看到以下内容:
Outputdeployment.apps/velero patched
让我们验证修补的 Deployment 是否kubectl get
在velero
命名空间上工作:
- kubectl get deployment/velero --namespace velero
您应该看到以下输出:
OutputNAME 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-storage
StorageClass 的5Gi 持久卷声明(称为)LoadBalancer
暴露端口的服务80
使用kubectl apply
以下方法创建对象:
- kubectl apply -f examples/nginx-example.yaml
您应该看到以下输出:
Outputnamespace/nginx-example created
persistentvolumeclaim/nginx-logs created
deployment.apps/nginx-deploy created
service/nginx-svc created
检查部署是否成功:
- kubectl get deployments --namespace=nginx-example
您应该看到以下输出:
OutputNAME 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-IP
和EXTERNAL-IP
为my-nginx
服务:
OutputNAME 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
OutputNAME 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 容器后,cat
Nginx 访问日志:
- cat /var/log/nginx/access.log
您应该会看到一些 Nginx 访问条目:
Output10.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 时创建的持久卷的快照。
我们将创建一个nginx-backup
使用velero
命令行客户端调用的备份:
- velero backup create nginx-backup --selector app=nginx
该--selector app=nginx
指示Velero服务器将只备份Kubernetes与对象app=nginx
标签选择器。
您应该看到以下输出:
OutputBackup 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
应在短暂延迟后提供以下输出:
OutputName: 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
OutputNo resources found in nginx-example namespace.
我们现在可以执行恢复过程,再次使用velero
客户端:
- velero restore create --from-backup nginx-backup
这里我们使用从对象create
创建一个 Velero对象。Restore
nginx-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
OutputNAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 58s
检查 Persistent Volume 的创建:
- kubectl get pvc --namespace=nginx-example
OutputNAME 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
OutputNAME 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
OutputNAME 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 容器后,cat
Nginx 访问日志:
- cat /var/log/nginx/access.log
Output10.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 构建。