Velero 系列文章(一):基础

news2024/11/15 15:42:16

概述

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 install CLI 命令
  • Helm Chart

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 S3AWS EBSVelero plugin for AWSAWS Plugin Setup
Google Cloud Platform (GCP)Google Cloud StorageGoogle Compute Engine DisksVelero plugin for GCPGCP Plugin Setup
Microsoft AzureAzure Blob StorageAzure Managed DisksVelero plugin for Microsoft AzureAzure Plugin Setup
VMware vSphere🚫vSphere VolumesVMware vSpherevSphere Plugin Setup
Container Storage Interface (CSI)🚫CSI VolumesVelero plugin for CSICSI Plugin Setup

社区支持的提供商

ProviderObject StoreVolume SnapshotterPlugin DocumentationContact
AlibabaCloudAlibaba Cloud OSSAlibaba CloudAlibabaCloudGitHub Issue
DigitalOceanDigitalOcean Object StorageDigitalOcean Volumes Block StorageStackPointCloud
Hewlett Packard🚫HPE StorageHewlett PackardSlack, GitHub Issue
OpenEBS🚫OpenEBS CStor VolumeOpenEBSSlack, GitHub Issue
OpenStackSwiftCinderOpenStackGitHub Issue
Portworx🚫Portworx VolumePortworxSlack, GitHub Issue
StorjStorj Object Storage🚫StorjGitHub Issue

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

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

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

  • IBM Cloud
  • Oracle Cloud
  • Minio
  • DigitalOcean
  • NooBaa
  • Tencent Cloud
  • Ceph RADOS v12.2.7
  • Quobyte
  • Cloudian HyperStore

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

安装 - 快速验证安装

  1. 在您的本地目录中创建特定于 Velero 的凭证文件(credentials-velero):

     [default]
     aws_access_key_id = minio
     aws_secret_access_key = minio123
  2. 启动服务器和存储服务。 在 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 

    此示例假定它在本地群集中运行,而没有能够提供快照的卷提供程序,因此不会创建 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.

备份

  1. 为与app=iperf3-serverlabel selector 匹配的任何对象创建备份:

     velero backup create test-backup --selector app=iperf3-server

    或者,如果要备份除匹配标签backup=ignore的对象以外的所有对象,请执行以下操作:

     velero backup create nginx-backup --selector 'backup!=ignore'
  2. (可选)使用app=iperf3-serverlabel selector 基于 cron 表达式创建定期计划的备份:

     velero schedule create test-daily --schedule="0 1 * * *" --selector app=iperf3-server

    另外,您可以使用一些非标准的速记 cron 表达式:

     velero schedule create test-daily --schedule="@every 24h" --selector app=iperf3-server

    有关更多用法示例,请参见 cron 软件包 的文档。

恢复

  1. 运行:

     velero restore create --from-backup test-backup
  2. 运行:

     velero restore get

    恢复完成后,输出如下所示:

     NAME                          BACKUP         STATUS      WARNINGS   ERRORS    CREATED                         SELECTOR
     nginx-backup-20170727200524   nginx-backup   Completed   0          0         2017-07-27 20:05:24 +0000 UTC   <none>

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

velero restore describe <RESTORE_NAME>

清理

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

velero backup delete BACKUP_NAME

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

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

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

安装 - Restic 集成

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

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

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

🐾 注意:

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

安装 restic

前提

  • 了解 Velero 如何 通过 Restic 集成执行备份。

  • 下载 最新的 Velero 版本。

  • Kubernetes v1.10.0 及更高版本。 Velero 的 Restic 集成需要 Kubernetes MountPropagation 功能,该功能在 Kubernetes v1.10.0 和更高版本中默认启用。

安装 restic

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

velero install --use-restic

