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

概览

Tanzu Kubernetes 集群在虚拟机节点上运行。要备份和还原 Tanzu Kubernetes 集群,请在集群上安装 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。
  1. 从 VMware 产品下载页面下载 vSphere with Tanzu 的已签名 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