iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
DevOps

玩耍開源k8s30天系列 第 26

day26 : k8s backup/restore/migrate with velero(上)

花了將近一個月的時間在k8s上建置各種服務,雖然大部分都是無狀態的服務可以隨時重建也不影響運行,不過大部分公司還是會希望進行備份,所以在k8s上通常會做到底層的備份、etcd備份,這兩種備份是對整個集群狀態的備份,如果要細分到pod、namespace就沒有辦法,因此今天會介紹一套k8s的備份/還原/升級工具velero。

velero是一套k8s的備份還原工具,透過crd的方式將k8s上的資源進行備份和還原作業,安裝velero之後將會有以下crd

  1. backups.velero.io
  2. backupstoragelocations.velero.io
  3. deletebackuprequests.velero.io
  4. downloadrequests.velero.io
  5. podvolumebackups.velero.io
  6. podvolumerestores.velero.io
  7. resticrepositories.velero.io
  8. restores.velero.io
  9. schedules.velero.io
  10. serverstatusrequests.velero.io
  11. volumesnapshotlocations.velero.io

透過crd可以觀察到,velero會將備份和還原都視為一種resource,根據resource的定義備份哪些namespace或是pod,同時將備份的資料存到定義的storage(例如s3、minio),所以如果想要還原,就也要在cluster上安裝velero並且連到有備份檔案的storage讓velero能夠restore;而velero 與重新透過yaml或是gitops的方式佈署服務來還原其中最大的差異在於restic這個參數,當啟用了restic的備份,就可以將pod的實際volume也備份起來(不包含hostpath),想要觀察restic的話,會發現有啟用restic的話會有一個restic的daemonset在每個node上運行唷,所以可以知道當velero收到備份的resource時,會像下圖一樣的流程由一個backup controller把相關的資訊備份上傳。
https://ithelp.ithome.com.tw/upload/images/20210926/201396619tcV3pkgs2.png
而velero的用處也不僅止於backup / restore,其實他最初的用意是當有升級或是移轉的需求時可以用velero將resources轉移到新的cluster,所以velero也能夠支援異平臺的轉移,像是地端k8s轉移到gke、eks上,openshift轉移到gke上,有些會需要用額外的工具達成,而vmware在收購了velero後也有推出許多相關的工具,有興趣的人也可以研讀TMC相關的文件。

但是回歸源頭,還是希望各位反思,自己是否真的有backup的需求,如果服務都是無狀態的並且透過gitops或是有將yaml進行保存,那麼當k8s有發生異常/損毀時,重新佈署跟透過velero還原或是etcd還原,到底有沒有需要用到velero呢?


上一篇
day25 : kong api gateway(下)
下一篇
day27 : k8s backup/restore/migrate with velero(下)
系列文
玩耍開源k8s30天31

尚未有邦友留言

立即登入留言