在不支持快照的 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. veleroServiceAccount 添加到privilegedSCC:

     $ oc adm policy add-scc-to-user privileged -z velero -n velero
  2. 对于 OpenShift 版本> = 4.1,修改 DaemonSet yaml 以请求privileged模式:

     @@ -67,3 +67,5 @@ spec:
                   value: /credentials/cloud
                 - name: VELERO_SCRATCH_DIR
                   value: /scratch
     +          securityContext:
     +            privileged: true

    或:

     oc patch ds/restic \
       --namespace velero \
       --type json \
       -p '[{"op":"add","path":"/spec/template/spec/containers/0/securityContext","value": { "privileged": true}}]'

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

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

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

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

这应该在安装 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

备份

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,...

    其中,卷名是容器规范中卷的名称。

    例如,在以下 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

    要排除卷pvc1-vm的 Restic 备份,应运行:

     kubectl -n sample annotate pod/app1 backup.velero.io/backup-volumes-excludes=pvc1-vm
  2. 进行 Velero 备份:

     velero backup create BACKUP_NAME --default-volumes-to-restic OTHER_OPTIONS

    以上步骤在每个备份的基础上使用了选择性退出方法。

    或者,可以在运行带有--default-volumes-to-restic 标志的velero install命令的所有 velero 备份上启用此行为。 有关详细信息,请参阅 安装概述。

  3. 备份完成后,查看有关备份的信息:

     velero backup describe YOUR_BACKUP_NAME
     kubectl -n velero get podvolumebackups -l velero.io/backup-name=YOUR_BACKUP_NAME -o yaml

选择性启用方式

默认情况下,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,...

    其中,卷名是容器 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: {}

    你应该运行:

     kubectl -n foo annotate pod/sample backup.velero.io/backup-volumes=pvc-volume,emptydir-volume

    如果您使用控制器来管理您的 pods,则也可以在 pod template spec 中提供此批注。

  2. 做一个 Velero 备份

     velero backup create NAME OPTIONS...
  3. 备份完成后,查看有关备份的信息:

     velero backup describe YOUR_BACKUP_NAME
     kubectl -n velero get podvolumebackups -l velero.io/backup-name=YOUR_BACKUP_NAME -o yaml

恢复

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

  1. 从 Velero 备份中还原:

     velero restore create --from-backup BACKUP_NAME OPTIONS...
  2. 还原完成后,查看有关 Pod 卷还原的信息:

     velero restore describe YOUR_RESTORE_NAME
     kubectl -n velero get podvolumerestores -l velero.io/restore-name=YOUR_RESTORE_NAME -o yaml

限制

  • 不支持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

备份和还原如何与 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 控制器进行初始化/检查。
  3. 然后 Velero 为 pod 注释中列出的每个卷创建一个PodVolumeBackup 自定义资源。
  4. 现在,主要的 Velero 进程等待PodVolumeBackup资源完成或失败
  5. 同时,每个PodVolumeBackup 由相应节点上的控制器处理:
    • 具有/var/lib/kubelet/pods的 hostPath 卷挂载以访问 Pod 卷数据
    • 在上述卷中找到 pod 卷的子目录
    • 运行restic backup
    • 将自定义资源的状态更新为“Completed”或“Failed”
  6. 每个PodVolumeBackup 完成时,主 Velero 进程会将其添加到名为<backup-name>-podvolumebackups.json.gz 的文件中的 Velero 备份中。 该文件与备份 tarball 一起上传到对象存储。 它将用于还原,如下一节所述。

