微服務——現在是我們構建基礎設施的事實上的選擇——自然地為容器鋪平了道路。借助Docker 和 Kubernetes 等容器編排工具,組織現在可以更快、更大規模地發布應用程序。但是,隨著所有這些功能和自動化的出現,挑戰也隨之而來,尤其是在保持對這個臨時基礎設施的可見性方面。
Kubernetes 很復雜,(要準確了解 Kubernetes 是什么以及它是如何工作的,請閱讀我們關于 Kubernetes 的完整指南)。要成功使用它,需要同時監控多個組件。為了使您的監控策略更容易,請將監控操作分成幾個區域,每個部分都指代 Kubernetes 環境的一個單獨層。然后從上到下分解對工作負載的監控:集群、Pod、應用程序,最后是最終用戶體驗。
監控 Kubernetes 集群
集群是 Kubernetes 的最高級別組成部分。大多數 Kubernetes 安裝只有一個集群。這就是為什么當您監控集群時,您可以獲得所有區域的完整視圖。并且可以輕松確定組成集群的 pod、節點和應用程序的運行狀況。
使用聯合部署多個集群時,必須單獨監控每個集群。您將在集群級別監控的區域是:
- 不成功的 Pod:失敗和中止的 Pod 是 Kubernetes 進程的正常部分。當一個 pod 應該以更高效的水平工作或處于非活動狀態時,調查 pod 故障異常背后的原因至關重要。
- 節點負載:跟蹤每個節點上的負載對于監控效率是不可或缺的。某些節點的使用量可能比其他節點多得多。重新平衡負載分配是保持工作負載流暢和有效的關鍵。這可以通過 DaemsonSets 完成。
- 集群使用情況:監控集群基礎設施允許您調整正在使用的節點數量,并將資源用于有效地為工作負載供電。您可以看到資源是如何分配的,因此您可以擴大或縮小規模并避免額外基礎設施的成本。為此,我們建議學習如何設置容器的內存和 CPU 使用限制。
監控 Kubernetes Pod
集群監控提供了 Kubernetes 環境的宏觀視圖,但從單個 pod 收集數據也是必不可少的。它揭示了各個 pod 的健康狀況以及它們所托管的工作負載。您可以更清晰地了解集群之外的更細粒度的 Pod 性能。在這里您將監控:
- pod 實例總數:需要有足夠的 pod 實例以確保高可用性。這種方式不會浪費托管帶寬,并且您不會運行比需要更多的 pod 實例。
- Pod 部署:監控 Pod 部署可讓您查看是否有任何錯誤配置可能會降低 Pod 的可用性。密切關注資源如何分配到節點至關重要。
- 實際 pod 實例:監控每個 pod 正在運行的實例數量與您預期運行的實例數量將揭示如何重新分配資源以實現 pod 實例方面的所需狀態。如果您看到不同的指標,ReplicaSets 可能配置錯誤,因此定期分析這些指標很重要。
監控在 Kubernetes 中運行的應用程序
應用程序不是 Kubernetes 的一部分,但想要托管一個應用程序是使用 Kubernetes 的重點。這就是為什么監控托管在集群上的應用程序對于成功來說是不可或缺的。應用程序監控揭示的問題可能是 Kubernetes 環境或應用程序代碼中的問題。
通過監控應用程序,您可以識別故障并立即解決它們。從監控開始:
- 錯誤:如果發生錯誤,您可以在監控時快速找到它,并在它影響最終用戶之前解決它。
- 事務跟蹤:如果應用程序遇到可用性或性能問題,事務跟蹤可幫助您進行故障排除。
- 應用程序響應能力:您可以監控應用程序響應請求所需的時間。您可以查看他們是否能夠處理當前的工作負載,或者他們是否正在努力維持性能。
- 應用程序可用性:監控應用程序是否處于活動狀態和啟動狀態,并有效響應。
運行 Kubernetes 時監控最終用戶體驗
最終用戶體驗,如應用程序,在技術上不是 Kubernetes 平臺的一部分。應用程序的總體目標是為最終用戶提供積極的體驗,并且應該成為 Kubernetes 監控策略的一部分。
收集數據將使您了解應用程序的性能、響應能力和可用性。進行真實用戶和綜合監控對于了解用戶如何與 Kubernetes 工作負載交互至關重要。它讓您知道是否需要進行任何調整或調整,以增強可用性并改進前端。
在云環境中監控 Kubernetes
當 Kubernetes 在云中運行時,在規劃監控策略時需要考慮一些特定因素。在云中,您還必須監控:
- IAM 事件:您必須監控 IAM 活動。這包括權限更改和登??錄,這是基于云的安裝或環境中的安全最佳實踐。
- 云 API:云提供商有自己的 API,您的 Kubernetes 安裝使用它來請求資源,因此需要對其進行監控。
- 成本:云上的成本會迅速增加。成本監控可幫助您制定預算并確保您不會在基于云的 Kubernetes 服務上超支。
- 網絡性能:在基于云的安裝中,網絡可能成為應用程序性能的最大障礙。如果您定期監控云網絡,您可以確保數據按照需要快速移動,從而避免與網絡相關的問題。
監控 Kubernetes 中的指標
為了在對 Kubernetes 執行不同類型的監控之外獲得對 Kubernetes 安裝的更高可見性,還有幾個指標可以讓您深入了解應用程序的運行方式。
通用指標
這些是從 Kubernetes 代碼(用 Golang 編寫)收集的指標。它使您可以了解平臺中細胞級別的情況。
節點指標
來自啟用 Kubernetes 節點的操作系統的指標可以讓您深入了解各個節點的整體健康狀況。您可以監控內存消耗、文件系統活動、CPU 負載、使用情況和網絡活動。
Kubelet 指標
為了確保控制平面與運行 Kubelet 的每個單獨節點有效通信,您應該定期監控Kubelet代理。
Kube-State-Metrics
您可以獲得一個可選的 Kubernetes 插件,它從名為Kube-State-Metrics的 Kubernetes API 生成指標。
控制器管理器指標
為確保有效地編排工作負載,您可以監控控制器向外部 API 發出的請求。這在基于云的 Kubernetes 部署中至關重要。
調度程序指標
如果您想識別和防止延遲,您應該監控調度程序中的延遲。通過這種方式,您可以確保 Kubernetes 順利、準時地部署 Pod。
等指標
Etcd 存儲 Kubernetes 的所有配置數據。Etcd 指標將為您提供對集群狀況的基本可見性。
容器指標
專門查看單個容器將允許您監控確切的資源消耗,而不是更一般的 Kubernetes 指標。CAdvisor允許您分析容器內發生的資源使用情況。
API 服務器指標
API 將 Kubernetes 前端保持在一起,因此這些指標對于獲取 API 服務器的可見性至關重要,從而了解整個前端。
記錄數據
當您發現指標揭示的問題時,日志有助于檢查。它們為您提供準確且無價的信息,提供比指標更多的詳細信息。登錄 Kubernetes 的大多數組件有很多選項。應用程序還會生成日志數據。
Kubernetes 監控挑戰、解決方案和技巧
將應用程序從單體基礎架構遷移到由 Kubernetes 管理的微服務是一個漫長而密集的過程。它可能充滿陷阱,并且可能被證明容易出錯。但要實現更高的可用性、創新、成本效益、可擴展性和敏捷性,這是發展業務的唯一途徑,尤其是在云中。由于平臺的復雜性,可見性是 Kubernetes 環境的主要問題,因為查看每個微服務的實時交互具有挑戰性。監控是每個企業都需要實踐和改進才能取得成功的專業技能。
一個 Kubernetes 集群可以被認為是復雜的,因為它有多個服務器和集成的私有和公共云服務。出現問題時,需要檢查許多日志、數據和其他因素。傳統的單片環境只需要一些日志搜索來確定問題。另一方面,Kubernetes 環境有一個或多個與您遇到的問題有關的多個微服務的日志。為了應對這些挑戰,我們匯總了以下建議,以有效監控容器化基礎設施。
有效使用 Sidecar 模式改進 Kubernetes 中的應用程序監控
一個關鍵的最佳實踐是利用 Kubernetes 中基于角色的訪問,由單個團隊及其監控解決方案提供端到端控制,而無需完全控制集群。利用團隊命名空間下的監控解決方案可幫助操作員輕松控制團隊范圍內基于微服務的容器應用程序的監控。
但是,他們可以添加額外的監控支持,而無需重建他們的應用程序容器。一種動態的監控方法可以提高可觀察性并驅動上下文——如果容器開始出現問題,則無需將其拉下。
命名空間可觀察性
通過利用Sensu Go等開源監控事件管道,運營團隊可以獲得容器的專用團隊視圖,以提高對其應用程序的可見性并增加對可能異常的洞察力。這些類型的解決方案為臨時基礎設施提供動態監控變化。因此,運營商可以通過使用 Kubernetes 內置的基于角色的訪問控制概念來幫助安全地推動協作。
Kubernetes 為資源提供命名空間范圍,使各個團隊可以完全控制其命名空間下的應用程序。操作員還可以在 Kubernetes 命名空間中創建容器和 Pod,并將其直接映射到代碼驅動的監控工具,也可以利用相同的命名空間。
例如,您可以在開源監控事件管道中擁有一個“關聯”命名空間——類似于 Kubernetes——這樣一個團隊就可以使用聲明性YAML配置文件的存儲庫來控制容器并圍繞它進行監控。借助RBAC(基于角色的訪問控制),您可以通過僅向用戶提供必要的訪問權限來降低風險,這樣他們就不會擁有超出所需的權限。
將監控工作流程編碼到聲明性配置文件中,可以讓您以自動化的速度進行監控。它可以共享、作為代碼處理、審查、編輯和版本化,從而實現高效的多云操作。閱讀有關如何使用 Prometheus 監控 Kubernetes 的更多信息
Kubernetes 日志最佳實踐
容器化工作負載的應用程序日志聚合是可以改進軟件開發的基本最佳實踐。由于容器化工作負載的短暫性,集群中生成的日志條目數量可能非常大。
Fluentd 和 FluentBit 等日志代理——最初由 Treasure Data 開發的跨平臺、開源數據收集軟件項目——通常用作 DaemonSet 來收集節點上運行的所有 pod 的日志,使用日志文件的特權卷掛載由容器運行時存儲。這些是集群級工具,用于將日志聚合到 Elasticsearch 等數據湖中,或將它們發送到Kafka等流處理器解決方案中——您可能希望使用基于功能的角色監控來跟蹤在外部運行的這些額外的日志聚合基礎設施您的 Kubernetes 集群。
使用 Kubernetes 監控解決方案
可見性對于企業識別阻礙應用程序性能的容器問題至關重要。您可以更有效地監控在 Kubernetes pod 中運行的容器化應用程序,并根據需要進行擴展或縮減。這就是為什么擁有一個全面的 Kubernetes 監控解決方案至關重要的原因,它可以讓您端到端地了解應用程序的每個組件。從 Pod、節點、容器、基礎設施、Kubernetes 平臺,到每個微服務和最終用戶設備。
使用 APM 監控 Kubernetes
實施應用程序性能監控解決方案 (APM) 可讓企業了解其應用程序并評估整體性能。它組織并提供對 Kubernetes 集群、Docker 容器和容器化應用程序的見解。您可以檢查基礎架構的基本指標、了解潛在障礙并進行調整。在部署 APM 監控的容器應用程序時,即時了解內存、CPU 和網絡利用率以及資源使用情況統計信息。APM 指標可快速識別常見問題,例如帶寬壟斷應用程序或識別影響深遠的容器級網絡錯誤。