要备份和还原在 主管 上的 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 的存储服务。
- 安装 MinIO。
wget https://dl.min.io/server/minio/release/linux-amd64/minio
- 向 MinIO 授予执行权限。
chmod +x minio
- 在文件系统上为 MinIO 创建一个目录。
mkdir /DATA-MINIO
- 启动 MinIO 服务器。
./minio server /DATA-MINIO
- MinIO 服务器启动后,将为您提供重要的数据存储实例详细信息,包括端点 URL、AccessKey 和 SecretKey。在表中记录端点 URL、 AccessKey 和 SecretKey。
数据存储元数据 值 端点 URL AccessKey SecretKey - 通过打开浏览器访问 MinIO 服务器端点 URL,浏览到 MinIO 数据存储。
- 登录到 MinIO 服务器并提供 AccessKey 和 SecretKey。
- 要启用 MinIO 作为服务,请下载
minio.service
脚本,将 MinIO 配置为自动启动。curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
- 编辑
minio.service
脚本,为ExecStart
添加以下值。ExecStart=/usr/local/bin/minio server /DATA-MINIO path
- 保存修改后的脚本。
- 通过运行以下命令配置 MinIO 服务。
cp minio.service /etc/systemd/system cp minio /usr/local/bin/ systemctl daemon-reload systemctl start minio systemctl status minio systemctl enable minio
- 通过启动 MinIO 浏览器并登录到对象存储,创建用于备份和还原的 MinIO 存储桶。
- 单击“创建存储桶”图标。
- 输入存储桶名称,例如:
my-cluster-backups
。 - 确认已创建存储桶。
- 默认情况下,新 MinIO 存储桶为只读模式。对于 Velero 独立备份和还原,MinIO 存储桶必须为读写模式。要将存储桶设置为读写模式,请选择该存储桶,然后单击省略号(点)链接。
- 选择编辑策略。
- 将策略更改为读取和写入。
- 单击添加。
- 要关闭对话框,请单击 X。
安装 Velero CLI
在虚拟机客户端或本地计算机上安装 Velero CLI。
本文档中使用的版本为
适用于 Tanzu Kubernetes Grid 2.2.0 的 Velero 1.9.7。
- 从 VMware Customer Connect 门户上的 Tanzu Kubernetes Grid 产品下载页面下载 Velero。
注: 必须使用 VMware 签名的 Velero 二进制文件才能获得 VMware 的支持。
- 打开命令行并将目录更改为 Velero CLI 下载。
- 解压缩下载文件。例如:
gunzip velero-linux-vX.X.X_vmware.1.gz
- 检查 Velero 二进制文件。
ls -l
- 向 Velero CLI 授予执行权限。
chmod +x velero-linux-vX.X.X_vmware.1
- 将 Velero CLI 移至系统路径,使其全局可用:
cp velero-linux-vX.X.X_vmware.1 /usr/local/bin/velero
- 确认安装。
velero version
在 Tanzu Kubernetes 集群上安装 Velero 和 Restic
Velero CLI 上下文将自动遵循 kubectl 上下文。在运行 Velero CLI 命令以在目标集群上安装 Velero 和 Restic 之前,请设置 kubectl 上下文。
- 检索 MinIO 存储桶的名称。例如,
my-cluster-backups
。 - 获取 MinIO 存储桶的 AccessKey 和 SecretKey。
- 设置目标 Kubernetes 集群的上下文,以便 Velero CLI 知道要在哪个集群上工作。
kubectl config use-context tkgs-cluster-name
- 创建名为
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
- 保存文件并验证文件是否就位。
ls
- 运行以下命令,在目标 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
- 验证 Velero 和 Restic 的安装。
kubectl logs deployment/velero -n velero
- 验证
velero
命名空间。kubectl get ns
- 验证
velero
和restic
容器。kubectl get all -n velero
Restic DaemonSet 故障排除(如果需要)
要在 Kubernetes 集群上运行三容器 Restic DaemonSet,您可能需要更新 Restic DaemonSet 规范并修改 hostPath。有关此问题的详细信息,请参见 Velero 文档中的
Restic Integration。
- 验证三容器 Restic DaemonSet。
kubectl get pod -n velero
如果容器处于 CrashLoopBackOff 状态,请按如下所示对其进行编辑。
- 运行
edit
命令。kubectl edit daemonset restic -n velero
- 将 hostPath 从
/var/lib/kubelet/pods
更改为/var/vcap/data/kubelet/pods
。- hostPath: path: /var/vcap/data/kubelet/pods
- 保存文件。
- 验证三容器 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
,请增加限制并请求内存设置。
- 运行下列命令。
kubectl edit deployment/velero -n velero
- 将限制和请求内存设置从默认值
256Mi
和128Mi
更改为512Mi
和256Mi
。ports: - containerPort: 8085 name: metrics protocol: TCP resources: limits: cpu: "1" memory: 512Mi requests: cpu: 500m memory: 256Mi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File