velero 资源备份测试

使用的命令是velero backup,created就是备份,delete就是删除,down是将K8s的一些mainfest文件下载下来。

[root@master ~]# velero backup
Work with backups

Usage:
  velero backup [command]

Available Commands:
  create      Create a backup
  delete      Delete backups
  describe    Describe backups
  download    Download all Kubernetes manifests for a backup
  get         Get backups
  logs        Get backup logs
[root@master ~]# kubectl create deployment myapp --image registry.cn-beijing.aliyuncs.com/wangxiaochun/pod-test:v0.1 --replicas 1 -n demo

[root@master ~]# kubectl get pod -n demo
NAME                     READY   STATUS    RESTARTS   AGE
myapp-659c5c8476-v8rkf   1/1     Running   0          2m10s

 redis里面是可以存储数据的,向里面写入数据,保存在data目录下,里面有一个dump文件。

[root@master ~]# velero backup create --help
Create a backup

Usage:
  velero backup create NAME [flags]

Examples:    

将所有的资源都备份,如果所有备份使用etcd就行
  # Create a backup containing all resources.
  velero backup create backup1

如果要使用某个名称空间来备份
  velero backup create nginx-backup --include-namespaces nginx

多个名称空间备份
  # Create a backup excluding the velero and default namespaces.
  velero backup create backup2 --exclude-namespaces velero,default

下面为了识别多次备份,加入时间戳,方便区分不同备份。

k8s-backup-$TIME   备份的名字,这个就引用了前面的变量

--kubeconfig ~/.kube/config  默认的,可以不写

--include-namespaces=demo 要备份的名称空间,如果多个,逗号隔开

如果要备份数据 --default-volumes-to-fs-backup加上

当前存储不支持快照  --snapshot-volumes=false

velero backup create k8s-backup-$TIME --kubeconfig ~/.kube/config --include-namespaces=demo --default-volumes-to-fs-backup --snapshot-volumes=false --wait

----------------------------------------------------------------------------------


[root@master ~]# TIME=`date +%F-%H-%M-%S`

[root@master ~]# velero backup create k8s-backup-$TIME --include-namespaces=demo --default-volumes-to-fs-backup --snapshot-volumes=false

Backup request "k8s-backup-2025-08-04-20-13-42" submitted successfully.
Run `velero backup describe k8s-backup-2025-08-04-20-13-42` or `velero backup logs k8s-backup-2025-08-04-20-13-42` for more details.


submitted successfully.  备份就提交完成

查看是否备份结束的日志   velero backup describe k8s-backup-2025-08-04-20-13-42

[root@master ~]# velero backup describe k8s-backup-2025-08-04-20-13-42
Name:         k8s-backup-2025-08-04-20-13-42
Namespace:    velero
Labels:       velero.io/storage-location=default
Annotations:  velero.io/resource-timeout=10m0s
              velero.io/source-cluster-k8s-gitversion=v1.21.5
              velero.io/source-cluster-k8s-major-version=1
              velero.io/source-cluster-k8s-minor-version=21

Phase:  Completed


Namespaces:
  Included:  demo
  Excluded:  <none>

Resources:
  Included:        *
  Excluded:        <none>
  Cluster-scoped:  auto

Label selector:  <none>

Or label selector:  <none>

Storage Location:  default

Velero-Native Snapshot PVs:  false
Snapshot Move Data:          false
Data Mover:                  velero

TTL:  720h0m0s

CSISnapshotTimeout:    10m0s
ItemOperationTimeout:  4h0m0s

Hooks:  <none>

Backup Format Version:  1.1.0

Started:    2025-08-04 20:18:10 +0800 CST
Completed:  2025-08-04 20:18:12 +0800 CST

Expiration:  2025-09-03 20:18:09 +0800 CST

Total items to be backed up:  14
Items backed up:              14

Backup Volumes:
  Velero-Native Snapshots: <none included>

  CSI Snapshots: <none included>

  Pod Volume Backups: <none included>

HooksAttempted:  0
HooksFailed:     0

可以看到资源是已经创建出来,备份已经完成,velero客户端也可以去查看备份。

[root@master ~]# kubectl get backup -A
NAMESPACE   NAME                             AGE
velero      k8s-backup-2025-08-04-20-13-42   4m32s

[root@master ~]# velero backup get
NAME                             STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
k8s-backup-2025-08-04-20-13-42   Completed   0        0          2025-08-04 20:18:10 +0800 CST   29d       default            <none>

数据其实已经备份到minio去了,这样数据就已经备份完成。

数据恢复

如果k8s都启动不起来了,那使用velero是没用的。

[root@master ~]# kubectl get pod -o wide -n demo
NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
myapp-659c5c8476-z24g8   1/1     Running   0          16s   10.233.90.5   node1   <none>           <none>

[root@master ~]# kubectl delete ns demo
namespace "demo" deleted

先查到备份,然后指定从哪个版本进行还原

[root@master ~]# velero get backup
NAME                             STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
k8s-backup-2025-08-04-20-13-42   Completed   0        0          2025-08-04 20:18:10 +0800 CST   29d       default            <none>

[root@master ~]# velero restore create --from-backup k8s-backup-2025-08-04-20-13-42  --wait

