K8s:velero备份数据与集群迁移

velero

学习视频:
https://www.bilibili.com/video/BV1Ur4y1J7oo/
https://www.bilibili.com/video/BV1HTMMzFEuS

学习资料
https://blog.csdn.net/Richardlygo/article/details/142255544
架构图

1、作用
1、备份还原k8s资源
2、迁移k8s集群
velero跟etcd的快照备份区别:

1、etcd整库备份、一旦出问题、就所有恢复、会影响别的库。
2、velero可以分库备份、比如按照namespace级别备份、十个namespace分开备份、业务出现问题单独恢复、存档到ceph或者oss
3、一个经过APIserver、一个直接对ETCD集群备份。
4、velero需要保证集群正常运行、etcd不需要经过k8s集群。
2、velero架构组件
客户端:就是velero客户端工具经过kubeconfig认证后调用APIserver、然后使用Controller控制器备份。

服务端:以pod方式运行、Controller控制器(Backup Controller)

插件:(存储:OSS 、S3 )
3、备份流程原理

备份还原流程讲解:

4、部署velero环境安装
1、客户端:k8s集群:10.0.0.200(部署velero客户端工具和服务端pod)

2、服务端:部署两个控制器、Backup Controller和Restore Controller(pod方式运行)

3、存储插件:minio集群:10.0.0.202(部署mimio存储工具、部署在集群外部、保证高可用状态)

velero下载地址:github:https://github.com/vmware-tanzu/velero/releases

国内代理地址:https://githubfast.com/vmware-tanzu/velero/releases

1、部署velero客户端工具

1、从github下载工具后、然后安装
	解压缩
	放到PATH路径、/usr/loacl/bin/

2、可以设置velero补全命令、方便学习
	echo "source <(velero completion bash)" >> ~/.bashrc;exit
	sudo velero completion bash > /etc/bash_completion.d/velero

2、部署minio

#支持对接的存储插件地址:
https://velero.io/docs/main/supported-providers/

#1、使用docker部署minio
docker pull minio/minio:RELEASE.2022-04-12T06-55-35Z
mkdir -p /data/minio

docker run  -d \
-p 9000:9000 \
-p 9999:9999 \
--name minio \
--restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-v /data/minio/data:/data \
minio/minio:RELEASE.2022-04-12T06-55-35Z server /data \
--console-address '0.0.0.0:9999'


#2、部署后操作
1、创建一个Buckets桶(大的文件夹)
2、创建一个授权用户、velero客户端工具执行minio操作的权限。


#3、在velero节点创建一个授权文件、写入minio创建的授权用户的key
cat > credentials-velero <<EOF
[default]
aws_access_key_id = l0zJVkghYjMiWxETjL6k
aws_secret_access_key = R5XMKeQijXdVKYOvoXhCWwupHlkbB4jUHsNfpPYK0
EOF

3、部署velero服务端工具

#注意:在k8s集群部署、直接使用客户端工具执行下面命令就ok、执行后会自定在集群内创建控制器的pod、CRD资源等
#部署命令:
velero install \
  --provider aws \
  --image velero/velero:v1.13.1 \
  --image registry.cn-beijing.aliyuncs.com/wangxiaochun/velero:v1.15.0 \
  --plugins registry.cn-beijing.aliyuncs.com/wangxiaochun/velero-plugin-for-aws:v1.11.0 \
  --backup-location region=minio,s3ForcePathStyle="true",s3Url=http://minio.wang.org:9000 \
  --bucket velero \
  --secret-file ./credentials-velero \
  --namespace velero \
  --use-node-agent \	#备份数据使用(如果备份集群资源不需要使用这个)			
  --use-volume-snapshots=false \
  --wait

#排错:如果velero启动失败就使用
kubectl  logs -f  -n  velero-system  pod-name


#部署后查看
kubectl get all  -n  velero  -o  wide
kubectl get pod  -n velero


#扩展:卸载velero

#方法一
velero   uninstall	--namespace velero
#方法二
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
5、使用velero备份数据
#1、创建两个不同的名称空间和pod
#2、执行备份命令
TIME=`date +%F-%H-%M-%S`
velero backup create k8s-backup-$TIME --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

#3、查看验证命令
1、使用k8s命令查看
kubectl get backup -A
kubectl get restore -A

2、使用velero客户端查看
velero backup get

6、使用velero还原数据
1、先删除pod、然后模拟还原

2、还原名称空间和pod命令:
velero restore create --from-backup k8s-backup-2025-06-12-17-16-32 --wait

3、查看还原资源;
kubectl get restore -A

7、velero跨k8s集群迁移数据
1、集群2安装和集群1一样的配置
安装如下:
	velero CLI
	minio连接认证、授权文件
	velero服务端、两个控制器
2、安装好信息之后、会发现能直接看到备份的信息、这是k8s发信了minio上的备份数据
		velero	backup get

3、还原命令:和在同一个集群还原命令一样
velero restore create --from-backup k8s-backup-2025-06-12-17-16-32 --wait

8、定时备份
#执行定时任务备份
velero create schedule mybackup --schedule="* * * * *"
9、如何指定资源备份
###创建资源
kubectl run net-test1 --image=centos:7.9.2009 sleep 10000000000 -n myserver
kubectl get pod -n myserver
# kubectl get deployments -n myserver

velero backup create pod-backup-202207222335 --include-cluster-resources=true --ordered-resources 
'pods=myserver/net-test1,defafut/net-test1' --namespace velero-system --include-namespaces=myserver,defafut

###恢复

kubectl delete -f /root/nginx-tomcat-case/tomcat.yaml
kubectl get pod -n myserver

velero restore create --from-backup pod-backup-202305051635 --wait \
--kubeconfig=./awsuser.kubeconfig \
--namespace velero-system


###删除pod并验证恢复:
kubectl delete -f /root/nginx-tomcat-case/tomcat.yaml
kubectl get pod -n myserver

velero restore create --from-backup pod-backup-202305051635 --wait \
--kubeconfig=./awsuser.kubeconfig \
--namespace velero-system
10、验证
删除pod并验证恢复
kubectl delete pod  net-test1 -n default


velero  restore  create   --from-backup  default-backup-20230505160307 --wait-- kubeconfig=./awsuser.kubeconfig--namespace  velero-system

kubectl get  pod  -o  wide

kubectl exec-it net-test1   bash
ping	www.jd.com
11、批量备份所有namespace:
###批量备份所有namespace:使用shell脚本、然后加到定时任务

#!/bin/bash

# 获取所有命名空间的名称
#NS_NAME=`kubectl get ns | awk '{if (NR>2){print}}' | awk '{print $1}'` 
NS_NAME=$(kubectl get ns -o jsonpath='{.items[*].metadata.name}')

# 获取当前时间戳,用于备份文件的命名
DATE=$(date +%Y%m%d%H%M%S)

# 切换到备份目录
cd /data/velero/

# 遍历每个命名空间并创建备份
for i in $NS_NAME; do
    velero backup create "${i}-ns-backup-${DATE}" \
        --include-cluster-resources=true \
        --include-namespaces "${i}" \
        --kubeconfig=/root/.kube/config \
        --namespace velero-system \
        --default-volumes-to-fs-backup=true \
        --snapshot-volumes=false
done

echo "所有命名空间的备份已完成。"

bash	/data/velero/ns-back.sh

###最后查看minio验证备份
posted @ 2024-08-07 11:26  姬高波  阅读(46)  评论(0)    收藏  举报