velero
如果 Velero 环境完全丢失(例如集群被删除、Velero 组件被卸载),但备份数据仍存储在 S3/MinIO 中,可以通过以下步骤重新恢复 Velero 并还原备份: --- ### **步骤 1: 重新安装 Velero** #### 1.1 安装 Velero CLI 工具 从 [Velero 官方文档](https://velero.io/docs/latest/basic-install/) 下载对应操作系统的 `velero` CLI 工具: ```bash wget https://github.com/vmware-tan/velero/releases/download/v1.11.0/velero-v1.11.0-linux-amd64.tar.gz tar -xzvf velero-v1.11.0-linux-amd64.tar.gz sudo mv velero /usr/local/bin/ ``` #### 1.2 安装 Velero 到 Kubernetes 集群 使用原有 S3/MinIO 的配置重新安装 Velero。确保提供以下信息: - **S3/MinIO 地址**(如 `http://minio.example.com:9000`) - **存储桶名称**(Bucket Name) - **访问密钥**(Access Key)和 **密钥**(Secret Key) ```bash velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:latest \ --bucket <BUCKET_NAME> \ --secret-file ./credentials-velero \ # 包含 Access Key 和 Secret Key 的文件 --use-volume-snapshots=false \ # 如果不需要卷快照功能 --backup-location-config region=minio,s3Url=http://minio.example.com:9000,publicUrl=http://minio.example.com:9000 ``` #### 验证安装: ```bash kubectl get pods -n velero ``` --- ### **步骤 2: 配置 Velero 访问原有备份** #### 2.1 确保 `BackupStorageLocation` 指向正确的存储桶 检查 Velero 的存储位置配置: ```bash velero backup-location get ``` 输出应为 `Available` 状态: ``` NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE default aws my-bucket Available 5s ReadWrite ``` 如果配置丢失,手动创建 `BackupStorageLocation`: ```yaml apiVersion: velero.io/v1 kind: BackupStorageLocation metadata: name: default namespace: velero spec: provider: aws objectStorage: bucket: <BUCKET_NAME> config: region: minio s3Url: http://minio.example.com:9000 publicUrl: http://minio.example.com:9000 ``` --- ### **步骤 3: 查看并恢复备份** #### 3.1 列出所有备份 ```bash velero backup get ``` 输出应显示存储在 S3/MinIO 中的备份列表: ``` NAME STATUS CREATED EXPIRES STORAGE LOCATION backup-2023 Completed 2023-10-01 10:00:00 +0000 UTC 29d default ``` #### 3.2 执行恢复 ```bash velero restore create --from-backup backup-2023 ``` #### 3.3 监控恢复状态 ```bash velero restore get velero restore describe <RESTORE_NAME> velero restore logs <RESTORE_NAME> ``` --- ### **步骤 4: 验证恢复结果** 1. **检查 Kubernetes 资源**: ```bash kubectl get ns # 查看恢复的命名空间 kubectl get all -n <NAMESPACE> # 查看具体资源 ``` 2. **验证持久卷数据**: - 如果备份中包含 PV/PVC,确保存储类(StorageClass)和卷配置与原始集群一致。 --- ### **关键问题排查** #### 1. **无法访问 S3/MinIO 存储桶** - **错误现象**:`velero backup get` 无输出或报错。 - **检查项**: - S3/MinIO 地址和端口是否可达。 - 存储桶名称、Access Key 和 Secret Key 是否正确。 - 存储桶的权限策略是否允许 Velero 读写。 #### 2. **恢复时资源冲突** - **错误现象**:`资源已存在`。 - **解决方案**: - 使用 `--allow-override` 参数强制覆盖: ```bash velero restore create --from-backup backup-2023 --allow-override ``` #### 3. **持久卷恢复失败** - **错误现象**:PVC 处于 `Pending` 状态。 - **检查项**: - 目标集群的 StorageClass 是否与备份集群一致。 - 如果使用卷快照,确保 VolumeSnapshotLocation 配置正确。 --- ### **完整操作示例** ```bash # 1. 安装 Velero CLI wget https://github.com/vmware-tan/velero/releases/download/v1.11.0/velero-v1.11.0-linux-amd64.tar.gz tar -xzvf velero-v1.11.0-linux-amd64.tar.gz sudo mv velero /usr/local/bin/ # 2. 创建 credentials-velero 文件(内容格式如下) cat <<EOF > credentials-velero [default] aws_access_key_id = minio-access-key aws_secret_access_key = minio-secret-key EOF # 3. 安装 Velero 到集群 velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:latest \ --bucket my-velero-backups \ --secret-file ./credentials-velero \ --use-volume-snapshots=false \ --backup-location-config region=minio,s3Url=http://minio:9000,publicUrl=http://minio:9000 # 4. 查看备份列表 velero backup get # 5. 恢复备份 velero restore create --from-backup backup-2023 # 6. 验证恢复结果 kubectl get all --all-namespaces ``` --- ### **注意事项** 1. **环境一致性**: - 目标集群的 Kubernetes 版本、StorageClass、网络插件等尽量与备份集群一致。 2. **MinIO/S3 权限**: - 确保 Velero 有权限读取存储桶中的备份文件(需 `s3:ListBucket` 和 `s3:GetObject` 权限)。 3. **数据安全**: - 恢复前建议先验证备份文件完整性(如检查备份的 `backup-xxxx/velero-backup.json` 是否存在)。 通过以上步骤,即使 Velero 环境完全丢失,只要 S3/MinIO 中的备份数据完好,仍可快速重建 Velero 并恢复集群。
https://velero.io/docs/v1.10/self-signed-certificates/?utm_source=chatgpt.com
https://github.com/vmware-tanzu/velero-plugin-for-aws
https://developer.aliyun.com/article/1198441
https://redhatxl.github.io/cloud-native/operator/tools/云原生备份恢复之velero实战/#_3
https://www.cnblogs.com/jackwu81/p/17017301.html
https://wnote.com/post/kubernetes-velero-etcd-backup/
https://velero.io/docs/v1.7/self-signed-certificates/
https://github.com/yangpeng14/DevOps/blob/master/kubernetes/K8S备份-恢复-迁移神器-Velero.md
https://velero.io/docs/v1.3.1/contributions/oracle-config/
https://blog.itpub.net/70041615/viewspace-3053431/


备份相关元数据存储于s3,参考https://github.com/yangpeng14/DevOps/blob/master/kubernetes/K8S备份-恢复-迁移神器-Velero.md

velero/velero:v1.4.2
velero/velero-plugin-for-aws:v1.0.0
老版本https://github.com/msfidelis/kubedump
docker pull velero/velero-plugin-for-aws:v1.10.0 velero completion bash velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.0.0 \ --bucket velero \ --namespace velero \ --secret-file ./credentials-velero \ --use-restic \ --backup-location-config region=minio,s3ForcePathStyle=true,insecureSkipTLSVerify=true,s3Url=https://xiantest04v.xian.zzt.qianxin-inc.cn:9345 velero backup create default-backup --include-namespaces default --wait velero restore create --from-backup default-backup --wait kubectl -n velero get backupstoragelocation -o yaml kubectl delete namespace/velero clusterrolebinding/velero kubectl delete crds -l component=veler
注意velero老版本的ark已经废弃,备份老版本没什么好办法。
浙公网安备 33010602011771号