velero 资源备份测试
使用的命令是velero backup,created就是备份,delete就是删除,down是将K8s的一些mainfest文件下载下来。
[root@master ~]# velero backup
Work with backupsUsage:velero backup [command]Available Commands:create Create a backupdelete Delete backupsdescribe Describe backupsdownload Download all Kubernetes manifests for a backupget Get backupslogs 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 backupUsage: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=falsevelero 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=falseBackup 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=10m0svelero.io/source-cluster-k8s-gitversion=v1.21.5velero.io/source-cluster-k8s-major-version=1velero.io/source-cluster-k8s-minor-version=21Phase: CompletedNamespaces:Included: demoExcluded: <none>Resources:Included: *Excluded: <none>Cluster-scoped: autoLabel selector: <none>Or label selector: <none>Storage Location: defaultVelero-Native Snapshot PVs: false
Snapshot Move Data: false
Data Mover: veleroTTL: 720h0m0sCSISnapshotTimeout: 10m0s
ItemOperationTimeout: 4h0m0sHooks: <none>Backup Format Version: 1.1.0Started: 2025-08-04 20:18:10 +0800 CST
Completed: 2025-08-04 20:18:12 +0800 CSTExpiration: 2025-09-03 20:18:09 +0800 CSTTotal items to be backed up: 14
Items backed up: 14Backup 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 --waitRestore 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里面会多出还原的资源,表示还原过了,也会记录下来。