返回文章列表

Kubernetes佈署Dashboard與應用程式監控

本文介紹如何使用 Helm Charts 佈署 Kubernetes Dashboard,並探討 Helm 與 Operator 的差異,以及如何利用 Prometheus 和 Grafana 建立 Kubernetes 監控系統,最後說明 Operator Lifecycle Manager (OLM)

Kubernetes DevOps

Kubernetes 的應用程式佈署與監控是維運的關鍵。本文示範如何使用 Helm Charts 快速佈署 Kubernetes Dashboard,並比較 Helm 與 Operator 的差異,說明 Operator 如何管理應用程式生命週期,以及自定義資源定義 (CRD) 的重要性。此外,文章也介紹如何使用 Prometheus 和 Grafana 建立 Kubernetes 監控系統,並詳細說明 Operator Lifecycle Manager (OLM) 的安裝步驟與使用方法,讓讀者能快速掌握 Kubernetes 應用程式佈署和監控的技巧。

使用Helm Charts佈署Kubernetes Dashboard與其他應用程式

在前面的章節中,我們已經瞭解瞭如何使用Helm Charts來佈署和管理Kubernetes中的應用程式。本章節將繼續探討如何使用Helm Charts來佈署Kubernetes Dashboard,以及其他流行的解決方案。

使用Helm Charts佈署Kubernetes Dashboard

首先,我們需要了解如何使用Helm Charts來佈署Kubernetes Dashboard。Kubernetes Dashboard是一個根據Web的使用者介面,用於管理和監控Kubernetes叢集。

步驟1:新增Helm Repository

首先,我們需要新增Kubernetes Dashboard的Helm Repository。執行以下命令:

helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

步驟2:安裝Kubernetes Dashboard

接下來,我們可以使用Helm Chart來安裝Kubernetes Dashboard。執行以下命令:

helm install kubernetes-dashboard/kubernetes-dashboard --set=service.type=NodePort

這個命令將安裝Kubernetes Dashboard並將服務型別設定為NodePort。

步驟3:驗證Kubernetes Dashboard

安裝完成後,我們需要驗證Kubernetes Dashboard是否正常運作。首先,我們需要取得Bearer Token:

kubectl -n kubernetes-dashboard create token admin-user

這個命令將生成一個Bearer Token,用於登入Kubernetes Dashboard。

注意事項

由於Bearer Token具有cluster-admin角色的許可權,因此請謹慎使用,避免誤操作導致資源被刪除。

使用Helm Charts安裝其他流行解決方案

除了Kubernetes Dashboard之外,我們還可以使用Helm Charts來安裝其他流行的解決方案,例如Elasticsearch with Kibana和Prometheus with Grafana。

Elasticsearch with Kibana

Elasticsearch是一個流行的全文檢索引擎,而Kibana則是Elasticsearch的視覺化介面。我們可以使用以下Helm Charts來安裝Elasticsearch和Kibana:

  • Elasticsearch Chart:https://artifacthub.io/packages/helm/elastic/elasticsearch
  • Kibana Chart:https://artifacthub.io/packages/helm/elastic/kibana

Prometheus with Grafana

Prometheus是一個流行的監控系統,而Grafana則是Prometheus的視覺化介面。我們可以使用以下Helm Charts來安裝Prometheus和Grafana:

  • Prometheus Chart:https://artifacthub.io/packages/helm/prometheus-community/prometheus
  • Grafana Chart:https://artifacthub.io/packages/helm/grafana/grafana

Helm Charts的安全性考慮

雖然Helm Charts可以簡化應用程式的佈署,但是也可能引入一些安全漏洞。以下是一些需要考慮的安全因素:

  • 來源驗證:始終檢查Helm Charts的來源,避免安裝來自非受信任或聲譽不佳的Repository的Charts。
  • 定期稽核:定期執行Helm Charts及其依賴項的安全稽核,以識別已知漏洞。
  • Chart組態:檢查Helm Charts的預設組態,並根據需要進行調整,以滿足組織的安全政策和最佳實踐。
  • 根據角色的存取控制(RBAC):實施RBAC以限制Helm Charts的佈署和管理,減少未經授權的變更。
  • 依賴項管理:監控和管理Helm Charts的依賴項,定期更新以避免安全漏洞。