还原

  1. Velero 的主要还原过程将检查集群中每个要备份的现有PodVolumeBackup 自定义资源。

  2. 对于找到的每个PodVolumeBackup ,Velero 首先通过以下方法确保该 pod 的命名空间存在一个 Restic 存储库:

    • 检查ResticRepository 自定义资源是否已经存在
    • 如果不存在,则创建一个新仓库,然后等待ResticRepository 控制器初始化/检查它(请注意,在这种情况下,实际的仓库应该已经存在于对象存储中,因此 Velero 控制器将只对其进行完整性检查)
  3. Velero 将一个初始化容器添加到了 pod 中,该容器的工作是等待所有还原恢复以完成容器(稍后会详细介绍)

  4. Velero 通过将其提交到 Kubernetes API 来创建具有添加的 init container 的 pod

  5. Velero 为要在被还原的每个 Pod 中创建PodVolumeRestore 自定义资源

  6. 现在,主要的 Velero 进程等待每个PodVolumeRestore 资源完成或失败

  7. 同时,每个PodVolumeRestore 由相应节点上的控制器处理:

    • 具有/var/lib/kubelet/pods的 hostPath 卷挂载以访问 Pod 卷数据

    • 等待 pod 运行 init 容器

    • 在上述卷中找到 pod 卷的子目录

    • 运行restic restore

    • 成功后,将文件写入 Pod 卷中的.velero子目录中,该文件的名称是此 Pod 卷还原用于的 Velero 还原的 UID。

    • 将自定义资源的状态更新为“Completed”或“Failed”

  8. 添加到 Pod 的 init 容器正在运行一个过程,该过程一直等到它在每个已还原卷中的.velero 下找到一个文件,其名称是正在运行的 Velero 还原的 UID

  9. 找到所有此类文件后,初始化容器的过程将成功终止,并且 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>

    默认备份保留期限以 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>

    注意:默认同步间隔为 1 分钟,因此请确保在检查之前等待。 您可以使用 Velero 服务器的--backup-sync-period标志配置此间隔。

  4. (集群 2)一旦确认现在存在正确的备份(<BACKUP-NAME>),就可以使用以下方法还原所有内容:

     velero restore create --from-backup <BACKUP-NAME>

验证 2 个集群

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

  1. (集群 2) 运行:

     velero restore get
  2. 然后运行:

     velero restore describe <RESTORE-NAME-FROM-GET-COMMAND>

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

使用 - 资源过滤

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

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

Includes

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

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

–include-namespaces

  • 备份 namespace 及其对象。

      velero backup create <backup-name> --include-namespaces <namespace>
  • 恢复两个 namespace 及其对象。

      velero restore create <backup-name> --include-namespaces <namespace1>,<namespace2>

–include-resources

  • 备份集群中的所有 deployments:

      velero backup create <backup-name> --include-resources deployments
  • 恢复集群中的所有 deployments 和 configmaps。

      velero restore create <backup-name> --include-resources deployments,configmaps
  • 在 namespace 中备份 deployments。

      velero backup create <backup-name> --include-resources deployments --include-namespaces <namespace>

–include-cluster-resources

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

  • true: 包括所有群集范围的资源。

  • false: 不包括群集范围的资源。

  • nil("auto"或不提供):

    • 备份或还原所有 namespace 时,将包括群集范围的资源。 默认值:true
    • 使用 namespace 过滤时,不包括群集范围的资源。 默认值:false
      • 除非--include-cluster-resources = false,否则如果由自定义操作(例如,PVC-> PV)触发某些相关的群集作用域资源,则可能仍会进行备份/还原。
  • 备份整个群集,包括群集范围内的资源。

      velero backup create <backup-name>
  • 仅还原群集中的命名空间资源。

      velero restore create <backup-name> --include-cluster-resources=false
  • 备份 namespace 并包括群集范围的资源。

      velero backup create <backup-name> --include-namespaces <namespace> --include-cluster-resources=true 

–selector

包括与 label selector 匹配的资源。

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

Excludes

从备份中排除特定资源。

通配符排除将被忽略。

–exclude-namespaces

  • Exclude kube-system from the cluster backup.

      velero backup create <backup-name> --exclude-namespaces kube-system
  • 还原期间排除两个 namespace。

      velero restore create <backup-name> --exclude-namespaces <namespace1>,<namespace2>

–exclude-resources

  • 从备份中排除 secrets:

      velero backup create <backup-name> --exclude-resources secrets
  • 排除 secrets 和 rolebindings:

      velero backup create <backup-name> --exclude-resources secrets,rolebindings

velero.io/exclude-from-backup=true

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

