Velero 系列文章(一):基础

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Velero 系列文章(一):基础

概述

image.png Velero

Velero 是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷。

灾难恢复

Velero 可以在基础架构丢失,数据损坏和 / 或服务中断的情况下,减少恢复时间。

数据迁移

Velero 通过轻松地将 Kubernetes 资源从一个集群迁移到另一个集群来实现集群可移植性

数据保护

提供关键数据保护功能,例如定时计划的备份,保留计划以及自定义操作的备份前或备份后钩子。

备份集群

使用 namespace resources 或 label selector 备份整个集群或部分集群的 Kubernetes 资源和卷。

定期备份

设置计划以定期间隔自动启动备份。

备份钩子

配置备份前和备份后钩子,以在 Velero 备份之前和之后执行自定义操作。

安装 - 基本安装

前提

  • 在启用 DNS 和容器联网的情况下访问 Kubernetes 集群 v1.16 或更高版本。
  • kubectl本地安装

Velero 使用对象存储来存储备份和关联的工件。 它还可以选择与受支持的块存储系统集成,以对您的持久卷进行快照。 在开始安装过程之前,您应该从 兼容的提供程序列表 中识别将要使用的对象存储提供程序和可选的块存储提供程序。

Velero 支持云提供商环境和本地环境的存储提供商。 有关内部部署方案的更多详细信息,请参见 内部部署文档

安装 CLI

  1. 下载适用于您的客户端平台的 最新版本 的 tarball。
  2. 解压 tarball: tar -xvf <RELEASE-TARBALL-NAME>.tar.gz
  3. 将解压后的 velero 放到$PATH(一般是/usr/local/bin)

安装配置 server 端组件

有两种支持的方法来安装 Velero 服务器组件:

Velero 使用存储提供程序插件与各种存储系统集成,以支持备份和快照操作。 安装和配置 Velero 服务器组件以及相应插件的步骤特定于您选择的存储提供商。 要查找您选择的存储提供商的安装说明,请在 支持的存储提供商 页面上访问提供商的文档链接。

📝 注意:

如果您的对象存储提供程序与卷快照提供程序不同,请首先按照对象存储提供程序的安装说明进行操作,然后返回此处并按照说明添加 卷快照提供程序

命令行自动补全

https://velero.io/docs/v1.8/customize-installation/#enabling-shell-autocompletion

安装 - 定制化安装

https://velero.io/docs/v1.8/customize-installation/

安装 - 提供商

Velero 支持各种存储提供程序,以进行不同的备份和快照操作。 Velero 有一个插件系统,它允许任何人在不修改 Velero 代码库的情况下增加对其他备份和卷存储平台的兼容性。

Velero 支持的提供商

提供商 对象存储 卷快照 插件提供商 Repo 安装说明
Amazon Web Services (AWS) AWS S3 AWS EBS Velero plugin for AWS AWS Plugin Setup
Google Cloud Platform (GCP) Google Cloud Storage Google Compute Engine Disks Velero plugin for GCP GCP Plugin Setup
Microsoft Azure Azure Blob Storage Azure Managed Disks Velero plugin for Microsoft Azure Azure Plugin Setup
VMware vSphere 🚫 vSphere Volumes VMware vSphere vSphere Plugin Setup
Container Storage Interface (CSI) 🚫 CSI Volumes Velero plugin for CSI CSI Plugin Setup

社区支持的提供商

Provider Object Store Volume Snapshotter Plugin Documentation Contact
AlibabaCloud Alibaba Cloud OSS Alibaba Cloud AlibabaCloud GitHub Issue
DigitalOcean DigitalOcean Object Storage DigitalOcean Volumes Block Storage StackPointCloud
Hewlett Packard 🚫 HPE Storage Hewlett Packard Slack, GitHub Issue
OpenEBS 🚫 OpenEBS CStor Volume OpenEBS Slack, GitHub Issue
OpenStack Swift Cinder OpenStack GitHub Issue
Portworx 🚫 Portworx Volume Portworx Slack, GitHub Issue
Storj Storj Object Storage 🚫 Storj GitHub Issue

与 s3 兼容的对象存储提供程序

Velero 的 AWS Object Store 插件使用 Amazon 的 Go SDK 连接到 AWS S3 API。 一些第三方存储提供程序也支持 S3 API,并且用户报告了以下提供程序可用于 Velero:

