Kubernetes 叢集的備份與還原對於維護系統穩定性和資料安全至關重要。etcd 資料函式庫作為 Kubernetes 叢集的狀態儲存中心,其備份是整個流程的關鍵環節。本文將介紹如何使用 etcdctl 工具備份 etcd 資料函式庫,並探討 Velero 作為更自動化、更全面的備份與還原解決方案的優勢。此外,文章還涵蓋了使用 EFK 堆積疊和 Falco 監控 Kubernetes 叢集安全性和日誌管理的實務操作,包含 Kibana 視覺化和儀錶板的建立,以及 Falco 規則的客製化。透過整合這些工具,可以建立更穩固、更安全的 Kubernetes 叢集管理體系。
使用 Falco 和 EFK 進行稽核
設定 Kibana 索引
要檢視日誌或建立視覺化和儀錶板,您需要建立索引。您可以在單個 Kibana 伺服器上擁有多個索引,從而允許您從單個位置檢視不同的日誌。在我們的範例伺服器上,我們將擁有兩組不同的傳入日誌,一組以名稱 logstash 開頭,另一組以名稱 falco 開頭。
logstash 檔案容器中的資料由 Kubernetes 日誌檔案組成,其中包括由 Fluentd 轉發器轉發的所有日誌。Falco 檔案則由 Falcosidekick 轉發,並且僅包含來自 Falco Pod 的警示。為了本章的目的,我們將重點關注 Falco 檔案,因為它們只包含 Falco 資料。
- 在 Kibana 中,按一下左側的設定工具,開啟 Kibana 管理頁面。
- 若要建立索引並將其設定為預設值,請按一下瀏覽器左上角的
index patterns連結。 - 接下來,按一下右上角的按鈕以建立新的索引模式。
建立 Falco 索引模式
由於我們只想建立一個包含 Falco 資料的索引,因此在方塊中輸入 falco*。這將建立一個包含所有當前和未來 Falco 日誌的索引:
按一下
Next step按鈕繼續。在組態設定中,按一下下拉式選單並選擇
time,然後按一下Create index pattern以建立模式:最後,按一下最後一個畫面右上角的星號,將索引設定為預設索引:
現在您已經有了一個完整的 Falco 日誌記錄系統在叢集上執行。
檢視資料
要開始檢視資料,請按一下 Kibana 畫面左上角的 discover 按鈕,這將帶您到主要的 Kibana 頁面,您將在其中看到叢集中的事件:
您可以在搜尋欄位中輸入關鍵字來搜尋事件。如果您正在尋找單一型別的事件,並且知道要搜尋的值,這將非常有用。
建立儀錶板
Kibana 等日誌記錄系統的真正好處在於能夠建立自訂的儀錶板,提供對多個事件的檢視,可以按計數、平均值等進行分組。在下一節中,我們將解釋如何建立一個提供 Falco 事件集合的儀錶板。
視覺化
視覺化是資料集合的圖形表示,在我們的上下文中,來自 Kibana 索引。Kibana 包含一組視覺化工具,允許您將資料分組到表格、儀表、水平條形圖、餅圖、垂直條形圖等中。
建立新的視覺化
- 若要建立新的視覺化,請按一下左側欄中的
visualize圖示,看起來像一個小圖表。這將開啟新的視覺化選擇畫面。 - 若要選擇要建立的視覺化,請從清單中選擇它。讓我們使用一個常見的視覺化——餅圖:
設定視覺化
- 每個視覺化都需要一個來源。對於我們的範例,我們只有一個名為
falco*的索引,因此請選擇它作為來源: - 下一步是選擇指標和儲存桶。指標定義了您希望如何彙總儲存桶中的結果。儲存桶是您要視覺化的值。
對於我們的範例,我們希望我們的餅圖顯示事件優先順序的總計數,範圍從錯誤、通知和警告到偵錯。
首先,將指標彙總值設定為
Count:接下來,我們需要選擇要彙總的欄位。對於
Aggregation,選擇Terms,對於Field,選擇priority.keyword:在儲存視覺化之前,您可以按一下指標方塊頂部的箭頭按鈕來預覽結果。結果的預覽將顯示在右側窗格中:
如果結果符合您的預期,您可以按一下主檢視頂部的
Save連結來儲存視覺化。輸入視覺化的名稱,以便稍後在建立儀錶板時找到它:
當您儲存視覺化時,它將保留在畫面上,但您應該在右下角看到儲存成功的確認訊息。
建立額外的視覺化
使用我們剛才介紹的第一個視覺化的步驟,建立兩個額外的視覺化,它們使用以下引數:
- 視覺化型別:水平條形圖
- 來源:
falco* - 指標:彙總:計數
- 儲存桶:X 軸,彙總:術語,欄位:
rule.keyword - 指標:計數,大小:5,自訂標籤:前 5 個 Falco 規則
- 視覺化名稱:前 5 個 Falco 規則
- 來源:
- 視覺化型別:資料表
- 來源:
falco* - 指標:彙總:計數
- 來源:
程式碼範例與說明
Falco 和 EFK 的架構:
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333
title 程式碼範例與說明
rectangle "logs" as node1
rectangle "forward" as node2
rectangle "index" as node3
rectangle "visualize" as node4
node1 --> node2
node2 --> node3
node3 --> node4
@enduml圖表翻譯: 此圖展示了 Falco 和 EFK Stack 之間的互動關係。Falco 產生日誌並將其傳送給 Falcosidekick,後者將日誌轉發給 EFK Stack。EFK Stack 對日誌進行索引,並將結果儲存在 Kibana 中。最後,Kibana 將資料視覺化並呈現在儀錶板上。
使用 Falco 和 EFK 進行稽核
在前面的章節中,我們探討瞭如何使用 Falco 來增強 Kubernetes 叢集的稽核功能。現在,我們將介紹如何使用 EFK(Elasticsearch、Fluentd、Kibana)堆積疊來儲存和視覺化 Falco 事件。
建立視覺化
視覺化允許您以圖形化的方式呈現資料。在 Kibana 中,您可以建立多種不同型別的視覺化,例如柱狀圖、圓餅圖等。
- 建立視覺化:點選左側邊欄中的「Visualize」按鈕。
- 選擇視覺化型別:選擇您想要建立的視覺化型別,例如「Vertical bar chart」。
- 設定資料來源:選擇您要使用的資料來源,例如「falco-*」索引模式。
- 設定欄位:設定您要使用的欄位,例如「output_fields.fd.name.keyword」。
Top 5 Falco Modified Files 視覺化
- Buckets:Split rows, Aggregation: Terms, Field: output_fields.fd.name.keyword
- Metric:Count, Size: 5, Custom label: Top 5 Modified Files
- 視覺化名稱:Top 5 Falco Modified Files
建立儀錶板
儀錶板允許您將多個視覺化集合在一起,以便於閱讀和理解資料。
- 建立儀錶板:點選左側邊欄中的「Dashboard」按鈕。
- 建立新儀錶板:點選「Create new dashboard」按鈕。
- 新增視覺化:點選「Add an existing」連結,然後選擇您之前建立的視覺化。
新增 Falco 視覺化到儀錶板
- 新增「Falco - Priority Count」、「Top 5 Falco Modified Files」和「Top 5 Falco Rules」視覺化到儀錶板。
- 如果您不小心新增了重複的視覺化,可以點選視覺化右上角的齒輪圖示,然後選擇「Delete from dashboard」來刪除它。
重點回顧
- Falco 提供了 Kubernetes 所沒有的稽核功能,可以與 Kubernetes 的稽核功能結合使用,提供完整的稽核軌跡。
- EFK 堆積疊提供了一個日誌管理系統,可以儲存日誌並提供搜尋和管理介面。
- Kibana 提供了視覺化和儀錶板功能,可以用來呈現 Falco 事件和其他日誌資料。
常見問題
如果您需要編輯內建的 Falco 規則,您應該編輯哪個檔案?
- 答案:D. falco_rules.local.yaml
內容解密:
- Falco 的內建規則儲存在
falco_rules.yaml中,但您不應該直接編輯這個檔案。 - 要自定義或覆寫內建規則,您應該編輯
falco_rules.local.yaml檔案。
以下哪個是 Kubernetes 常用的日誌轉送器?
- 答案:B. Fluentd
內容解密:
- Fluentd 是一個開源的日誌轉送器,常用於 Kubernetes 環境中收集和轉送日誌。
當您佈署 EFK 堆積疊時,哪個產品提供了使用視覺化和儀錶板呈現日誌的方式?
- 答案:C. Kibana
內容解密:
- Kibana 是 EFK 堆積疊中的一部分,提供了一個網頁介面來搜尋、分析和視覺化日誌資料。
以下哪個工具只將 Falco 日誌轉送到中央日誌系統?
- 答案:B. Falcosidekick
內容解密:
- Falcosidekick 是一個用於轉送 Falco 事件到多種目標的工具,包括日誌管理系統。
Falco 中的哪個物件允許您建立一個專案集合?
- 答案:A. Lists
內容解密:
- 在 Falco 中,Lists 用於定義一個專案集合,可以在規則中使用。
第 13 章:備份工作負載
本章將介紹如何使用 Velero 來備份和還原 Kubernetes 工作負載。
本章重點
- 瞭解 Kubernetes 備份
- 執行 etcd 備份
- 使用 Velero 備份工作負載
- 使用 CLI 管理 Velero
- 從備份還原工作負載
在下一章中,我們將探討 Velero 的使用方法和最佳實踐。
Kubernetes備份與還原:etcd資料函式庫備份實戰
在Kubernetes叢集管理中,備份是一項至關重要的任務。本章將探討如何備份Kubernetes叢集及其工作負載,重點關注etcd資料函式庫的備份。
瞭解Kubernetes備份
備份Kubernetes叢集不僅需要備份正在執行的工作負載,還需要備份叢集本身。由於叢集狀態儲存在etcd資料函式庫中,因此etcd是備份過程中的關鍵元件。備份叢集和工作負載使我們能夠:
- 遷移叢集
- 從生產叢集建立開發叢集
- 從災難中還原叢集
- 從持久性儲存區中還原資料
- 名稱空間和佈署還原
執行etcd備份
由於我們使用KinD(Kubernetes-in-Docker)作為Kubernetes叢集,因此可以建立etcd資料函式庫的備份,但無法直接還原它。
備份必要的憑證
大多數Kubernetes安裝將憑證儲存在/etc/kubernetes/pki。對於KinD叢集,我們可以使用docker cp命令備份這些憑證。
- 首先,在
chapter13資料夾下建立一個名為backup的目錄,並進入該目錄:
mkdir backup
cd ./backup
- 使用
docker cp命令備份API伺服器上的憑證:
docker cp cluster01-control-plane:/etc/kubernetes/pki ./
這將把控制平面節點上的pki資料夾內容複製到本地的chapter13/backup/pki資料夾中。
備份etcd資料函式庫
要在KinD叢集中備份etcd資料函式庫,請遵循以下步驟:
- 使用
kubectl exec在etcd Pod中執行一個shell:
kubectl exec -it etcd-cluster01-control-plane /bin/sh -n kube-system
- 在etcd Pod中,使用
etcdctl備份etcd資料函式庫:
etcdctl snapshot save etcd-snapshot.db --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key
內容解密:
此命令使用etcdctl工具對etcd資料函式庫進行快照備份。具體引數說明如下:
snapshot save etcd-snapshot.db:將etcd資料函式庫快照儲存到名為etcd-snapshot.db的檔案中。--endpoints=https://127.0.0.1:2379:指定etcd服務的端點地址和埠。--cacert,--cert,--key:分別指定用於與etcd服務進行安全通訊的CA憑證、客戶端憑證和客戶端私鑰。
執行此命令後,您將看到類別似以下的輸出,表示備份成功:
{"level":"info","ts":1591637958.297016,"caller":"snapshot/v3_snapshot.go:110","msg":"created temporary db file","path":"etcd-snapshot.db.part"}
{"level":"info","ts":1591637958.732125,"caller":"snapshot/v3_snapshot.go:143","msg":"saved","path":"etcd-snapshot.db"}
此輸出表明etcd資料函式庫已成功備份到etcd-snapshot.db檔案中。
使用 Velero 進行 Kubernetes 叢集備份與還原
在上一章節中,我們探討瞭如何手動備份 etcd 資料函式庫。雖然這種方法在某些情況下很有用,但在實際生產環境中,我們通常需要更自動化、更全面的備份解決方案。Heptio 的 Velero 就是為此而生的工具。
Velero 簡介
Velero 是一款開源的 Kubernetes 備份與還原工具,提供豐富的功能,包括排程備份、備份勾子(backup hooks)以及細粒度的備份控制等。與許多商業產品不同,Velero 完全免費。
雖然 Velero 功能強大,但它沒有圖形化介面(GUI),所有的操作都需要透過命令列工具 velero 來完成。這款單一的可執行檔允許使用者安裝 Velero 伺服器、建立備份、檢查備份狀態、還原備份等。
Velero 元件與需求
Velero 由幾個關鍵元件構成:
- Velero CLI:用於安裝 Velero 元件,執行備份與還原操作。
- Velero 伺服器:負責執行備份與還原程式。
- 儲存提供者外掛:用於支援特定儲存系統的備份與還原。
除了 Velero 的核心元件外,使用者還需要提供一個物件儲存位置來存放備份資料。如果沒有現成的物件儲存解決方案,可以佈署 MinIO——一個開源的 S3 相容物件儲存專案。
安裝 Velero CLI
要開始使用 Velero,首先需要下載並安裝 Velero CLI。步驟如下:
- 從 Velero 的 GitHub 倉函式庫下載最新版本:
wget https://github.com/vmware-tanzu/velero/releases/download/v1.4.0/velero-v1.4.0-linux-amd64.tar.gz - 解壓縮下載的檔案:
tar xvf velero-v1.4.0-linux-amd64.tar.gz - 將 Velero 二進位制檔案移動到
/usr/bin目錄下:sudo mv velero-v1.4.0-linux-amd64/velero /usr/bin - 驗證 Velero CLI 是否安裝成功:
velero version
程式碼解密:
上述指令用於下載、解壓縮並安裝 Velero CLI。
wget用於從指定 URL 下載檔案。tar xvf用於解壓縮.tar.gz檔案。sudo mv用於將 Velero 可執行檔移動到系統目錄,以便全域使用。velero version用於檢查已安裝的 Velero 版本。
安裝 Velero 伺服器
在安裝 Velero 伺服器之前,需要滿足以下需求:
- Kubernetes 叢集版本 1.10 或更高
- Velero 可執行檔
- 系統元件的映像檔
- 相容的儲存位置
- Volume Snapshot 外掛(可選)
相容的儲存解決方案
Velero 需要一個 S3 相容的儲存桶來存放備份資料。官方支援多種儲存解決方案,包括 AWS、Azure 和 Google 的物件儲存服務。此外,還有多家廠商和社群提供的相容儲存方案。
如果沒有現成的物件儲存解決方案,可以佈署 MinIO 作為 S3 相容的儲存服務。
MinIO 佈署與使用
在我們的範例中,由於使用的是 KinD 叢集,我們將佈署 MinIO 來提供 S3 相容的儲存服務。
圖表翻譯:
此圖示展示了 MinIO 在 Kubernetes 中的佈署架構:
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333
title 圖表翻譯:
rectangle "包含" as node1
rectangle "提供" as node2
rectangle "被" as node3
node1 --> node2
node2 --> node3
@enduml圖表翻譯: 上圖展示了在 Kubernetes 叢集中佈署 MinIO,並利用其提供的 S3 相容儲存服務給 Velero 使用。
綜上所述,Velero 提供了一個強大且靈活的 Kubernetes 叢集備份與還原解決方案。透過結合 MinIO 等開源工具,即使在沒有商業儲存解決方案的情況下,也能實作可靠的備份與還原功能。