iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 14
0
DevOps

從題目中學習k8s系列 第 14

【從題目中學習k8s】-【Day14】第六題 - etcd backup


title: 【從題目中學習k8s】-【Day14】第六題 - etcd backup
description: 以無比的恆毅力堅持30天鍊成鐵人--連續30天,一天發表一篇IT技術文章

【從題目中學習k8s】-【Day14】第六題 - etcd backup

tags: DevOps CICD K8s Docker

Question

Take a backup of the etcd cluster and save it to /tmp/etcd-backup.db

概念

這題的題目好短阿,肯定很簡單

前幾天我們有提過,所有K8s objects的資料都儲存在etcd之中。定期備份etcd對於在災難情況下(例如所有Control Plane節點掛掉)恢復Kubernetes集群是非常重要的。snapshot file包含所有Kubernetes的狀態和關鍵訊息。為了確保Kubernetes中敏感資料的安全,盡量將snapshot file進行加密。
這題是考etcd的集群備份,這題很重要etcd的考點幾乎都是集群備份,畢竟這也是etcd最重要的目的。etcd備份需要借助K8s強大的官方文件,參考這裡當中的Backing up an etcd clusteretcd的備份有兩種方式:

  • Built-in snapshot
    etcd支持內建snapshot,因此備份etcd集群很容易。可以使用etcdctl snapshot save命令從集群內物件中獲取,也可以從當前未被etcd process使用的etcd資料目錄中複製member/snap/db 文件。
  • Volume snapshot
    如果etcd在支持備份的Volume(例如Amazon Elastic Block Store)上運行,可以通過獲取存Volume的snapshot來備份。

這邊補充一下Snapshot的概念好了。Snapshot又稱為快照,就像照相一樣,在某個時間點,將硬碟目前的整個狀態儲存起來,以作為將來還原的備份依據。
Snapshot是幾乎所有的儲存服務設備都會提供的功能,就像是幫你硬碟上的資料照張像一樣,把這個目前的狀態記錄下來,以備將來還原之用,跟Windows上的系統還原意義差不多。
Souece: https://ithelp.ithome.com.tw/articles/10010377

因為我們還沒有學過Volume的概念,我們就用第一種方式Built-in snapshot來備份etcd吧! 具體步驟如下:

  1. 以Built-in snapshot方法備份etcd
  2. 備份的資料儲存在 /tmp/etcd-backup.db 目錄中

Answer

## 下載etcd-client
$ apt install etcd-client

## 先檢查etcd版本
## 使用etcd v3的版本時,需要設置環境變數ETCDCTL_API=3
$ ETCDCTL_API=3 etcdctl version

## 進入etcd檔案目錄
## 因為etcd是static pod,所以etcd檔案目錄即是static pod所在目錄
$ cd /etc/kubernetes/manifests
$ cat etcd.yaml

...
    ## 找到這些檔案的路徑,作為之後參數使用
    - --advertise-client-urls=https://172.17.0.14:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    ...
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    ...
...

## 連線到etcd例項,並列出member,須帶入etcd.yaml中的參數
$ ETCDCTL_API=3 etcdctl member list --endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt 
a9a3a87b9b08ff5e, started, g8master, https://192.168.132.241:2380, https://192.168.132.241:2379

## 以etcdctl snapshot save備份
$ ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db \
--endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt 
Snapshot saved at /tmp/etcd-backup.db

## 檢查備份檔案
$ ETCDCTL_API=3 etcdctl snapshot status /tmp/etcd-backup.db -w table \
--endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt 
+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 24b6552d |  5488124 |       1113 |     4.6 MB |
+----------+----------+------------+------------+

etcdctl is a command line client for etcd
使用export ETCDCTL_API=3命令將etcdctl clientETCDCTL_API環境變數版本設定為3

因為Kubernetes集群使用https,因此需要指定--cert-file--key-file--ca-file三個參數,參數檔案都位於 /etc/kubernetes/pki/etcd目錄下。

至於要怎麼知道參數名稱是--cert--key--cacert,它們又代表甚麼意義呢?可以透過ETCDCTL_API=3 etcdctl snapshot save -h命令查找:

  • --cert=""
    identify secure client using this TLS certificate file
  • --key=""
    identify secure client using this TLS key file
  • --cacert=""
    verify certificates of TLS-enabled secure servers using this CA bundle

不加--endpoints參數時,默認訪問的是https://127.0.0.1:2379


結論

今天介紹了etcd的備份方法,etcd的備份在K8s中是很重要的部分,考試也會出現,大家要把握住喔!好啦,今天就到這囉~ 謝謝大家~

參考資料

儲存技術ABC 之 Snapshot
ETCD 使用
Operating etcd clusters for Kubernetes

Thank you!

You can find me on

  • george4908090@gmail.com

上一篇
【從題目中學習k8s】-【Day13】第五題 - Secret
下一篇
【從題目中學習k8s】-【Day15】第七題 - Volume
系列文
從題目中學習k8s31

尚未有邦友留言

立即登入留言