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已经废弃,备份老版本没什么好办法。

posted on 2025-05-10 06:38  吃草的青蛙  阅读(71)  评论(0)    收藏  举报

导航