k8s備份恢復實踐--velero

blog-elvin-vip發表於2024-07-15

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支援在備份任務執行之前和執行後在容器中執行一些預先設定好的命令

相關文章