---apiVersion:v1kind:Namespacemetadata:name:velero---apiVersion:apps/v1kind:Deploymentmetadata:namespace:veleroname:miniolabels:component:miniospec:strategy:type:Recreateselector:matchLabels:component:miniotemplate:metadata:labels:component:miniospec:volumes:- name:storageemptyDir:{}- name:configemptyDir:{}containers:- name:minioimage:minio/minio:latestimagePullPolicy:IfNotPresentargs:- server- /storage- --config-dir=/config- --console-address=:9001env:- name:MINIO_ACCESS_KEYvalue:"minio"- name:MINIO_SECRET_KEYvalue:"minio123"ports:- containerPort:9000volumeMounts:- name:storagemountPath:"/storage"- name:configmountPath:"/config"---apiVersion:v1kind:Servicemetadata:namespace:veleroname:miniolabels:component:miniospec:# ClusterIP is recommended for production environments.# Change to NodePort if needed per documentation,# but only if you run Minio in a test/trial environment, for example with Minikube.type:NodePortports:- name:apiport:9000targetPort:9000nodePort:32000- name:consoleport:9001targetPort:9001nodePort:32001selector:component:minio---apiVersion:batch/v1kind:Jobmetadata:namespace:veleroname:minio-setuplabels:component:miniospec:template:metadata:name:minio-setupspec:restartPolicy:OnFailurevolumes:- name:configemptyDir:{}containers:- name:mcimage:minio/mc:latestimagePullPolicy:IfNotPresentcommand:- /bin/sh- -c- "mc --config-dir=/config config host add velero http://minio:9000 minio minio123 && mc --config-dir=/config mb -p velero/velero"volumeMounts:- name:configmountPath:"/config"
$ kubectl apply -f examples/nginx-app/base.yaml
namespace/nginx-example created
deployment.apps/nginx-deployment created
service/my-nginx created
# 查看资源清单$ kubectl get all -n nginx-example
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-5c844b66c8-t5l9z 1/1 Running 0 27h
pod/nginx-deployment-5c844b66c8-vlkqj 1/1 Running 0 27h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-nginx LoadBalancer 172.21.18.168 192.168.102.51 80:31831/TCP 27h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 2/2 22 27h
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-5c844b66c8 222 27h
备份测试应用
1
2
3
$ velero backup create nginx-backup --include-namespaces nginx-example
Backup request "nginx-backup" submitted successfully.
Run `velero backup describe nginx-backup` or `velero backup logs nginx-backup`for more details.
选项:
--include-namespaces:指定命名空间
--selector:标签选择器,如app=nginx
查看备份列表
1
2
3
4
5
6
7
8
9
10
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
nginx-backup Completed 00 2024-08-15 11:17:18 +0800 CST 28d default <none>
# 查看备份详细信息$ velero backup describe nginx-backup
# 查看备份日志$ velero backup logs nginx-backup
# 删除nginx-example命名空间和资源$ kubectl delete namespace nginx-example
# 检查是否删除$ kubectl get all -n nginx-example
No resources found in nginx-example namespace.
恢复资源
1
2
3
4
5
6
7
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
nginx-backup Completed 00 2024-04-06 21:47:16 +0800 CST 29d default <none>
$ velero restore create --from-backup nginx-backup
Restore request "nginx-backup-20240406215611" submitted successfully.
Run `velero restore describe nginx-backup-20240406215611` or `velero restore logs nginx-backup-20240406215611`for more details.
$ velero restore get
NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR
nginx-backup-20240406215611 nginx-backup Completed 2024-04-06 21:56:11 +0800 CST 2024-04-06 21:56:12 +0800 CST 02 2024-04-06 21:56:11 +0800 CST <none>
# 查看详细信息$ velero restore describe nginx-backup-20240406215611
# 检查资源状态$ kubectl get all -n nginx-example
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-5c844b66c8-t5l9z 1/1 Running 0 27h
pod/nginx-deployment-5c844b66c8-vlkqj 1/1 Running 0 27h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-nginx LoadBalancer 172.21.18.168 192.168.102.51 80:31831/TCP 27h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 2/2 22 27h
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-5c844b66c8 222 27h