系列文章

  • Velero 系列文章

📚️参考文档

  • Velero Docs - Overview

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用VictoriaMetrics 对Prometheus的数据进行分布式存储

前言 Prometheus 就是一个很好的时序数据库&#xff0c;对于监控数据量没有超过千万级的 情况下没必要进行分布式存储。一般的监控数据存3个月以内即可&#xff0c;所以数据量并不会很大。 并且生产环境可以搞多个Proms数据源在Grafana中做统一的告警。并且在时序数据库的排名…

windows安装minikube

由于学习的需要&#xff0c;需要在windows上搭建一套可以使用的k8s学习用&#xff0c;最后选择了minikube这个安装k8s&#xff0c;本博客介绍了minikube的安装步骤&#xff0c;详细命令以及截图 1、首先是本机windows安装docker&#xff0c;具体可以参考这个 win10安装docker…

奥曲肽-葡聚糖-亲和索的偶联物TOC-Dx40-Av)|紫杉醇-DHA-右旋糖酐偶联聚合物

中文名称&#xff1a;奥曲肽-葡聚糖-亲和索的偶联物 英文名称&#xff1a;TOC-Dx40-Av 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体 包装&#xff1a;瓶装/袋装 溶解性&#xff1a;溶于大部分有机溶剂&#xff0…

GC 算法总结_java培训

1.标记清除压缩(Mark-Sweep-Compact) 标记清除、标记压缩的结合使用 原理java培训GC 算法总结 2.算法总结 内存效率&#xff1a;复制算法>标记清除算法>标记整理算法&#xff08;此处的效率只是简单的对比时间复杂度&#xff0c;实际情况不一定如此&#xff09;。 内…

城市云灾备,为业务连续性保驾护航

摘要&#xff1a;华为云作为中国政务云基础设施领域领导者&#xff0c;基于华为公有云技术架构的政务云平台&#xff0c;具备领先的云灾备技术实力&#xff0c;支持IaaS、PaaS等云服务云原生灾备能力。本文分享自华为云社区《城市云灾备&#xff0c;为业务连续性保驾护航》&…

Delphi Base64 的“坑”

使用 Delphi 原生的Base64编码&#xff08;System.NetEncoding 单元&#xff09; &#xff0c;编码后的字符串每隔76个字符会增加一个回车换行&#xff08;#13#10&#xff09;&#xff0c;这样就导致和其他语言对接的时候出现问题&#xff0c;特别是Base64以后再进行签名&#…

元学习:IVIF:输入不同分辨率,输出任意分辨率

Different Input Resolutions and Arbitrary Output Resolution: A Meta Learning-Based Deep Framework for Infrared and Visible Image Fusion &#xff08;不同的输入分辨率和任意输出分辨率: 基于元学习的红外和可见光图像融合深度框架&#xff09; 在本文中&#xff0c…

Web大学生网页作业成品——城市环卫管理系统后台模板(HTML+CSS+JavaScript)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

浏览器中的音视频知识总结v1.0(工作中需要和视频打交道必看)

视频是什么 视频&#xff0c;其实就是一系列连续播放的图片&#xff0c;如果1s钟播放24张图片&#xff0c;那么人眼看到的就不再是一张张独立的图片&#xff0c;而是动起来的画面。其中一张图片称为一帧&#xff0c;1s播放的图片数称为帧率。常见的帧率有24帧/s&#xff0c;30帧…

[附源码]JAVA毕业设计西安市城市绿地管理系统(系统+LW)

[附源码]JAVA毕业设计西安市城市绿地管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

Linux网络原理及编程(3)——第十三节 HTTPS

我们本文主要来介绍https&#xff0c;主要来介绍https的加密原理。 大家应该都知道http和https的区别&#xff0c;区别很简单&#xff0c;主要就是在https是采用了加密协议的&#xff0c;而http完全是在网络上裸奔的。而我们现在几乎所有的连接都用的是https 我们首先需要明白…

