众所周知,Kubernetes可以协调连接在一起,作为一个工作单元,形成高可用性的计算机集群。Kubernetes包含许多抽象概念,这些抽象概念允许将容器化的应用程序部署到集群中,而无需将它们附加到单独的机器上。
简而言之,Kubernetes拥有以下特性:
- 便携式:公有、私有、混合、多云
- 可扩展:模块化、可插拔、可挂钩、可组合
- 自我修复:自动放置、自动重启、自动复制、自动缩放
在本文中,我们将介绍如何使用Velero开源工具备份和还原Kubernetes集群资源和持久卷的步骤。
第一节 为什么要备份?
首先,让我们了解您需要使用备份的典型方案,如果从灾难中恢复,则可以减少恢复时间。Kubernetes 资源从一个集群迁移到另一个集群或更高版本的 Kubernetes ,需要复制环境以进行调试、开发等。
现在我们已经清楚了为什么需要备份了,接下来我们可以检查要备份的对象列表。
要备份什么?Kubernetes资源存储在etcd存储中。etcd是一个一致且高度可用的键值存储,用作所有集群数据的 Kubernetes 的后备存储。您可以在官方文档中找到有关 etcd 的详细信息。集群中运行的有状态应用程序的应用程序数据,即持久卷。
第二节 Velero如何运作
Velero( 以前称为Heptio Ark )为您提供了备份和还原 Kubernetes 集群资源和持久卷的工具。
Velero包含:
- Ivacy VPN
- 在集群上运行的服务器
- 在本地运行的命令行客户端
每个Velero操作(例如:按需备份、计划备份、还原等)都是自定义资源,使用Kubernetes自定义资源(CRD)定义并存储在etcd存储中。
当你运行命令 velero backup create test-backup:时。
1.Velero客户端调用Kubernetes API服务器以创建一个 Backup 对象。
2.BackupController 看起来像一个新的 Backup 对象并执行验证。
3.BackupController 开始备份操作。它通过查询API服务器以获取资源来收集数据以进行备份。
4.BackupController 调用对象存储服务(例如AWS S3)以上传备份文件。
在下一节中,我们将介绍有关如何备份和还原Kubernetes集群资源和持久卷的步骤。
第三节 先决条件
以下是此快速入门所需的先决条件:
1.具有Kubernetes最新稳定版本的集群
2.Kubectl CLI
在安装之前,请检查我们是否具有正确的Kubernetes版本。
步骤#1 下载Velero
使用以下命令下载最新版本的Velero:
curl -LO https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
使用Linux或者其他平台的朋友,请参见发行页面的说明。
解压缩下载文件并将velero可执行文件移至/ usr / local / bin或您的路径。
在您的本地目录中创建特定于Velero的凭证文件(credentials-velero
)。
echo "[default]
aws_access_key_id = minio
aws_secret_access_key = minio123" > credentials-velero
Velero需要合适的存储提供商来存储备份和快照数据,在本演示中,我们将使用Minio,这是一个在本地集群上运行的S3兼容存储服务,Minio实例将使用上述凭据。
现在我们已经准备好凭据和群集,接下来就可以安装Velero服务器了。
步骤#2 安装Velero服务器
在以下步骤中,我们将启动服务器和本地存储服务。在Velero文件夹中,运行以下命令:
使用以下命令配置本地存储服务:
kubectl apply -f examples/minio/00-minio-deployment.yaml
使用以下命令启动Velero服务器:
velero install \
--provider aws \
--bucket velero \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc:9000
现在,我们假设Velero在本地集群中运行,而没有能够提供快照的卷。
检查是否成功创建部署了Velero。
步骤#3 部署示例应用程序
下一步是使用以下命令在集群上部署示例nginx应用程序:
kubectl apply -f velero/examples/nginx-app/base.yaml
检查是否成功创建了示例应用程序部署。
步骤#4 备份
现在,我们将为与 app = nginx 标签选择器匹配的任何对象创建备份:
velero backup create nginx-backup --selector app=nginx
如果要备份除匹配标签的对象以外的所有对象,则可以使用“ backup notin(ignore)”选项。
还有一些选项可用于基于 cron 表达式创建备份计划。
要验证备份是否已完成,请使用 describe 命令,如下所示:
velero backup describe nginx-backup
现在我们已经完成了备份操作,为了测试还原操作,我们将删除命名空间。
验证是否删除了 nginx 服务和部署:
通常需要几分钟才能完全清理名称空间。
步骤#5 Restore
要列出我们创建的备份,请使用以下命令:
velero restore get
要恢复我们创建的备份,请使用以下命令:
velero restore create --from-backup nginx-backup
还原完成后,您可以检查还原的部署是否返回名称空间:
如果在还原操作过程中出现错误或警告,则可以使用以下命令检查详细信息:
velero restore describe <RESTORE_NAME>
恭喜! 我们已经成功进行了备份和还原。
如果由于某些限制而无法使用Velero,则可以始终使用 Kubectl CLI 从现有 Kubernetes 集群中导出资源定义,然后将其应用于目标集群。
以下是导出对象的命令。
kubectl get deployment -o=yaml --export > deployments.yaml
第四节 局限性
以下是Velero的已知限制:
- Velero当前每个提供商都支持一套凭据。 尚无法在不同的位置使用不同的凭据。
- 卷快照受提供程序创建快照位置限制。 例如,AWS和Azure不允许您在不同卷所在区域中创建卷快照。
- 每个Velero备份每个卷都有一个BackupStorageLocation和一个VolumeSnapshotLocation。无法将单个 Velero 备份同时发送到多个备份存储位置,也不能将单个卷快照同时发送到多个位置。
- 不支持跨提供商快照。