控制面組件的監控,包括 APIServer、Controller-manager(簡稱 CM)、Scheduler、etcd 四個組件。
1、APIServer
APIServer 的核心職能是 Kubernetes 集群的 API 總入口,Kube-Proxy、Kubelet、Controller-Manager、Scheduler 等都需要調用 APIServer,所以 APIServer 的監控,完全按照 RED 方法論來梳理即可,最核心的就是請求吞吐和延遲。
- apiserver_request_total:請求量的指標,可以統計每秒請求數、成功率。
- apiserver_request_duration_seconds:請求耗時的指標。
- apiserver_current_inflight_requests:APIServer 當前處理的請求數,分為 mutating(非 get、list、watch 的請求)和 readOnly(get、list、watch 請求)兩種,請求量過大就會被限流,所以這個指標對我們觀察容量水位很有幫助。
2、Controller-manager
Controller-manager 負責監聽對象狀態,并與期望狀態做對比。如果狀態不一致則進行調諧,重點關注的是任務數量、隊列深度等。
- workqueue_adds_total:各個 controller 接收到的任務總數。
- workqueue_depth:各個 controller 的隊列深度,表示各個 controller 中的任務的數量,數量越大表示越繁忙。
- workqueue_queue_duration_seconds:任務在隊列中的等待耗時,按照控制器分別統計。
- workqueue_work_duration_seconds:任務出隊到被處理完成的時間,按照控制器分別統計。
- workqueue_retries_total:任務進入隊列的重試次數。
3、Scheduler
Scheduler 在 Kubernetes 架構中負責把對象調度到合適的 Node 上,在這個過程中會有一系列的規則計算和篩選,重點關注調度這個動作的相關指標。
- leader_election_master_status:調度器的選主狀態,1 表示 master,0 表示 backup。
- scheduler_queue_incoming_pods_total:進入調度隊列的 Pod 數量。
- scheduler_pending_pods:Pending 的 Pod 數量。
- scheduler_pod_scheduling_attempts:Pod 調度成功前,調度重試的次數分布。
- scheduler_framework_extension_point_duration_seconds:調度框架的擴展點延遲分布,按 extension_point 統計。
- scheduler_schedule_attempts_total:按照調度結果統計的嘗試次數,“unschedulable”表示無法調度,“error”表示調度器內部錯誤。
4、etcd
etcd 在 Kubernetes 的架構中作用巨大,相對也比較穩定,不過 etcd 對硬盤 IO 要求較高,因此需要著重關注 IO 相關的指標,生產環境建議至少使用 SSD 的盤做存儲。
- etcd_server_has_leader :etcd 是否有 leader。
- etcd_server_leader_changes_seen_total:偶爾切主問題不大,頻繁切主就要關注了。
- etcd_server_proposals_failed_total:提案失敗次數。
- etcd_disk_backend_commit_duration_seconds:提交花費的耗時。
- etcd_disk_wal_fsync_duration_seconds ?:wal 日志同步耗時。
5、KSM
Kube-state-metrics 這個組件,采集的很多指標都只是充當元信息,單獨拿出來未必那么有用,但是和其他指標做 group_left、group_right 連接的時候可能又會很有用。
- kube_node_status_condition:Node 節點狀態,狀態不正常、有磁盤壓力等都可以通過這個指標發現。
- kube_pod_container_status_last_terminated_reason:容器停止原因。
- kube_pod_container_status_waiting_reason:容器處于 waiting 狀態的原因。
- kube_pod_container_status_restarts_total:容器重啟次數。
- kube_deployment_spec_replicas:deployment 配置期望的副本數。
- kube_deployment_status_replicas_available:deployment 實際可用的副本數。
?
此文章為8月Day11學習筆記,內容來源于極客時間《運維監控系統實戰筆記》,推薦該課程。