📝 请注意,Velero 团队并未定期测试这些存储提供商。

某些存储提供程序(例如 Quobyte)可能需要不同的签名算法版本。

安装 - 快速验证安装

  1. 在您的本地目录中创建特定于 Velero 的凭证文件(credentials-velero):
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
PROPERTIES
  1. 启动服务器和存储服务。 在 Velero 目录中,运行:
oc apply -f examples/minio/00-minio-deployment.yaml
velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.4.1 \
    --bucket velero \
    --secret-file ./credentials-velero \
    --use-volume-snapshots=false \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc:9000 
SHELL
  1. 此示例假定它在本地群集中运行,而没有能够提供快照的卷提供程序,因此不会创建 VolumeSnapshotLocation(``–use-volume-snapshots=false`)。
    此外,您可以指定 --use-restic 启用 RESTIC 支持,并指定 --wait 等待部署准备就绪。
    对于更复杂的安装需求,请使用 Helm Chart,或添加 --dry-run -o yaml 选项来生成安装的 YAML 文件。

创建的内容包括:

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: already exists, proceeding
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.
STYLUS

备份

  1. 为与app=iperf3-serverlabel selector 匹配的任何对象创建备份:
velero backup create test-backup --selector app=iperf3-server
SHELL
  1. 或者,如果要备份除匹配标签 backup=ignore 的对象以外的所有对象,请执行以下操作:
velero backup create nginx-backup --selector 'backup!=ignore'
SHELL
  1. (可选)使用app=iperf3-serverlabel selector 基于 cron 表达式创建定期计划的备份:
velero schedule create test-daily --schedule="0 1 * * *" --selector app=iperf3-server
SHELL
  1. 另外,您可以使用一些非标准的速记 cron 表达式:
velero schedule create test-daily --schedule="@every 24h" --selector app=iperf3-server
SHELL
  1. 有关更多用法示例,请参见 cron 软件包 的文档。

恢复

  1. 运行:
velero restore create --from-backup test-backup
SHELL
  1. 运行:
velero restore get
SHELL
  1. 恢复完成后,输出如下所示:
NAME                          BACKUP         STATUS      WARNINGS   ERRORS    CREATED                         SELECTOR
nginx-backup-20170727200524   nginx-backup   Completed   0          0         2017-07-27 20:05:24 +0000 UTC   <none>
APACHE

如果有错误或警告,则可以详细查看它们:

velero restore describe <RESTORE_NAME>
SHELL

清理

如果要删除创建的所有备份,包括对象存储中的数据和永久卷快照,则可以运行:

velero backup delete BACKUP_NAME
SHELL

这要求 Velero 服务器删除与 BACKUP_NAME 相关联的所有备份数据。 您需要对要永久删除的每个备份执行此操作。 Velero 的未来版本将允许您通过名称或 label selector 删除多个备份。

要从 Kubernetes 集群中完全卸载 Velero:

oc delete namespace/velero clusterrolebinding/velero
oc delete crds -l component=velero
SHELL

安装 - Restic 集成

Velero 支持使用称为 restic 的免费开源备份工具备份和还原 Kubernetes 卷。 此支持被视为 Beta 质量。 请查看 限制 列表,以了解它是否适合您的用例。

添加了 Restic 集成,为您提供了一个现成的解决方案,用于备份和还原几乎任何类型的 Kubernetes 卷。 这种集成是 Velero 功能的补充,而不是现有功能的替代。 但是,如果您需要为存储平台使用卷快照插件,或者使用的是 EFS,AzureFile,NFS,emptyDir,local 或任何其他没有本机快照概念的卷类型,restic 可能适合您 。

Restic 并不局限于特定的存储平台,这意味着该集成还为将来实现跨卷类型数据迁移的工作铺平了道路。

🐾 注意:

不支持 hostPath 卷,但是支持 本地卷类型

安装 restic

前提

安装 restic

要安装 restic,请使用 velero install 命令中的 --use-restic 标志。 有关安装命令的其他标志的更多详细信息,请参见 安装概述

velero install --use-restic
SHELL

在不支持快照的 Velero 支持的存储提供程序上使用 Restic 时,--use-volume-snapshots = false 标志可防止在安装时创建未使用的VolumeSnapshotLocation

配置 Restic DaemonSet Spec

安装后,某些基于 Kubernetes 的 PaaS / CaaS 平台也需要修改 Restic DaemonSet 规范。 仅当您在 RancherOS,OpenShift,VMware Tanzu Kubernetes Grid Integrated Edition(以前称为 VMware Enterprise PKS)或 Micrsoft Azure 上安装时,才需要本节中的步骤。

OpenShift

要将正确的主机路径安装到 Pod 卷,请在 privileged 模式下运行 Restic Pod。

  1. velero ServiceAccount 添加到privilegedSCC:
$ oc adm policy add-scc-to-user privileged -z velero -n velero
SHELL
  1. 对于 OpenShift 版本 > = 4.1,修改 DaemonSet yaml 以请求 privileged 模式:
@@ -67,3 +67,5 @@ spec:
              value: /credentials/cloud
            - name: VELERO_SCRATCH_DIR
              value: /scratch
+          securityContext:
+            privileged: true
YAML
  1. 或:
oc patch ds/restic \
  --namespace velero \
  --type json \
  -p '[{"op":"add","path":"/spec/template/spec/containers/0/securityContext","value": { "privileged": true}}]'
SHELL

如果 restic 不在特权模式下运行,则由于主机系统级别配置了默认的强制实施 SELinux 模式,它将无法访问已挂载的 hostpath 目录内的 pod 卷。 您可以 创建自定义 SCC 来放松群集中的安全性,以便允许 Restic Pod 使用 hostPath 卷插件,而无需授予它们访问privilegedSCC 的权限。

默认情况下,用户维度的 openshift 名称空间不会在集群中的所有节点上调度 Pod。

要在所有节点上计划名称空间,需要一个注释:

oc annotate namespace <velero namespace> openshift.io/node-selector=""
SHELL

这应该在安装 velero 之前完成。

或需要删除并重新创建 ds:

oc get ds restic -o yaml -n <velero namespace> > ds.yaml
oc annotate namespace <velero namespace> openshift.io/node-selector=""
oc create -n <velero namespace> -f ds.yaml
SHELL

备份

Velero 支持发现需要使用 Restic 备份的 Pod 卷的两种方法:

  • 选择性启用方式:每个包含要使用 Restic 备份的卷的 Pod 都必须标有卷的名称。
  • 选择性退出方式:使用 Restic 备份所有 Pod 卷,并具有退出任何不应备份的卷的功能。

以下各节提供了有关这两种方法的更多详细信息。

选择性退出方式

在这种方法中,Velero 将使用 restic 备份所有 pod 卷,但以下情况除外:

  • 安装默认服务帐户令牌,kubernetes secrets 和 config maps 的卷
  • Hostpath 卷

使用 pod 上的 backup.velero.io/backup-volumes-excludes 注释可以排除卷不被备份的情况。

使用此方法进行备份的说明如下:

  1. 在包含不应使用 Restic 备份的卷的每个 Pod 上运行以下命令
kubectl -n YOUR_POD_NAMESPACE annotate pod/YOUR_POD_NAME backup.velero.io/backup-volumes-excludes=YOUR_VOLUME_NAME_1,YOUR_VOLUME_NAME_2,...
SHELL
  1. 其中,卷名是容器规范中卷的名称。
    例如,在以下 pod 中:
apiVersion: v1
kind: Pod
metadata:
  name: app1
  namespace: sample
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-webserver
    volumeMounts:
    - name: pvc1-vm
      mountPath: /volume-1
    - name: pvc2-vm
      mountPath: /volume-2
  volumes:
  - name: pvc1-vm
    persistentVolumeClaim:
      claimName: pvc1
  - name: pvc2-vm
      claimName: pvc2
YAML
  1. 要排除卷 pvc1-vm 的 Restic 备份,应运行:
kubectl -n sample annotate pod/app1 backup.velero.io/backup-volumes-excludes=pvc1-vm
SHELL
  1. 进行 Velero 备份:
velero backup create BACKUP_NAME --default-volumes-to-restic OTHER_OPTIONS
SHELL
  1. 以上步骤在每个备份的基础上使用了选择性退出方法。
    或者,可以在运行带有 --default-volumes-to-restic 标志的velero install 命令的所有 velero 备份上启用此行为。 有关详细信息,请参阅 安装概述
  2. 备份完成后,查看有关备份的信息:
velero backup describe YOUR_BACKUP_NAME
kubectl -n velero get podvolumebackups -l velero.io/backup-name=YOUR_BACKUP_NAME -o yaml
SHELL

选择性启用方式

默认情况下,Velero 使用这种方法来发现需要使用 Restic 备份的 Pod 卷,其中每个包含要使用 Restic 备份的卷的 Pod 都必须标有该卷的名称。

使用此方法进行备份的说明如下:

  1. 对包含要备份的卷的每个 Pod 运行以下命令:
kubectl -n YOUR_POD_NAMESPACE annotate pod/YOUR_POD_NAME backup.velero.io/backup-volumes=YOUR_VOLUME_NAME_1,YOUR_VOLUME_NAME_2,...
SHELL
  1. 其中,卷名是容器 spec 中卷的名称。
    例如,对于以下 pod:
apiVersion: v1
kind: Pod
metadata:
  name: sample
  namespace: foo
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-webserver
    volumeMounts:
    - name: pvc-volume
      mountPath: /volume-1
    - name: emptydir-volume
      mountPath: /volume-2
  volumes:
  - name: pvc-volume
    persistentVolumeClaim:
      claimName: test-volume-claim
  - name: emptydir-volume
    emptyDir: {}
YAML
  1. 你应该运行:
kubectl -n foo annotate pod/sample backup.velero.io/backup-volumes=pvc-volume,emptydir-volume
SHELL
  1. 如果您使用控制器来管理您的 pods,则也可以在 pod template spec 中提供此批注。
  2. 做一个 Velero 备份
velero backup create NAME OPTIONS...
SHELL
  1. 备份完成后,查看有关备份的信息:
velero backup describe YOUR_BACKUP_NAME
kubectl -n velero get podvolumebackups -l velero.io/backup-name=YOUR_BACKUP_NAME -o yaml
SHELL

恢复

无论如何使用 Restic 发现卷以进行备份,还原过程均保持不变。

  1. 从 Velero 备份中还原:
velero restore create --from-backup BACKUP_NAME OPTIONS...
SHELL
  1. 还原完成后,查看有关 Pod 卷还原的信息:
velero restore describe YOUR_RESTORE_NAME
kubectl -n velero get podvolumerestores -l velero.io/restore-name=YOUR_RESTORE_NAME -o yaml
SHELL

限制

  • 不支持 hostPath 卷。 支持 本地持久卷
  • 熟悉 restic 的人可能知道它会加密所有数据。 Velero 对它创建的所有 Restic 存储库使用静态通用加密密钥。 这意味着有权访问您的存储桶的任何人都可以解密您的还原备份数据。 确保适当限制对 Restic 桶的访问。
  • 跨 PVC 的 pod 重新安排将维护增量备份链。 但是,对于非 PVC 的 pod 卷(例如emptyDir 卷),当删除 / 重新创建 pod(例如,通过 ReplicaSet / Deployment)时,这些卷的下一次备份将是完整的而不是增量的,因为 pod 卷的是 假定生命周期由其 pod 定义。
  • Restic 在单个线程中扫描每个文件。 这意味着大文件(例如存储数据库的文件)将花费很长时间扫描重复数据删除,即使实际差异很小。
  • 如果您打算使用 Velero Restic 集成来备份 100GB 或更多的数据,则可能需要 自定义资源限制 以确保备份成功完成。
  • Velero 的 Restic 集成通过访问运行 Pod 的节点文件系统来备份卷中的数据。 因此,RESTIC 集成只能备份由 Pod 挂载的卷,而不能直接从 PVC 备份。

自定义还原助手容器

Velero 在执行 Restic 还原时使用辅助初始化容器。 默认情况下,此容器的镜像是velero/velero-restic-restore-helper:<VERSION> ,其中VERSION 与主 Velero 镜像的版本 / 标签匹配。 您可以通过在 Velero 命名空间中创建带有备用镜像的 ConfigMap,来定制用于此帮助程序的镜像。

ConfigMap 必须如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  # any name can be used; Velero uses the labels (below)
  # to identify it rather than the name
  name: restic-restore-action-config
  # must be in the velero namespace
  namespace: velero
  # the below labels should be used verbatim in your
  # ConfigMap.
  labels:
    # this value-less label identifies the ConfigMap as
    # config for a plugin (i.e. the built-in restic restore
    # item action plugin)
    velero.io/plugin-config: ""
    # this label identifies the name and kind of plugin
    # that this ConfigMap is for.
    velero.io/restic: RestoreItemAction
data:
  # The value for "image" can either include a tag or not;
  # if the tag is *not* included, the tag from the main Velero
  # image will automatically be used.
  image: myregistry.io/my-custom-helper-image[:OPTIONAL_TAG]
  # "cpuRequest" sets the request.cpu value on the restic init containers during restore.
  # If not set, it will default to "100m". A value of "0" is treated as unbounded.
  cpuRequest: 200m
  # "memRequest" sets the request.memory value on the restic init containers during restore.
  # If not set, it will default to "128Mi". A value of "0" is treated as unbounded.
  memRequest: 128Mi
  # "cpuLimit" sets the request.cpu value on the restic init containers during restore.
  # If not set, it will default to "100m". A value of "0" is treated as unbounded.
  cpuLimit: 200m
  # "memLimit" sets the request.memory value on the restic init containers during restore.
  # If not set, it will default to "128Mi". A value of "0" is treated as unbounded.
  memLimit: 128Mi
  # "secCtxRunAsUser sets the securityContext.runAsUser value on the restic init containers during restore."
  secCtxRunAsUser: 1001
  # "secCtxRunAsGroup sets the securityContext.runAsGroup value on the restic init containers during restore."
  secCtxRunAsGroup: 999
YAML

备份和还原如何与 Restic 一起工作

Velero 具有三个自定义资源定义和关联的控制器:

  • ResticRepository - 代表 / 管理 Velero Restic 储存库 的生命周期。 当请求第一个名称空间的 Restic 备份时,Velero 将为每个名称空间创建一个 Restic 存储库。 此自定义资源的控制器执行 restic 存储库生命周期命令– restic initrestic checkrestic prune
    您可以通过运行velero restic repo get 来查看有关 Velero Restic 存储库的信息。
  • PodVolumeBackup - 表示容器中卷的静态备份。当找到带注释的 pod 时,主要的 Velero 备份过程会创建一个或多个 PodVolumeBackup 。群集中的每个节点都为此资源(在 daemonset 中)运行一个控制器,该控制器处理该节点上的 Pod 的PodVolumeBackups 。 控制器执行restic backup 命令以备份 pod 卷数据。
  • PodVolumeRestore - 表示 pod volume 的恢复。 当遇到具有关联的 Restic 备份的 Pod 时,主要的 Velero 还原过程会创建其中的一个或多个 PodVolumeRestore。 群集中的每个节点都为此资源运行一个控制器(在与上述相同的 daemonset 中),该控制器处理该节点上的 Pod 的PodVolumeRestores。 控制器执行restic restore 命令以还原 Pod 卷数据。

备份

  1. 根据配置,主要的 Velero 备份过程使用选择加入或选择退出方法来检查要备份的每个 Pod,以使用 Restic 备份要备份的卷。
  2. 找到后,Velero 首先通过以下方式确保 pod 的名称空间存在一个 Restic 存储库:
  • 检查ResticRepository 自定义资源是否已经存在
  • 如果没有,创建一个新的,然后等待ResticRepository 控制器进行初始化 / 检查。
  1. 然后 Velero 为 pod 注释中列出的每个卷创建一个PodVolumeBackup 自定义资源。
  2. 现在,主要的 Velero 进程等待 PodVolumeBackup 资源完成或失败
  3. 同时,每个PodVolumeBackup由相应节点上的控制器处理:
  • 具有 /var/lib/kubelet/pods 的 hostPath 卷挂载以访问 Pod 卷数据
  • 在上述卷中找到 pod 卷的子目录
  • 运行restic backup
  • 将自定义资源的状态更新为“Completed”或“Failed”
  1. 每个PodVolumeBackup 完成时,主 Velero 进程会将其添加到名为<backup-name>-podvolumebackups.json.gz 的文件中的 Velero 备份中。 该文件与备份 tarball 一起上传到对象存储。 它将用于还原,如下一节所述。

还原

  1. Velero 的主要还原过程将检查集群中每个要备份的现有PodVolumeBackup 自定义资源。
  2. 对于找到的每个PodVolumeBackup,Velero 首先通过以下方法确保该 pod 的命名空间存在一个 Restic 存储库:
  • 检查ResticRepository 自定义资源是否已经存在
  • 如果不存在,则创建一个新仓库,然后等待ResticRepository 控制器初始化 / 检查它(请注意,在这种情况下,实际的仓库应该已经存在于对象存储中,因此 Velero 控制器将只对其进行完整性检查)
  1. Velero 将一个初始化容器添加到了 pod 中,该容器的工作是等待所有还原恢复以完成容器(稍后会详细介绍)
  2. Velero 通过将其提交到 Kubernetes API 来创建具有添加的 init container 的 pod
  3. Velero 为要在被还原的每个 Pod 中创建PodVolumeRestore 自定义资源
  4. 现在,主要的 Velero 进程等待每个PodVolumeRestore 资源完成或失败
  5. 同时,每个PodVolumeRestore由相应节点上的控制器处理:
  • 具有 /var/lib/kubelet/pods 的 hostPath 卷挂载以访问 Pod 卷数据
  • 等待 pod 运行 init 容器
  • 在上述卷中找到 pod 卷的子目录
  • 运行restic restore
  • 成功后,将文件写入 Pod 卷中的 .velero 子目录中,该文件的名称是此 Pod 卷还原用于的 Velero 还原的 UID。
  • 将自定义资源的状态更新为“Completed”或“Failed”
  1. 添加到 Pod 的 init 容器正在运行一个过程,该过程一直等到它在每个已还原卷中的.velero 下找到一个文件,其名称是正在运行的 Velero 还原的 UID
  2. 找到所有此类文件后,初始化容器的过程将成功终止,并且 pod 将继续运行其他初始化容器 / 主容器。

第三方控制器

监控备份注释

Velero 没有提供一种机制来检测缺少 restic 备份注释的持久卷声明。

为了解决这个问题,Thomann Bits&Beats 编写了一个控制器:velero-pvc-watcher

使用 - 集群迁移

使用 BackupsRestores

只要您将每个 Velero 实例指向相同的云对象存储位置,Velero 就能帮助您将资源从一个群集移植到另一个群集。 此方案假定您的群集由同一云提供商托管。 请注意,Velero 本身不支持跨云提供程序迁移持久卷快照。 如果要在云平台之间迁移卷数据,请启用 restic,它将在文件系统级别备份卷内容。

  1. (集群 1)假设您尚未使用 Velero schedule 操作对数据进行检查点检查,则需要首先备份整个群集(根据需要替换<BACKUP-NAME>):
velero backup create <BACKUP-NAME>
SHELL
  1. 默认备份保留期限以 TTL(有效期)表示,为 30 天(720 小时); 您可以使用 --ttl <DURATION> 标志根据需要进行更改。 有关备份到期的更多信息,请参见 velero 的工作原理
  2. (集群 2)配置 BackupStorageLocationsVolumeSnapshotLocations, 指向 集群 1 使用的位置,使用 velero backup-location createvelero snapshot-location create. 确保配置 BackupStorageLocations 为 read-only 通过在 velero backup-location create 时使用--access-mode=ReadOnly flag
  3. (集群 2)确保已创建 Velero Backup 对象。 Velero 资源与云存储中的备份文件同步。
velero backup describe <BACKUP-NAME>
SHELL
  1. 注意 :默认同步间隔为 1 分钟,因此请确保在检查之前等待。 您可以使用 Velero 服务器的--backup-sync-period 标志配置此间隔。
  2. (集群 2)一旦确认现在存在正确的备份(<BACKUP-NAME>),就可以使用以下方法还原所有内容:
velero restore create --from-backup <BACKUP-NAME>
SHELL

验证 2 个集群

检查第二个群集是否按预期运行:

  1. (集群 2) 运行:
velero restore get
SHELL
  1. 然后运行:
velero restore describe <RESTORE-NAME-FROM-GET-COMMAND>
SHELL

如果遇到问题,请确保 Velero 在两个群集中的相同 namespace 中运行。

使用 - 资源过滤

按 namespace、类型或标签筛选对象。

当不使用任何筛选选项时,Velero 会将所有对象包括在备份或还原中。

Includes

仅包括特定资源,不包括所有其他资源。

如果同时包含通配符和特定资源,则通配符优先。

–include-namespaces

  • 备份 namespace 及其对象。
velero backup create <backup-name> --include-namespaces <namespace>
SHELL
  • 恢复两个 namespace 及其对象。
velero restore create <backup-name> --include-namespaces <namespace1>,<namespace2>
SHELL

–include-resources

  • 备份集群中的所有 deployments:
velero backup create <backup-name> --include-resources deployments
SHELL
  • 恢复集群中的所有 deployments 和 configmaps。
velero restore create <backup-name> --include-resources deployments,configmaps
SHELL
  • 在 namespace 中备份 deployments。
velero backup create <backup-name> --include-resources deployments --include-namespaces <namespace>
SHELL

–include-cluster-resources

此选项可以具有三个可能的值:

  • true: 包括所有群集范围的资源。
  • false: 不包括群集范围的资源。
  • nil("auto" 或不提供):
  • 备份或还原所有 namespace 时,将包括群集范围的资源。 默认值:true
  • 使用 namespace 过滤时,不包括群集范围的资源。 默认值:false
  • 除非--include-cluster-resources = false,否则如果由自定义操作(例如,PVC-> PV)触发某些相关的群集作用域资源,则可能仍会进行备份 / 还原。
  • 备份整个群集,包括群集范围内的资源。
velero backup create <backup-name>
SHELL
  • 仅还原群集中的命名空间资源。
velero restore create <backup-name> --include-cluster-resources=false
SHELL
  • 备份 namespace 并包括群集范围的资源。
velero backup create <backup-name> --include-namespaces <namespace> --include-cluster-resources=true 
SHELL

–selector

包括与 label selector 匹配的资源。

velero backup create <backup-name> --selector <key>=<value>
SHELL

Excludes

从备份中排除特定资源。

通配符排除将被忽略。

–exclude-namespaces

  • Exclude kube-system from the cluster backup.
velero backup create <backup-name> --exclude-namespaces kube-system
SHELL
  • 还原期间排除两个 namespace。
velero restore create <backup-name> --exclude-namespaces <namespace1>,<namespace2>
SHELL

–exclude-resources

  • 从备份中排除 secrets:
velero backup create <backup-name> --exclude-resources secrets
SHELL
  • 排除 secrets 和 rolebindings:
velero backup create <backup-name> --exclude-resources secrets,rolebindings
SHELL

velero.io/exclude-from-backup=true

标签为 velero.io/exclude-from-backup=true 的资源不包括在备份中,即使它包含匹配的选择器标签也是如此。

系列文章

📚️参考文档

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
存储 Kubernetes 测试技术
Kubernetes snapshots 快照是什么以及如何使用快照
Kubernetes snapshots 快照是什么以及如何使用快照
571 0
|
Kubernetes 应用服务中间件 nginx
kubernetes集群命令行工具kubectl介绍&yaml文件介绍-20230208
kubernetes集群命令行工具kubectl介绍&yaml文件介绍-20230208
206 0
|
6月前
|
Kubernetes Cloud Native Docker
云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版
云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版
813 0
|
存储 jenkins 持续交付
使用Velero Restic快速完成云原生应用及PV数据从GKE到至ACK的迁移
本文记录使用Velero Restic快速完成云原生应用及PV数据从GKE到至ACK的迁移的实践过程。 此过程也同样适用于自建Kubernetes集群内的应用及PV数据迁移至ACK。 ## 实践步骤概览 (1)创建GKE集群(或自建Kubernetes集群) (2)在GKE集群上部署示例应用Jenkins Application并执行一个构建任务 (3)[创建ACK集群](http
5245 0
|
3月前
|
存储 Kubernetes 数据格式
精通Kubernetes:利用YAML轻松管理资源
精通Kubernetes:利用YAML轻松管理资源
|
4月前
|
JSON Kubernetes Linux
k8s备份恢复实践--velero
使用Velero备份k8资源到minio,阿里云oss,七牛云Kodo
288 7
|
6月前
|
存储 Kubernetes 对象存储
Velero 系列文章(四):使用 Velero 进行生产迁移实战
Velero 系列文章(四):使用 Velero 进行生产迁移实战
|
6月前
|
存储 Kubernetes 容灾
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
|
6月前
|
Prometheus 监控 Cloud Native
Velero 系列文章(二):使用 Helm 安装 Velero
Velero 系列文章(二):使用 Helm 安装 Velero
Velero 系列文章(三):Velero 资源过滤
Velero 系列文章(三):Velero 资源过滤