kubernetes 遷移容災備份(velero)


Velero備份恢復

1、velero介紹

  • Velero 是一個提供 Kubernetes 集群和持久卷的備份、遷移以及災難恢復等的開源工具。
  • Velero 是一個雲原生的災難恢復和遷移工具,它本身也是開源的, 采用 Go 語言編寫,可以安全的備份、恢復和遷移Kubernetes集群資源和持久卷。
  • Velero 是一種雲原生的Kubernetes優化方法,支持標准的K8S集群,既可以是私有雲平台也可以是公有雲。除了災備之外它還能做資源移轉,支持把容器應用從一個集群遷移到另一個集群。
  • 使用velero可以對集群進行備份和恢復,降低集群DR造成的影響。velero的基本原理就是將集群的數據備份到對象存儲中,在恢復的時候將數據從對象存儲中拉取下來。

image-20211108170750544

2、velero備份過程

  • 本地 Velero 客戶端發送備份指令。
  • Kubernetes 集群內就會創建一個 Backup 對象。
  • BackupController 監測 Backup 對象並開始備份過程。
  • BackupController 會向 API Server 查詢相關數據。
  • BackupController 將查詢到的數據備份到遠端的對象存儲。

3、velero特性

  • Velero 目前包含以下特性:
  • 支持 Kubernetes 集群數據備份和恢復
  • 支持復制當前 Kubernetes 集群的資源到其它 Kubernetes 集群
  • 支持復制生產環境到開發以及測試環境

4、velero組件

Velero 組件一共分兩部分,分別是服務端和客戶端。
服務端:運行在你 Kubernetes 的集群中
客戶端:是一些運行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的機器上

5、支持的備份組件

