通过在 TKGS 集群上安装 适用于 vSphere 的 Velero 插件,可以使用 适用于 vSphere 的 Velero 插件 备份和还原该集群上运行的工作负载。

概览

适用于 vSphere 的 Velero 插件 提供了备份和还原 TKG 服务 集群工作负载的解决方案。对于持久工作负载, 适用于 vSphere 的 Velero 插件 可用于生成持久卷的快照。
注: 如果要求备份和还原的 TKG 服务 集群工作负载具备可移植性,请勿使用 适用于 vSphere 的 Velero 插件。为了实现跨 Kubernetes 集群的可移植性,请将独立 Velero 与 Restic 结合使用。

必备条件:在 主管 上安装 适用于 vSphere 的 Velero 插件

在 TKGS 集群上安装 适用于 vSphere 的 Velero 插件 要求 主管 已安装 适用于 vSphere 的 Velero 插件。此外,必须为 主管 配置 NSX 网络连接。请参见在 主管 上安装并配置 适用于 vSphere 的 Velero 插件

存储要求

要执行 TKG 服务 集群备份,您需要一个存储后端,如下所述。如果要备份多个集群,则不应将同一存储后端用于不同的集群备份。如果共享存储后端,将同步备份对象。必须使用不同的存储后端才能避免数据丢失。

步骤 1:在 Linux Workstation 上安装 Velero CLI

Velero CLI 是与 Velero 交互的标准工具。Velero CLI 提供的功能比 适用于 vSphere 的 Velero 插件 CLI (velero-vsphere) 多,是备份和还原 Tanzu Kubernetes 集群工作负载所必需的。

在 Linux 工作站上安装 Velero CLI。理想情况下,这是为 vSphere IaaS Control Plane 环境运行关联的 CLI 的同一跳转主机,包括 kubectlkubectl-vspherevelero-vsphere

Velero 版本号以 X.Y.Z 显示。有关要使用的特定版本,请参阅 Velero 兼容性列表,并在运行命令时相应地进行替换。

完成以下步骤以安装 Velero CLI。
  1. 运行以下命令:
    $ wget https://github.com/vmware-tanzu/velero/releases/download/vX.Y.Z/velero-vX.Y.Z-linux-amd64.tar.gz
    $ gzip -d velero-vX.Y.Z-linux-amd64.tar.gz && tar -xvf velero-vX.Y.Z-linux-amd64.tar
    $ export PATH="$(pwd)/velero-vX.Y.Z-linux-amd64:$PATH"
     
    $ which velero
    /root/velero-vX.Y.Z-linux-amd64/velero
  2. 验证 Velero CLI 的安装。
    velero version
    
    Client:
        Version: vX.Y.Z

步骤 2:获取与 S3 兼容的存储桶详细信息

为方便起见,这些步骤假定使用在 主管 上安装 适用于 vSphere 的 Velero 插件 时配置的与 S3 兼容的相同对象存储。在生产环境中,可能需要创建单独的对象存储。

要安装 适用于 vSphere 的 Velero 插件,需要提供有关与 S3 兼容的对象存储的以下信息。
数据项 示例值
s3Url

http://my-s3-store.example.com

aws_access_key_id ACCESS-KEY-ID-STRING
aws_secret_access_key SECRET-ACCESS-KEY-STRING
使用以下信息创建密钥文件名 s3-credentials。安装 适用于 vSphere 的 Velero 插件 时将引用此文件。
aws_access_key_id = ACCESS-KEY-ID-STRING
aws_secret_access_key = SECRET-ACCESS-KEY-STRING

步骤 3 选项 A:使用标签在 TKG 集群上安装 适用于 vSphere 的 Velero 插件(新方法)