Flink学习26:触发器

触发器 作用&#xff1a;决定何时&#xff0c;触发窗口计算函数&#xff0c;开始计算 每个窗口都有一个默认触发器&#xff0c;也可以自定义触发器。 自定义触发器 示例1&#xff1a; 当流中元素达到5个以后&#xff0c;触发窗口计算。 import org.apache.flink.api.common.fu…

基于数据挖掘算法的服装销售平台的设计与实现(spring+spring mvc+mybatis+mysql+maven)

目 录 摘 要 I Abstract II 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 研究意义 2 1.3 国内外研究现状 2 2 相关理论和开发工具 4 2.1 数据挖掘简述 4 2.2 相关数据挖掘算法概述 4 2.2.1关联规则 4 2.2.2 聚类算法 5 2.2.3 分类算法 5 2.3 文本挖掘概述 6 2.4 开发工具 7 3系统需…

5-10人的创业团队,怎么在半个月内上线一款新产品?

5~10 人的小微型创业团队&#xff0c;需不需要专业的研发协作工具&#xff1f; 随着生产力工具的价值获得更广泛的认可&#xff0c;越来越多观点认为&#xff0c;组织结构精简、业务尚未成熟的小微型团队应该尽早引入专业研发协作工具&#xff0c;完成核心竞争力的蜕变。 猴子…

2022 计网复习应用题【太原理工大学】

最后一道大题 —— 应用题&#xff0c;有以下几个考点&#xff0c;原理无需懂会算就行&#xff0c;15 分 拿 10 分不难&#xff0c;建议看一下。>_< 目录 1. 判断 IP 地址类型 2. 通过 IP 地址求子网掩码 3. 求网络地址和广播地址 4. 求主机号和可用 IP 5. 双绞线的…

【Spring】一文带你搞懂Spring IOC容器

前言 本文为 【Spring】Spring IOC容器 相关知识&#xff0c;首先为大家介绍Spring IOC相关的名词概念&#xff0c;对Spring IOC进行概述&#xff0c;然后具体为大家介绍配置元数据&#xff0c;容器实例化与使用等Spring IOC相关详尽内容~ &#x1f4cc;博主主页&#xff1a;小…

【Python毕业设计】Python基于面向对象+tkinter打造学生信息管理系统 | 附源码

前言 halo&#xff0c;包子们上午好 很多学计算机的小伙伴应该都知道&#xff0c;毕业设计是一个头疼的东西 今天的话小编这边给大家准备好了一个Python基于面向对象tkinter打造学生信息管理系统 这不是毕业设计必备项目 说实话操作起来还是有那么一点点的难度的&#xff0c;但…

2023年天津医科大学临床医学院专升本专业课考试报名缴费考试安排

天津医科大学临床医学院2023年高职升本科专业课考试报考须知 一、报名条件&#xff1a; 报考2023年天津医科大学临床医学院高职升本科专业课考试的考生应符合以下条件&#xff1a; 1、符合《2023年天津市高职升本科招生工作规定》中规定的报考资格。 2、我院高职升本科专业课考…

scViewerX ActiveX 多功能文件查看器控件

scViewerX ActiveX 控件 scViewerX是一个功能强大的 ActiveX 控件&#xff0c;允许您查看、打印和转换 PLT、Adobe PDF、Autodesk DWF、CGM、Calcomp、HPGL/2、Gerber、TIF、CALS 和其他几种格式。 ScViewerX 可以将您的文件转换为多种不同的输出文件格式&#xff0c;包括 PDF、…

软件测试题库怎么样 这个刷题小程序很适合临时抱佛脚

考试刷题&#xff0c;面试找工作也要刷题&#xff1f;说到这&#xff0c;可能很多都觉得不可思议&#xff0c;这找工作&#xff0c;还得提前刷题做准备&#xff1f;其实这个现象一个都有的&#xff0c;尤其是对于技术岗来说&#xff0c;由于面试官会着重询问技术相关问题&#…