Kubernetes Operators簡介

隨著Kubernetes的採用率不斷提高,生產環境的複雜度也在增加。雖然Helm和類別似工具可以改善應用程式的佈署過程,但是它們無法獨立解決 Stateful 應用程式的操作需求,例如擴充套件、組態管理和故障還原。Kubernetes Operators被引入來幫助解決這些需求。

從人類到軟體

Kubernetes Operators本質上是軟體擴充套件,可以自動化複雜的應用程式管理任務,尤其是對於 Stateful 應用程式。Operators利用其內建的軟體元件和智慧來有效地執行和管理這些任務。

Helm Charts與Kubernetes Operators的比較

雖然Helm Charts和Kubernetes Operators都與應用程式管理相關,但是它們是不同的。Helm Charts是一個有效的套件管理器,可以簡化應用程式的佈署過程,而Kubernetes Operators則是軟體擴充套件,可以自動化複雜的應用程式管理任務。

圖表說明:Operators如何管理Kubernetes中的資源

此圖示展示了Kubernetes叢集中Operators與各元件之間的高階關係。

在下一章節中,我們將探討Kubernetes Operators的概念及其優勢。

使用Helm Charts與Operators的工作方式

在Kubernetes環境中,Helm Charts和Operators是兩種重要的工具,用於管理和佈署應用程式。Helm Charts主要專注於簡化應用程式的佈署過程,而Operators則旨在管理應用程式的整個生命週期,包括佈署、擴充套件、升級和自我修復。

Helm Charts的應用場景

Helm Charts在需要快速佈署的情況下表現出色,特別適合一次性安裝或較小的應用程式。然而,Helm主要關注的是佈署階段,而不是應用程式執行時的持續操作需求。

Operators的功能與優勢

Operators是軟體程式,旨在承擔複雜和狀態應用程式的整個生命週期管理。透過使用自定義資源定義(CRDs),Operators編碼了關於應用程式如何運作的知識,並允許擴充套件、組態管理、自動升級和自我修復機制。Operators不斷觀察應用程式的健康狀況,並採取糾正措施使其還原到所需的狀態。

Operators如何幫助應用程式佈署?

Operators具備管理應用程式全生命週期的能力,包括:

  • 生命週期管理:Operators管理應用程式的生命週期,自動執行關鍵操作任務,如升級、擴充套件和從故障中還原,以保持應用程式的健康和效能。
  • 資源協調:Operators建立應用程式正常執行所需的資源,如ConfigMaps、Secrets和PVCs。
  • 自動佈署:Operators可以根據使用者提供的組態或預設值佈署應用程式堆積疊,簡化佈署過程。
  • 資料函式倉管理:例如,對於PostgreSQL叢集,Operators可以利用StatefulSets進行佈署,並確保資料在副本之間同步。
  • 自我修復能力:Operators可以檢測和回應應用程式故障,觸發還原或容錯移轉機制,以保持服務連續性。

重用自動化

Operators促進重用。同一個Operator可以在不同的專案或多個Kubernetes叢集中使用,確保在整個基礎設施中一致且高效地管理應用程式。

Operators如何確保應用程式狀態

Kubernetes Operators的工作原理與Kubernetes本身類別似,利用控制迴路來管理應用程式。該迴路不斷監控應用程式的期望狀態(由CRD定義),並將其與叢集中應用程式的實際狀態進行比較。任何差異都會觸發Operator的糾正措施。這些措施可能涉及擴充套件應用程式、更新組態或重新啟動Pod。

自定義資源定義(CRDs)- Operators的構建塊