如果使用的是 vSphere 8 Update 3 或更高版本,则可以通过添加标签在 TKG 集群中自动安装 适用于 vSphere 的 Velero 插件
  1. 确认备份存储位置可供访问。
  2. 确认已激活 Velero vSphere Operator 核心 主管服务
    kubectl get ns | grep velero
    svc-velero-domain-c9                        Active   18d
  3. 确认已在 主管 上创建名为 velero 的 Kubernetes 命名空间。
    kubectl get ns | grep velero
    svc-velero-domain-c9                        Active   18d
    velero                                      Active   1s
  4. 确认已在 主管 上启用 适用于 vSphere 的 Velero 插件主管服务
    velero version
    Client:
            Version: v1.11.1
            Git commit: bdbe7eb242b0f64d5b04a7fea86d1edbb3a3587c
    Server:
            Version: v1.11.1
    kubectl get veleroservice -A
    NAMESPACE   NAME      AGE
    velero      default   53m
    velero backup-location get
    NAME      PROVIDER   BUCKET/PREFIX   PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
    default   aws        velero          Available   2023-11-20 14:10:57 -0800 PST   ReadWrite     true
  5. 通过向集群添加 velero 标签,为目标 TKG 集群启用 Velero。
    kubectl label cluster CLUSTER-NAME --namespace CLUSTER-NS velero.vsphere.vmware.com/enabled=true
    注: 可以在置备集群时通过 vSphere 命名空间 完成此操作。
  6. 确认 Velero 已安装并准备好用于集群。
    kubectl get ns
    NAME                                 STATUS   AGE
    ...
    velero                               Active   2m    <--
    velero-vsphere-plugin-backupdriver   Active   2d23h
    kubectl get all -n velero
    NAME                                 READY   STATUS    RESTARTS   AGE
    pod/backup-driver-5945d6bcd4-gtw9d   1/1     Running   0          17h
    pod/velero-6b9b49449-pq6b4           1/1     Running   0          18h
    NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/backup-driver   1/1     1            1           17h
    deployment.apps/velero          1/1     1            1           18h
    NAME                                       DESIRED   CURRENT   READY   AGE
    replicaset.apps/backup-driver-5945d6bcd4   1         1         1       17h
    replicaset.apps/velero-6b9b49449           1         1         1       18h
    velero version
    Client:
            Version: v1.11.1
            Git commit: bdbe7eb242b0f64d5b04a7fea86d1edbb3a3587c
    Server:
            Version: v1.11.1

步骤 3 选项 B:在 TKG 集群上手动安装 适用于 vSphere 的 Velero 插件(旧方法)

将使用 Velero CLI 在要备份和还原的目标 TKG 集群上安装 适用于 vSphere 的 Velero 插件

Velero CLI 上下文将自动跟随 kubectl 上下文。在运行 Velero CLI 命令以在目标集群上安装 Velero 和 适用于 vSphere 的 Velero 插件 之前,请务必将 kubectl 上下文设置为目标集群。
  1. 使用 kubectl 的 vSphere 插件主管 进行身份验证。
  2. kubectl 上下文设置为目标 TKG 集群。
    kubectl config use-context TARGET-TANZU-KUBERNETES-CLUSTER
  3. 在 TKG 集群上,为名为 velero-vsphere-plugin-config.yaml 的 Velero 插件创建配置映射。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: velero-vsphere-plugin-config
    data:
      cluster_flavor: GUEST
    在 TKG 集群上应用配置映射。
    kubectl apply -n <velero-namespace> -f velero-vsphere-plugin-config.yaml
    如果未安装配置映射,则在尝试安装 适用于 vSphere 的 Velero 插件 时,您会遇到以下错误。
    Error received while retrieving cluster flavor from config, err: configmaps "velero-vsphere-plugin-config" not found
    Falling back to retrieving cluster flavor from vSphere CSI Driver Deployment
  4. 运行以下 Velero CLI 命令以在目标集群上安装 Velero。

    使用相应的值替换 BUCKET-NAME REGION(两个实例)和 s3Url 字段的占位符值。如果偏离上述任何说明,请同时调整这些值,例如密钥文件的名称或位置,手动创建的 velero 命名空间的名称等。

    ./velero install --provider aws \
    --bucket BUCKET-NAME \
    --secret-file ./s3-credentials \
    --features=EnableVSphereItemActionPlugin \
    --plugins velero/velero-plugin-for-aws:vX.Y.Z \
    --snapshot-location-config region=REGION \
    --backup-location-config region=REGION,s3ForcePathStyle="true",s3Url=http://my-s3-store.example.com
  5. 在目标集群上安装 适用于 vSphere 的 Velero 插件。安装的 Velero 将与 Kubernetes API 服务器通信以安装插件。
    velero plugin add vsphereveleroplugin/velero-plugin-for-vsphere:vX.Y.Z

附录:从 TKG 集群中卸载 适用于 vSphere 的 Velero 插件

完成以下步骤以卸载 适用于 vSphere 的 Velero 插件
  1. kubectl 上下文设置为目标 Tanzu Kubernetes 集群。
    kubectl config use-context TARGET-TANZU-KUBERNETES-CLUSTER
  2. 要卸载插件,请运行以下命令,从 Velero 部署中移除 velero-plugin-for-vsphere 的 InitContainer。
    velero plugin remove vsphereveleroplugin/velero-plugin-for-vsphere:vX.Y.Z
  3. 要完成该过程,请删除备份驱动程序部署和相关的 CRD。
    kubectl -n velero delete deployment.apps/backup-driver
    kubectl delete crds \
    backuprepositories.backupdriver.cnsdp.vmware.com \
    backuprepositoryclaims.backupdriver.cnsdp.vmware.com \
    clonefromsnapshots.backupdriver.cnsdp.vmware.com \
    deletesnapshots.backupdriver.cnsdp.vmware.com \
    snapshots.backupdriver.cnsdp.vmware.com
    kubectl delete crds uploads.datamover.cnsdp.vmware.com downloads.datamover.cnsdp.vmware.com