ETCD之旅:備份與還原的數據守護

閱讀時間約 12 分鐘

ETCD是Kubernetes cluster中非常重要的元件,不論你未來會導入那家的備份方案,一定要知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。

Cluster出了問題,只能用大絕招了

Cluster出了問題,只能用大絕招了

本文將分成三大部分進行說明:

  1. 何謂ETCD
  2. ETCD的備份
  3. ETCD的還原
  4. 結論

那就開始吧!!


1. 何謂ETCD

基本流程

基本流程

Kubernetes使用ETCD (key-value)來儲存所有資料(包含configuration data, state, metadata)。ETCD會允許所有的K8S節點可以進行讀寫。

簡單來說,ETCD負責儲存系統「目前」的狀態與「期望」的狀態。包含當執行 “kubectl get XXX”所得到的結果,或是”kubectl create XXX”所建立的物件都會去更新ETCD的內容。

http://thesecretlivesofdata.com/raft/

http://thesecretlivesofdata.com/raft/

ETCD之間採用RAFT演算法進行溝通,1個Cluster至少需要3個節點(奇數),如果要更了解RAFT演算法是怎麼運作的,以下網站看到更清楚的說明Leader是如何被選出來的(Leader Election)、資料是怎麼進行複製到其他節點又能維持一致性(Log Replication),RAFT演算法主要是解決什麼問題等等。


2. ETCD的備份

#------------------------------------------------
# S21. 取得ETCDCTL utility
#------------------------------------------------
[master]# ETCD_RELEASE=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest|grep tag_name | cut -d '"' -f 4)
[master]# echo $ETCD_RELEASE
v3.5.9

[master]# wget https://github.com/etcd-io/etcd/releases/download/${ETCD_RELEASE}/etcd-${ETCD_RELEASE}-linux-amd64.tar.gz
[master]# tar zxvf etcd-v3.5.9-linux-amd64.tar.gz
[master]# cd etcd-v3.5.9-linux-amd64
[master]# ls -al
[master]# etcdctl version
raw-image
#----------------------------------------------------------
# S22. 取得必要資訊,此步驟將會取得以下資訊,取得的方式有三種(任選)
#-----------------------------------------------------------
(1) etcd endpoint : --endpoint
(2) ca certificate: --cacert
(3) server certificate : --cert
(4) server key : --key
#----------------------------------------------------------
# Method1
#----------------------------------------------------------
[master]# vim /etc/kubernetes/manifests/etcd.yaml
raw-image
#----------------------------------------------------------
# Method2
#----------------------------------------------------------
[master]# kubectl get po -n kube-system
[master]# kubectl describe pod etcd-master-node -n kube-system
raw-image
#----------------------------------------------------------
# Method3
#----------------------------------------------------------
[master]# cat /etc/kubernetes/manifests/etcd.yaml |grep listen
[master]# cat /etc/kubernetes/manifests/etcd.yaml |grep file
raw-image
raw-image
#----------------------------------------------------------
# S23. 進行備份動作
#-----------------------------------------------------------
[master]# ETCDCTL_API=3 etcdctl \
--endpoints=https://10.107.88.12:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /root/etcd/etcd.db
raw-image
# Verify

[master]# ETCDCTL_API=3 etcdctl --write-out=table snapshot status /root/etcd/etcd.db
raw-image

3.ETCD的還原

以下利用一個測試來進行驗證與還原,情境如下:

  • 還原前:default namespace沒有任何內容
  • 進行備份
  • 在default namespace下建立一個nginx pod
  • 建立一個新的資料夾,將資料還原至新的位置
  • 修改manifest讓ETCD使用新的位置
  • 還原後:default namespace內是否回到沒有資料的狀態
#------------------------------------------------
# S3-1.還原前:default namespace沒有任何內容
#------------------------------------------------
[master]# kubectl get default
No resources found in default namespace.
#-----------------------------------------------
# S3-2.進行備份
#-----------------------------------------------
[master]# ETCDCTL_API=3 etcdctl \
--endpoints=https://10.107.88.12:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /root/etcd/etcd-01.db
raw-image
#-------------------------------------------
# S3-3.default ns下建立一個nginx pod
#-------------------------------------------
[master]# kubectl run testpod --image=nginx -n default
raw-image
#-----------------------------------------------
# S3-4. 建立一個新的資料夾,將資料還原至新的位置
#-----------------------------------------------
[master]# mkdir /root/etcd-backup
[master]# ETCDCTL_API=3 etcdctl --data-dir="/root/etcd-backup" \
--endpoints=https://10.107.88.12:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot restore /root/etcd/etcd-01.db
raw-image
#-------------------------------------------------
# S3-5. 此時狀態還沒還原
#-------------------------------------------------
[master]# kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
testpod 1/1 Running 0 6m2s
#-------------------------------------------------------------
# S3-6. 編輯/etc/kubernetes/manifests/etcd.yaml,指向上述還原的新目錄
#-------------------------------------------------------------
[master]# tree /root/etcd-backup
[master]# vim /etc/kubernetes/manifests/etcd.yaml
raw-image
raw-image
raw-image
#------------------------------------------------------
# S3-7. 存檔後,等候幾分鐘讓ETCD更新狀態(此時api沒有回應)
#------------------------------------------------------
[master]# kubectl get pod -n default
raw-image

以上就完成最基本的ETCD 還原動作。


4.結論

接下來的文章,我們將會針對一些其他的情境進行測試。個人建議除了ETCD的備份外,建議還要再加入像是Velero等軟體來另外對App做更進一步的保護,對整個Kubernetes cluster的環境能更加有保障。