Restore request "k8s-backup-2025-08-04-20-13-42-20250804203741" submitted successfully.
Waiting for restore to complete. You may safely press ctrl-c to stop waiting - your restore will continue in the background.
.
Restore completed with status: Completed. You may check for more information using the commands `velero restore describe k8s-backup-2025-08-04-20-13-42-20250804203741` and `velero restore logs k8s-backup-2025-08-04-20-13-42-20250804203741`.

[root@master ~]# kubectl get restore -A
NAMESPACE   NAME                                            AGE
velero      k8s-backup-2025-08-04-20-13-42-20250804203741   5m14s

[root@master ~]# velero get restore
NAME                                            BACKUP                           STATUS      STARTED                         COMPLETED                       ERRORS   WARNINGS   CREATED                         SELECTOR
k8s-backup-2025-08-04-20-13-42-20250804203741   k8s-backup-2025-08-04-20-13-42   Completed   2025-08-04 20:37:42 +0800 CST   2025-08-04 20:37:43 +0800 CST   0        1          2025-08-04 20:37:42 +0800 CST   <none>

红色部分意思是名称空间有了,就不需要还原了,这不是业务数据,不需要管。

[root@master ~]# kubectl get pod -n demo -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
myapp-659c5c8476-v8rkf   1/1     Running   0          10m   10.233.90.6   node1   <none>           <none>

 然后查看里面有没有对应的数据,看看redis数据还在不在。

 数据都在,到此还原已经完成。还原完成minio里面会多出还原的资源,表示还原过了,也会记录下来。

<think>嗯,用户想了解如何使用Velero实现Kubernetes集群间的备份和恢复。首先,我需要回忆一下Velero的基本功能和操作步骤。Velero是一个用于Kubernetes集群的备份恢复工具,支持跨集群操作。根据之前的引用资料,Velero可以备份资源和持久卷,并且能够迁移到其他集群。 首先,用户需要安装Velero,这可能涉及到下载客户端和配置服务器端组件。需要确保两个集群都安装了Velero,并且有正确的存储位置和快照提供者。比如,AWS的话需要S3存储桶和相应的IAM权限。接下来,备份过程应该是在源集群中创建备份,包括资源和持久卷。然后,在目标集群中恢复这个备份。 还要注意配置备份存储位置和卷快照位置,确保两个集群都能访问同一个存储后端。比如,使用同一个S3桶。同时,可能需要处理不同集群的上下文切换,使用kubectx或者kubeconfig文件来切换源和目标集群。 另外,用户可能需要了解如何验证备份是否成功,以及恢复后的应用是否正常运行。这包括检查资源的状态和持久卷是否正确挂载。可能还需要处理一些注意事项,比如集群的命名空间是否一致,存储类是否兼容等。 根据引用资料,Velero备份的是资源的YAML文件,因此跨集群恢复时需要确保目标集群的Kubernetes版本和资源定义兼容。如果目标集群的存储类不同,可能需要修改备份中的存储类名称,或者配置Velero的转换规则。 最后,用户可能需要具体的操作步骤和示例命令,比如velero backup create和velero restore create,以及如何指定--from-backup参数。同时,应该提醒用户在进行生产环境操作前,先在测试环境验证流程,以避免数据丢失或配置错误。</think>### 使用Velero实现Kubernetes集群间备份与恢复的步骤 #### 1. **前提条件** - **源集群和目标集群**均安装Velero客户端及服务端组件[^4] - 配置共享存储(如AWS S3、Azure Blob Storage等)作为备份存储位置(BackupStorageLocation) - 若需备份持久卷(PV),需确保存储提供商支持卷快照(VolumeSnapshot)功能[^1] #### 2. **跨集群备份与恢复流程** **步骤1:源集群创建备份** ```bash # 备份全部资源(按需调整--include-namespaces参数) velero backup create full-cluster-backup \ --include-resources '*' \ --include-cluster-resources=true \ --storage-location=s3-primary # 备份持久卷(需配置VolumeSnapshotLocation) velero backup create pv-backup \ --snapshot-volumes \ --storage-location=s3-primary \ --volume-snapshot-locations=aws-us-west-1 ``` **步骤2:目标集群配置恢复环境** ```bash # 配置相同的备份存储位置 velero backup-location create s3-primary \ --provider aws \ --bucket velero-backups \ --config region=us-west-1 # 验证备份可见性 velero backup get --storage-location=s3-primary ``` **步骤3:执行跨集群恢复** ```bash # 恢复应用资源 velero restore create cross-cluster-restore \ --from-backup full-cluster-backup \ --restore-volumes=true \ --storage-location=s3-primary # 监控恢复进度 velero restore describe cross-cluster-restore ``` #### 3. **关键配置说明** - **备份存储位置同步**:需确保目标集群能访问源集群的备份存储桶 - **资源过滤**:通过`--include-resources`和`--exclude-resources`控制备份范围 - **命名空间映射**:使用`--namespace-mappings`参数处理不同命名空间名称的场景 - **存储类转换**:通过`--storage-class-config`调整PV存储类适配目标集群环境[^3] #### 4. **验证与注意事项** - 检查恢复日志:`velero restore logs <RESTORE_NAME>` - 验证持久卷绑定状态:`kubectl get pvc -n <NAMESPACE>` - 注意集群版本兼容性(推荐相同Kubernetes版本) - 处理RBAC权限差异问题[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值