k8s备份恢复实践--velero
使用Velero备份k8资源到minio,阿里云oss,七牛云Kodo
环境linux + kubectl
#1.velero简介
- Velero是用于Kubernetes资源备份、恢复、迁移的开源工具
- 客户端(velero命令行) -> 服务端(部署在k8s) -> 对象储存(s3或兼容s3储存)
- velero将k8s资源备份为json文件,可以通过namespace、label等进行筛选备份或恢复
- github地址 https://github.com/vmware-tanzu/velero
#2.velero安装
#2.1 安装velero客户端
#wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.2/velero-v1.13.2-linux-amd64.tar.gz
wget http://files.elvin.vip/k8s/velero-v1.13.2-linux-amd64.tar.gz
tar -zxf velero-v1.13.2-linux-amd64.tar.gz
mv velero-v1.13.2-linux-amd64/velero /usr/local/bin/
velero version
#启用命令补全
velero completion bash > /etc/bash_completion.d/velero
. /etc/bash_completion.d/velero
#查看帮助
velero -h
#2.2 安装velero服务端
在kubernetes集群安装velero 需要配置好kubectl和kubeconfig
#查看k8s node
kubectl get node
#2.2.1 k8s安装velero使用minio储存
docker安装mino
#创建minio
docker rm -f minio
docker run -dit --name minio -u 0 \
-h minio --net host --restart always \
-e MINIO_ROOT_USER="minio" \
-e MINIO_ROOT_PASSWORD="miniow2p0w2r4" \
-v /data/minio:/data -w /data \
registry.aliyuncs.com/elvin/minio:2022 \
minio server /data --console-address '0.0.0.0:9001'
#创建bucket velero
docker exec -it minio bash -c 'mc mb velero; mc ls'
#minio储存地址 http://minio-ip:9000
k8s安装minio
kubectl -f https://gitee.com/alivv/elvin-demo/raw/master/k8s/3.data-minio.yml
#volumes使用hostPath: /opt 可根据需求修改pvc部分
#minio储存地址 http://minio.kube-public.svc:9000
安装velero使用k8s-minio储存
#创建凭证 create auth
mkdir -p /k8s/velero
cat >~/k8s/velero/auth-minio.txt <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = miniow2p0w2r4
EOF
#velero install
velero install \
--image registry.aliyuncs.com/elvin/velero:v1.13.2 \
--plugins registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2 \
--provider aws \
--bucket velero \
--use-volume-snapshots=false \
--secret-file ~/k8s/velero/auth-minio.txt \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.kube-public.svc:9000
#自定义镜像地址 --image --plugins
velero version
#2.2.2 k8s安装velero使用阿里云oss
在阿里云oss创建bucket
bucket名称elvin-k8s region为oss-cn-shanghai
oss的region和访问域名 https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints
#创建凭证 create auth
mkdir -p /k8s/velero/velero
cat >~/k8s/velero/velero/auth-oss.txt <<EOF
[default]
aws_access_key_id = LTAI4FoDtp4y7ENqv9X4emSE
aws_secret_access_key = lVNCxCVGciaJqUa5axxx
EOF
#install
velero install \
--image registry.aliyuncs.com/elvin/velero:v1.13.2 \
--plugins registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2 \
--provider aws \
--use-volume-snapshots=false \
--bucket elvin-k8s \
--secret-file ~/k8s/velero/auth-oss.txt \
--backup-location-config region=oss-cn-shanghai,s3ForcePathStyle="false",s3Url=http://oss-cn-shanghai.aliyuncs.com
#oss使用virtual hosting访问方式,配置s3ForcePathStyle="false"
velero version
#2.2.3 k8s安装velero使用七牛云
在七牛云创建储存https://portal.qiniu.com/kodo/bucket
获取S3空间域名,打开创建的储存,空间概述,S3 域名
,点击查询
七牛云储存region和访问域名 https://developer.qiniu.com/kodo/4088/s3-access-domainname
#创建凭证 create auth
mkdir -p /k8s/velero/velero
cat >~/k8s/velero/auth-qiniu.txt <<EOF
[default]
aws_access_key_id = foqsLZBJSr7yF59_3sB5RguezMh0l223s2NcC9Kz
aws_secret_access_key = BTBwrrCE7TLKjztpsBZX2GA45Cb3yR9Fxxxx
EOF
#install
velero install \
--image registry.aliyuncs.com/elvin/velero:v1.13.2 \
--plugins registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2 \
--provider aws \
--use-volume-snapshots=false \
--bucket 817nb3 \
--secret-file ~/k8s/velero/auth-qiniu.txt \
--backup-location-config region=cn-east-1,s3ForcePathStyle="false",s3Url=http://s3.cn-east-1.qiniucs.com
#七牛云bucket使用S3空间域名前部分
velero version
#3. 使用velero备份和恢复
#3.1 备份和恢复测试
#部署nginx-demo
kubectl apply -f https://gitee.com/alivv/elvin-demo/raw/master/k8s/2.1.nginx-demo.yml
kubectl get pod
#备份namespaces为default的所有资源
velero backup create k8s-backup-test --include-namespaces default
#查看备份
velero backup get
#删除nginx-demo
kubectl delete -f https://gitee.com/alivv/elvin-demo/raw/master/k8s/2.1.nginx-demo.yml
kubectl get pod
#使用velero恢复nginx-demo
velero restore create nginx-demo \
--from-backup k8s-backup-test \
--include-namespaces default \
--selector name=nginx-demo
#查看恢复
velero restore get
#查看pod nginx-demo
kubectl get pod -n default
#卸载velero后重新安装以验证备份正常
velero uninstall
#查看备份
velero backup get
#3.2 备份和定时任务
#备份所有资源保留72小时
velero backup create k8s-bakcup-all-$(date +%F) --ttl 72h
#查看备份
velero backup get
#周期性任务
velero schedule create -h
#定时任务,每天16点(UTC时区)备份,保留7天(168h)
velero create schedule k8s-bakcup-all --schedule="0 16 * * *" --ttl 168h
#查看定时任务
velero get schedule
#3.3 velero备份和迁移
- 创建velero使用的储存
- 在k8s-A集群安装velero并备份
- 在k8s-B集群安装velero并恢复,即完成k8s迁移
#4 velero其它实例
#velero基本命令
velero get backup #查看备份
velero get schedule #查看定时备份
velero get restore #查看已有的恢复
velero get plugins #查看插件
#备份所有
velero backup create k8s-bakcup-all --ttl 72h
#恢复集群所有备份,对已经存在的服务不会覆盖
velero restore create --from-backup k8s-bakcup-all
#仅恢复default的namespace,包括集群资源
velero restore create --from-backup k8s-bakcup-all --include-namespaces default --include-cluster-resources=true
#恢复储存pv,pvc
velero restore create pvc --from-backup k8s-bakcup-all --include-resources persistentvolumeclaims,persistentvolumes
#恢复指定资源deployments,configmaps
velero restore create deploy-test --from-backup k8s-bakcup-all --include-resources deployments,configmaps
#筛选备份name=nginx-demo -l, --selector:通过指定label来匹配要backup的资源
velero backup create nginx-demo --from-backup k8s-bakcup-all --selector name=nginx-demo
#筛选备份恢复对象
--include-namespaces 筛选命名空间所有资源,不包括集群资源
--include-resources 筛选的资源类型
--exclude-resources 排除的资源类型
--include-cluster-resources=true 包括集群资源
#将test1命名空间资源恢复到test2
velero restore create test1-test2 --from-backup k8s-bakcup-all --namespace-mappings test1:test2
#备份hooks
#Velero支持在备份任务执行之前和执行后在容器中执行一些预先设定好的命令