AWS S3 以及兼容 S3 的存儲,比如:Minio
Azure BloB 存儲
Google Cloud 存儲
Aliyun OSS 存儲(https://github.com/AliyunContainerService/velero-plugin)

Github項目地址:velero

6、適應場景

災備場景:提供備份恢復k8s集群的能力
遷移場景:提供拷貝集群資源到其他集群的能力(復制同步開發,測試,生產環境的集群配置,簡化環境配置)

安裝

下面我以騰訊雲COS為例安裝:

k8s集群版本 :1.19.3

velero版本: 1.6.3

1.1 下載velero
velero:https://github.com/vmware-tanzu/velero/releases/download/v1.4.2/velero-v1.4.2-linux-amd64.tar.gz

tar xf velero-v1.4.2-linux-amd64.tar.gz

cd  velero-v1.4.2-linux-amd64

mv velero  /bin/

chmod +x /bin/velero

查看velero命令是否安裝成功
velero -h

1.2 創建憑證

image-20211108170917250

  • 服務上創建憑證

AK和SK登錄騰訊雲,通過【訪問管理】-【訪問密鑰】-【API密鑰管理】進行查看

vim credentials-velero

[default]
3aws_access_key_id = xxx      #ak
4aws_secret_access_key = xxx  # sk

1.3 安裝

點擊存儲桶---基礎配置---基本信息就可以看到

velero install \
    --provider aws \
    --plugins ccr.ccs.tencentyun.com/public_images/velero-plugin-for-aws:v1.2.0 \
    --bucket velero-1258897006 \
    --secret-file ./credentials-velero \
    --use-volume-snapshots=false \
    --use-restic \
    --default-volumes-to-restic \
    --kubeconfig /root/.kube/config \
    --backup-location-config region="ap-nanjing",s3ForcePathStyle="false",s3ForcePathStyle="false",s3Url=http://cos.ap-nanjing.myqcloud.com

1.4 檢測

安裝完成會看到

Namespace/velero: attempting to create resource
26Namespace/velero: created
27ClusterRoleBinding/velero: attempting to create resource
28ClusterRoleBinding/velero: created
29ServiceAccount/velero: attempting to create resource
30ServiceAccount/velero: created
31Secret/cloud-credentials: attempting to create resource
32Secret/cloud-credentials: created
33BackupStorageLocation/default: attempting to create resource
34BackupStorageLocation/default: created
35Deployment/velero: attempting to create resource
36Deployment/velero: created
37DaemonSet/restic: attempting to create resource
38DaemonSet/restic: created
39Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
```

執行看日志是否有報錯
# kubectl logs deployment/velero -n velero

查看namespace velero命名空間是否創建

kubectl get ns


查看命名空間velero pod服務是否運行正常
[root@node01 ~]# kubectl get pods -n velero
NAME                      READY   STATUS    RESTARTS   AGE
restic-fv4d2              1/1     Running   0          44h
restic-pxrkg              1/1     Running   0          44h
velero-5d75cc4c45-spx8q   1/1     Running   0          44h
安裝失敗或者從新安裝執行
清理刪除velero服務(如需刪除重新安裝時使用)


kubectl delete namespace/velero clusterrolebinding/velero


kubectl delete crds -l component=velero

1.5 創建測試應用

velero-v1.4.2 文件加中有 base.yaml文件測試

velero-v1.4.2/examples/nginx-app

rw-r--r-- 1 501 dialout 1237 Mar  6  2020 base.yaml
-rw-r--r-- 1 501 dialout  521 Dec 10  2019 README.md
-rw-r--r-- 1 501 dialout 2375 Mar  6  2020 with-pv.yaml
```

[root@master velero-v1.4.2-linux-amd64]# kubectl apply -f examples/nginx-app/base.yaml

namespace/nginx-example created 
deployment.apps/nginx-deployment 
created service/my-nginx created


[root@master velero-v1.4.2-linux-amd64]# kubectl get all -n nginx-example


NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-5754944d6c-9vr2w   1/1     Running   0          115s
pod/nginx-deployment-5754944d6c-tczg9   1/1     Running   0          113s


NAME               TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/my-nginx   LoadBalancer   10.233.6.201   <pending>     80:32322/TCP   28m


NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   2/2     2            2           28m

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-5754944d6c   2         2         2       28m



執行備份 后查看COS存儲桶是否有備份文件

velero backup create nginx-backup --include-namespaces nginx-example


刪除之前創建的資源


 kubectl delete  -f examples/nginx-app/base.yaml

驗證資源已完全刪除

kubectl get all -n nginx-example

指定對應的備份名稱
velero restore create --from-backup nginx-backup 


驗證資源是否恢復

kubectl get all -n nginx-example

NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-5754944d6c-9vr2w   1/1     Running   0          8s
pod/nginx-deployment-5754944d6c-tczg9   1/1     Running   0          8s


NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/my-nginx   LoadBalancer   10.233.33.109   <pending>     80:30734/TCP   7s


NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   2/2     2            2           8s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-5754944d6c   2         2         2       8s

解析

velero install \
    --provider aws \
    --plugins ccr.ccs.tencentyun.com/public_images/velero-plugin-for-aws:v1.2.0 \
    --bucket velero-1258897006 \     #存儲桶名
    --secret-file ./credentials-velero \   #憑證 
    --use-volume-snapshots=false \
    --use-restic \                          #啟用靜態備份
    --default-volumes-to-restic \     #備份所有 pod 卷
    --kubeconfig /root/.kube/config \  #指定k8s集群配置文件;
    
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://IP:9000 #這里是剛才部署minio存儲的api接口,可以通過mino容器查看。
    
    --backup-location-config region="ap-nanjing",s3ForcePathStyle="false",s3ForcePathStyle="false",s3Url=http://cos.ap-nanjing.myqcloud.com  #雲存儲接口
    

velero 命令

#備份查看
velero  get  backup   

#查看定時備份
velero  get  schedule

#查看已有的恢復
velero  get  restore 

#查看插件
velero  get  plugins  

#備份 namespace
velero backup create NAMESPACE-backup --include-namespaces NAMESPACE

##查看備份
velero backup describe NAMESPACE-backup .

#指定對應的備份名稱
velero restore create --from-backup test-backup 

# 每日1點進行備份
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *"

# 每日1點進行備份,備份保留72小時
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *" --ttl 72h

# 每5小時進行一次備份
velero create schedule <SCHEDULE NAME> --schedule="@every 5h"

# 每日對 指定 namespace 進行一次備份 (如panshi-qtc-dev)
velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --include-namespaces panshi-qtc-dev


#恢復
velero  restore create --from-backup pvc-backup --restore-volumes


演示示例:

[root@master01 velero]# kubectl get po -n db 
NAME                             READY   STATUS    RESTARTS   AGE
retail-gitlab-54b9f56b6c-66h9w   1/1     Running   0          25d
retail-mysql-6b7f8bdfb8-s4nct    1/1     Running   2          116d
retail-redis-86bd9b5599-5tvlv    1/1     Running   0          21d

velero backup create db-backup --include-namespaces db  #備份整個db名稱空間

image-20211108174400191

restic文件備份是數據image-20211108174543689

image-20211108174559041

backup備份是yaml、pv、pvc配置文件,是以json為文本

image-20211108174814363


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM