要备份和还原在 主管 上的 TKG 集群中运行的工作负载,请创建数据存储并在 Kubernetes 集群上安装 Velero 和 Restic。

概览

TKG 集群在虚拟机节点上运行。要备份和还原 TKG 集群工作负载,请在集群上安装 Velero 和 Restic。

必备条件

确保环境满足安装 Velero 和 Restic 的下列必备条件,以备份和还原在 Tanzu Kubernetes 集群上运行的工作负载。
  • 具备充足的存储空间的 Linux 虚拟机,用于存储若干工作负载备份。要在此虚拟机上安装 MinIO。
  • 安装了 适用于 vSphere 的 Kubernetes CLI 工具 的 Linux 虚拟机,包括 kubectl 的 vSphere 插件kubectl。要在此客户端虚拟机上安装 Velero CLI。如果没有此类虚拟机,则可以在本地安装 Velero CLI,但必须相应地调整安装步骤。
  • Kubernetes 环境具有 internet 访问权限,并且可由客户端虚拟机访问。

安装和配置 MinIO 对象存储

Velero 需要使用兼容 S3 的对象存储作为 Kubernetes 工作负载备份的目标。Velero 支持多个此类 对象存储提供程序。为简便起见,这些说明使用 MinIO,这是在对象存储虚拟机本地运行的兼容 S3 的存储服务。
  1. 安装 MinIO。
    wget https://dl.min.io/server/minio/release/linux-amd64/minio
  2. 向 MinIO 授予执行权限。
    chmod +x minio
  3. 在文件系统上为 MinIO 创建一个目录。
    mkdir /DATA-MINIO
  4. 启动 MinIO 服务器。
    ./minio server /DATA-MINIO
  5. MinIO 服务器启动后,将为您提供重要的数据存储实例详细信息,包括端点 URL、AccessKey 和 SecretKey。在表中记录端点 URL、 AccessKey 和 SecretKey。
    数据存储元数据
    端点 URL
    AccessKey
    SecretKey
  6. 通过打开浏览器访问 MinIO 服务器端点 URL,浏览到 MinIO 数据存储。
  7. 登录到 MinIO 服务器并提供 AccessKey 和 SecretKey。
  8. 要启用 MinIO 作为服务,请下载 minio.service 脚本,将 MinIO 配置为自动启动。
    curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
  9. 编辑 minio.service 脚本,为 ExecStart 添加以下值。
    ExecStart=/usr/local/bin/minio server /DATA-MINIO path
  10. 保存修改后的脚本。
  11. 通过运行以下命令配置 MinIO 服务。
    cp minio.service /etc/systemd/system 
    cp minio /usr/local/bin/ 
    systemctl daemon-reload 
    systemctl start minio 
    systemctl status minio 
    systemctl enable minio
  12. 通过启动 MinIO 浏览器并登录到对象存储,创建用于备份和还原的 MinIO 存储桶。
  13. 单击“创建存储桶”图标。
  14. 输入存储桶名称,例如:my-cluster-backups
  15. 确认已创建存储桶。
  16. 默认情况下,新 MinIO 存储桶为只读模式。对于 Velero 独立备份和还原,MinIO 存储桶必须为读写模式。要将存储桶设置为读写模式,请选择该存储桶,然后单击省略号(点)链接。
  17. 选择编辑策略
  18. 将策略更改为读取和写入
  19. 单击添加
  20. 要关闭对话框,请单击 X。

安装 Velero CLI

在虚拟机客户端或本地计算机上安装 Velero CLI。

本文档中使用的版本为 适用于 Tanzu Kubernetes Grid 2.2.0 的 Velero 1.9.7
  1. VMware Customer Connect 门户上的 Tanzu Kubernetes Grid 产品下载页面下载 Velero。
    注: 必须使用 VMware 签名的 Velero 二进制文件才能获得 VMware 的支持。
  2. 打开命令行并将目录更改为 Velero CLI 下载。
  3. 解压缩下载文件。例如:
    gunzip velero-linux-vX.X.X_vmware.1.gz
  4. 检查 Velero 二进制文件。
    ls -l
  5. 向 Velero CLI 授予执行权限。
    chmod +x velero-linux-vX.X.X_vmware.1 
  6. 将 Velero CLI 移至系统路径,使其全局可用:
    cp velero-linux-vX.X.X_vmware.1 /usr/local/bin/velero 
  7. 确认安装。
    velero version