Kubernetes Operators依賴於CRDs。CRDs本質上是Kubernetes API的擴充套件,允許您定義特定於應用程式或其需求的自定義資源。可以將它們視為應用程式在Kubernetes生態系統中所需組態的藍圖。

CRDs的好處

使用CRDs佈署應用程式有多個好處,包括:

  • 宣告式管理:CRDs允許您以宣告式方式定義應用程式的期望狀態,而不必手動組態單個資源,如Deployments或Services。
  • 特定於應用程式的組態:CRDs滿足應用程式的獨特需求。您可以定義特定於應用程式邏輯或組態要求的自定義欄位。
  • 簡化管理:CRDs為管理應用程式組態提供了一個中心點。這簡化了與不同資源型別相關的分散組態過程。

Operator的分發機制

Operators主要由具備佈署特定應用程式堆積疊專業知識的應用程式供應商建立和分發。然而,一個活躍的社群也在積極開發、分發和維護大量Operators。

OperatorHub(https://operatorhub.io/)是一個中央儲存函式庫,您可以在那裡發現和安裝適用於各種應用程式和功能的Operators。

建立自己的Operator

Operator Framework提供了一個稱為Operator SDK的強大工具包。這個開源工具使您能夠開發和構建自定義Operators,從而控制Kubernetes中的應用程式管理。Operator SDK簡化了構建Operators的複雜過程。它提供了預先構建的元件和功能,用於處理與Kubernetes API互動、管理自定義資源和實作控制迴路等常見任務。

建立自己的Operators具有多個優勢。首先,您可以對應用程式管理進行細粒度控制。Operator可以根據您的特定需求進行定製,完美地處理組態、佈署策略和擴充套件需求。其次,Operators自動執行與應用程式生命週期相關的重複性任務,從而提高效率。最後,自定義Operators是可重用的。一旦為特定應用程式構建完成,它們就可以在相同應用程式的不同佈署中使用,從而節省您在管理Kubernetes基礎設施方面的時間和精力。

您可以透過以下網址瞭解更多關於Operator SDK的資訊:https://sdk.operatorframework.io/。

Operator Lifecycle Manager(OLM)簡介

在進行Operator的實作之前,讓我們先了解一些關於Operator Lifecycle Manager(OLM)的詳細資訊。

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333

title Operator Lifecycle Manager(OLM)簡介

rectangle "適合快速佈署" as node1
rectangle "管理全生命週期" as node2
rectangle "自定義資源定義" as node3
rectangle "中央儲存函式庫" as node4
rectangle "建立自定義Operators" as node5

node1 --> node2
node2 --> node3
node3 --> node4
node4 --> node5

@enduml

此圖示展示了Helm Charts、Operators、CRDs、OperatorHub以及Operator SDK之間的關係。

內容解密:

  1. Helm Charts主要用於簡化佈署,但缺乏持續的操作支援。
  2. Operators能夠管理複雜應用的全生命週期,包括擴充套件、升級等。
  3. CRDs提供了宣告式管理,使得應用的組態更加集中和簡單。
  4. OperatorHub是一個存放和管理各種Operators的平台。
  5. Operator SDK幫助使用者建立自定義的Operators,以滿足特定的需求。

Operator Lifecycle Manager (OLM) 在 Kubernetes 中的應用

Operator Lifecycle Manager(OLM)簡化了佈署和管理以 Operators 形式封裝的應用程式的過程。OLM 使用 YAML 檔案以宣告式方式指定資源,無需依賴特定順序的複雜多檔案佈署。安裝和自動升級功能確保您的 Operators 保持最新狀態。OLM 還提供了一個名為 Catalog Sources 的套件發現功能,使您能夠使用來自 OperatorHub 或您選擇的其他來源的 Operators。

OLM 的優勢

  1. 降低佈署複雜度:OLM 管理依賴關係和佈署順序,簡化了佈署過程。
  2. 管理規模擴充套件:OLM 能夠在大規模叢集中管理數千個 Operators。
  3. 強制組態一致性:OLM 確保叢集中的組態符合預期,簡化了滾動更新和升級。
  4. 促進標準化:OLM 提供了一種一致的方式來封裝和佈署應用程式為 Operators。

OLM 與 Helm 的比較

OLM 更深入地整合於 Kubernetes,而 Helm 則具有更豐富的套件生態系統。選擇 OLM 還是 Helm 取決於您的環境和個人偏好。

ClusterServiceVersion (CSV) 的重要性

ClusterServiceVersion 是 Kubernetes Operator Lifecycle Manager 的核心,負責處理 Operator 的中繼資料和佈署資訊。CSV 定義了 Operator 的名稱、版本、描述、所需許可權、管理的 CRDs、安裝策略和升級流程。

使用 Prometheus 和 Grafana 實作 Kubernetes 監控

為了確保 Kubernetes 應用程式的健康和效能,監控工具如 Prometheus 和 Grafana 是必不可少的。Prometheus 在後台收集和儲存有關 Kubernetes 叢集的有價值指標,而 Grafana 則將這些資料視覺化,使您能夠深入瞭解應用程式和基礎設施的健康狀況和行為。

Prometheus 和 Grafana 的架構

下圖展示了 Prometheus 元件的高階架構。 此圖示展示了 Prometheus 及其生態系統元件的架構。

此圖示

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333

title 此圖示

rectangle "scrape" as node1
rectangle "query" as node2
rectangle "metrics" as node3
rectangle "visualize" as node4

node1 --> node2
node2 --> node3
node3 --> node4

@enduml

使用 Helm Charts 和 Operators 佈署監控堆積疊

傳統的監控堆積疊佈署方式需要手動編寫多個 YAML 清單,依賴關係和佈署順序的管理容易出錯。使用 Prometheus 和 Grafana Operators 提供了一種更高效、更易於維護的解決方案。

安裝 Operator Lifecycle Manager

要使用根據 OLM 的 Operator 安裝,需要先在叢集中安裝 OLM。可以使用 operator-sdk 工具、Helm charts 或直接套用 Kubernetes YAML 清單進行安裝。

使用 install.sh 指令碼安裝 OLM

$ curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.28.0/install.sh | bash -s v0.28.0

安裝完成後,驗證 OLM 的 Pod 是否正在執行:

$ kubectl get pods -n olm

輸出結果:

NAME READY STATUS RESTARTS AGE
catalog-operator-9f6dc8c87-rt569 1/1 Running 0 36s
olm-operator-6bccddc987-nrlkm 1/1 Running 0 36s
operatorhubio-catalog-6l8pw 0/1 Running 0 21s
packageserver-6df47456b9-8fdt7 1/1 Running 0 24s
packageserver-6df47456b9-lrvzp 1/1 Running 0 24s

檢查 ClusterServiceVersion 狀態:

$ kubectl get csv -n olm

輸出結果:

NAME DISPLAY VERSION REPLACES PHASE
packageserver Package Server 0.28.0 Succeeded

使用 OLM 安裝 Prometheus 和 Grafana Operators

組態好 OLM 後,佈署 Operators 就變得非常簡單。大多數情況下,您可以在 Operators 的頁面上找到安裝命令和說明。

安裝 Prometheus Operator

  1. 在 OperatorHub 中搜尋 Prometheus Operator:
$ kubectl get packagemanifests | grep prometheus
  1. 使用 OLM 安裝 Prometheus Operator:
$ kubectl create -f https://operatorhub.io/install/prometheus.yaml

內容解密:

  • kubectl get packagemanifests 命令用於列出可用的 Operators。
  • grep prometheus 用於過濾出與 Prometheus 相關的 Operators。
  • kubectl create -f https://operatorhub.io/install/prometheus.yaml 命令根據提供的 YAML 定義建立了一個 Subscription 物件,用於安裝 Prometheus Operator。

透過上述步驟,您可以成功地使用 OLM 在 Kubernetes 叢集中佈署 Prometheus 和 Grafana,從而實作對叢集和應用程式的有效監控。