同時,ETCD支援定期自動備份(透過job),以及手動備份(透過指令)的方式,這兩種方式都可以考慮納入備份策略之中,個人建議直接透過Job的方式來進行備份,同時成功失敗再另外寫入日誌檔。此外,也應該定期測試和驗證備份的完整性,以確保在災難發生時,可以正確地還原回來。


Reference:

15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
本篇說明在Kubernetes平台上的Job資源類型的類型、實務、應用場景
今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
本篇將補完上一篇所提到關於StatefulSet的實作部份。
本篇將說明關於StatefulSet的基本概念
所謂daemonset,簡單來說就是在每個節點上部署一個Pod副本。當今天有新的主機節點加入時,就自動再上面部署一個Pod副本。移除節點時,也會自動將Pod副本移除。
本篇說明在Kubernetes平台上的Job資源類型的類型、實務、應用場景
今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
本篇將補完上一篇所提到關於StatefulSet的實作部份。
本篇將說明關於StatefulSet的基本概念
所謂daemonset,簡單來說就是在每個節點上部署一個Pod副本。當今天有新的主機節點加入時,就自動再上面部署一個Pod副本。移除節點時,也會自動將Pod副本移除。
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
本文介紹了在K8S Cluster出現問題時,透過ETCD的備份來還原Cluster的方法。包括ETCD的資料類型、備份、還原以及相關建議,並提出了自動進行ETCD備份作業和備份存放位置的重要性。
Thumbnail
從官網可以知道,我們在建立一組高可用的Kubernetes Cluster時,針對ETCD有二種做法,一種是與Master節點共用,另一種則是將ETCD再獨立出來三個節點成為一組Cluster來進行運作。 本文將說明如何建置出外部的ETCD Cluster,並以Static Pod的方式運行與管理
Thumbnail
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
Thumbnail
建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。
Thumbnail
知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。
Thumbnail
寫滿了30篇之後,突然覺得自己似乎達到了一個小小里程碑,然後,就停滯了。 【想成長就要繼續,停滯當成是小休息,不能是停止】 其實也不算完全停滯,七月份還去了美國一趟,去了半個月,去了很多地方,但也花了好多錢,到現在回來兩個月都還在揹卡債的狀態,值得嗎? 當然值得! 很多事情就是要把握當下,不要留
Thumbnail
決定出遊 我的大學母校寄來了一封電郵是關於邀請系友回校相聚,我看了一下時間,剛好那週是有空的,有點心動,但是如果要出席,我才不會甘於只是回去參加活動,一定也要找找當地認識的人相聚,於是我想起了我的學姊。我的學姊一家也是有信仰的人,而且我曾經去她們家拜訪過,經驗相當愉快,除此之外,當地還有我的學妹,因
Thumbnail
在吐露港口乾涸 漁網收聚之前 我攀上疲乏的小白鷺 獨對銀河廣闊而星如淚 回眸 我的青春 落在背後如瓷盤上的貝殼 掏空飽食後惹來成群蒼蠅
Thumbnail
✽原分享於個人臉書「韻婷」因覺得風景很美,故於方格子再次編輯分享。 【重要資訊摘要】 ▲實際搭乘日:2022-06-24下午15:40(美西時間) ◎航程90分鐘 ◎船務公司官網: https://redandwhite.com/schedule/ ◎購票平台:KKDAY
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
本文介紹了在K8S Cluster出現問題時,透過ETCD的備份來還原Cluster的方法。包括ETCD的資料類型、備份、還原以及相關建議,並提出了自動進行ETCD備份作業和備份存放位置的重要性。
Thumbnail
從官網可以知道,我們在建立一組高可用的Kubernetes Cluster時,針對ETCD有二種做法,一種是與Master節點共用,另一種則是將ETCD再獨立出來三個節點成為一組Cluster來進行運作。 本文將說明如何建置出外部的ETCD Cluster,並以Static Pod的方式運行與管理
Thumbnail
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
Thumbnail
建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。
Thumbnail
知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。
Thumbnail
寫滿了30篇之後,突然覺得自己似乎達到了一個小小里程碑,然後,就停滯了。 【想成長就要繼續,停滯當成是小休息,不能是停止】 其實也不算完全停滯,七月份還去了美國一趟,去了半個月,去了很多地方,但也花了好多錢,到現在回來兩個月都還在揹卡債的狀態,值得嗎? 當然值得! 很多事情就是要把握當下,不要留
Thumbnail
決定出遊 我的大學母校寄來了一封電郵是關於邀請系友回校相聚,我看了一下時間,剛好那週是有空的,有點心動,但是如果要出席,我才不會甘於只是回去參加活動,一定也要找找當地認識的人相聚,於是我想起了我的學姊。我的學姊一家也是有信仰的人,而且我曾經去她們家拜訪過,經驗相當愉快,除此之外,當地還有我的學妹,因
Thumbnail
在吐露港口乾涸 漁網收聚之前 我攀上疲乏的小白鷺 獨對銀河廣闊而星如淚 回眸 我的青春 落在背後如瓷盤上的貝殼 掏空飽食後惹來成群蒼蠅
Thumbnail
✽原分享於個人臉書「韻婷」因覺得風景很美,故於方格子再次編輯分享。 【重要資訊摘要】 ▲實際搭乘日:2022-06-24下午15:40(美西時間) ◎航程90分鐘 ◎船務公司官網: https://redandwhite.com/schedule/ ◎購票平台:KKDAY