Tanzu Kubernetes 集群上安装 Velero 和 Restic

Velero CLI 上下文将自动遵循 kubectl 上下文。在运行 Velero CLI 命令以在目标集群上安装 Velero 和 Restic 之前,请设置 kubectl 上下文。
  1. 检索 MinIO 存储桶的名称。例如,my-cluster-backups
  2. 获取 MinIO 存储桶的 AccessKey 和 SecretKey。
  3. 设置目标 Kubernetes 集群的上下文,以便 Velero CLI 知道要在哪个集群上工作。
    kubectl config use-context tkgs-cluster-name
  4. 创建名为 credentials-minio 的密钥文件。使用您收集的 MinIO 服务器访问凭据更新文件。例如:
    aws_access_key_id = 0XXNO8JCCGV41QZBV0RQ
    aws_secret_access_key = clZ1bf8Ljkvkmq7fHucrKCkxV39BRbcycGeXQDfx
    注: 如果收到错误消息“获取备份存储时出错 (Error getting a backup store)”,且描述为“NoCredentialProviders: 链中不存在有效的提供程序 (NoCredentialProviders: no valid providers in chain)”,请将行 [default] 添加到凭据文件的开头。例如:
    [default]
    aws_access_key_id = 0XXNO8JCCGV41QZBV0RQ
    aws_secret_access_key = clZ1bf8Ljkvkmq7fHucrKCkxV39BRbcycGeXQDfx
  5. 保存文件并验证文件是否就位。
    ls
  6. 运行以下命令,在目标 Kubernetes 集群上安装 Velero 和 Restic。将这两个 URL 替换为 MinIO 实例的 URL。
    velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.0.0 \
    --bucket tkgs-velero \
    --secret-file ./credentials-minio \
    --use-volume-snapshots=false \
    --use-restic \
    --backup-location-config \
    region=minio,s3ForcePathStyle="true",s3Url=http://10.199.17.63:9000,publicUrl=http://10.199.17.63:9000
  7. 验证 Velero 和 Restic 的安装。
    kubectl logs deployment/velero -n velero
  8. 验证 velero 命名空间。
    kubectl get ns
  9. 验证 velerorestic 容器。
    kubectl get all -n velero

Restic DaemonSet 故障排除(如果需要)

要在 Kubernetes 集群上运行三容器 Restic DaemonSet,您可能需要更新 Restic DaemonSet 规范并修改 hostPath。有关此问题的详细信息,请参见 Velero 文档中的 Restic Integration
  1. 验证三容器 Restic DaemonSet。
    kubectl get pod -n velero

    如果容器处于 CrashLoopBackOff 状态,请按如下所示对其进行编辑。

  2. 运行 edit 命令。
    kubectl edit daemonset restic -n velero
  3. 将 hostPath 从 /var/lib/kubelet/pods 更改为 /var/vcap/data/kubelet/pods
    - hostPath:
        path: /var/vcap/data/kubelet/pods
  4. 保存文件。
  5. 验证三容器 Restic DaemonSet。
    kubectl get pod -n velero
    NAME                      READY   STATUS    RESTARTS   AGE
    restic-5jln8              1/1     Running   0          73s
    restic-bpvtq              1/1     Running   0          73s
    restic-vg8j7              1/1     Running   0          73s
    velero-72c84322d9-le7bd   1/1     Running   0          10m

调整 Velero 内存限制(如果需要)

如果您的 Velero 备份在很长时间内返回 status=InProgress,请增加限制并请求内存设置。
  1. 运行下列命令。
    kubectl edit deployment/velero -n velero
  2. 将限制和请求内存设置从默认值 256Mi128Mi 更改为 512Mi256Mi
        
    ports:
    - containerPort: 8085
      name: metrics
      protocol: TCP
    resources:
      limits:
        cpu: "1"
        memory: 512Mi
      requests:
        cpu: 500m
        memory: 256Mi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File