如何对K8s进行考核?Kuberhealthy来打个样!
2019年11月,在圣地亞哥KubeCon,我們發布了kuberhealth 2.0.0——將kuberhealthy作為合成監測的Kubernetes operator。這個新功能為開發人員提供了創建自己的kuberhealth檢查容器的方法,以合成監控其應用程序和集群。社區很快采用了這個新特性,感謝在自己的集群中實現和測試kuberhealth 2.0.0的每個人。
1部署Kuberhealthy
要安裝Kuberhealthy,請確保安裝了Helm?3。如果沒有,可以使用此部署文件夾中生成的flat spec文件。如果不使用Prometheus Operator,可以用kuberhealthy- Prometheus.yaml。如果您根本沒有使用Prometheus,那么您仍然可以使用kuberhealthy和JSON狀態頁以及/或InfluxDB集成,使用此規范。
2使用Helm 3安裝
kubectl create namespace kuberhealthy
2.將當前命名空間設置為“kuberhealthy”:
3.將kuberhealthy repo添加到Helm:
helm repo add kuberhealthy?https://comcast.github.io/kuberhealthy/helm-repos
如果使用 Prometheus Operator:
如果使用Prometheus, 但不是Prometheus Operator:
有關配置scrape注釋的更多細節,請參閱下面Prometheus Integration details一節。
最后,如果你不使用Prometheus:
運行Helm命令將自動安裝Kuberhealthy(v2.2.0)的最新版本,并進行一些基本檢查。如果運行kubectl get pods,應該會看到兩個kuberhealth pods。這些是創建、協調和跟蹤測試pod的pod。這兩個Kuberhealthy pods還提供JSON狀態頁和a/metrics端點。您看到創建的其他每個pod都是一個checker pod,設計用于執行和關閉。
3配置其他檢查
接下來,可以運行kubectl get khchecks。可以看到默認安裝了三個Kuberhealthy檢查:
?daemonset: 部署并關閉一個daemonset,以確保群集中的所有節點都能正常工作。
?deployment:創建部署,然后觸發滾動更新。測試部署是否可以通過服務訪問,然后刪除所有內容。過程中的任何問題都會導致失敗。
?dn -status-internal:驗證內部集群DNS是否正常運行。
要查看其他可用的外部檢查,請查看外部檢查注冊表,找到可以應用于集群啟用各種檢查的其他yaml文件。
kuberhealthy 檢查pod應該在kuberhealthy運行后不久(1-2分鐘)開始運行。另外,check-reaper cronjob每隔幾分鐘運行一次,以確保一次不超過5個checker pods被丟棄。
要獲取這些檢查的狀態頁視圖,需要通過編輯kuberhealthy服務并設置Type:LoadBalancer來對外公開kuberhealthy服務,或者使用kubectl port-forward 服務/kuberhealthy 8080:80。查看時,服務端點將顯示一個JSON狀態頁,如下所示:
?
}
JSON頁面顯示集群中運行的所有kuberhealth檢查。要在不同命名空間運行Kuberhealthy檢查,可以通過在狀態頁URL中添加GET變量名稱空間參數:?namespace=kuberhealth,kube-system來過濾它們。
這個JSON頁面顯示在你的集群中運行的所有kuberhealthy檢查。如果你在不同的名稱空間中運行Kuberhealthy檢查,你可以通過在狀態頁面URL中添加GET變量namespace參數:?namespace=kuberhealthy,kube-system來過濾它們。
4Writing Your Own Checks
Kuberhealthy被設計為擴展自定義檢查容器,任何人都可以編寫容器來檢查任何內容。這些檢查可以用任何語言編寫,只要它們打包在容器中。這使得Kuberhealthy成為創建自己的合成監測的優秀平臺!
創建自己的檢查是驗證client library、模擬真實的用戶工作流程,以及在服務或系統正常運行時創建高度信任的好方法。
5Prometheus集成細節
當啟用Prometheus時,Kuberhealthy服務將添加以下注釋:
在prometheus配置中,添加以下示例scrape_config,該配置通過添加的prometheus注釋來獲取kuberhealthy服務:
- role:service namespaces: names: - kuberhealthy relabel_configs:
- source_labels:[__meta_kubernetes_service_annotation_prometheus_io_scrape] action:keep regex:true}}}
還可以使用這個示例作業指定要刮除的目標端點: {{{-?job_name:kuberhealthy scrape_interval:1m honor_labels:true? metrics_path:/metrics? static_configs:? -?targets:? ??-?kuberhealthy.kuberhealthy.svc.cluster.local:80
應用了適當的prometheus配置,能夠看到以下kuberhealthy指標:
?kuberhealthy_check
?kuberhealthy_check_duration_seconds
?kuberhealthy_cluster_states
?kuberhealthy_running
6創建關鍵績效指標
使用這些Kuberhealthy度量,團隊能夠收集基于以下定義、計算和PromQL查詢的kpi。
可用性
我們將可用性定義為K8s集群控制平面按預期啟動和運行。這是通過在一段時間內創建部署、執行滾動更新和刪除部署的能力來衡量的。通過測量Kuberhealthy的部署檢查成敗來計算這一點。
?Availability = Uptime / (Uptime * Downtime)
?Uptime = Number of Deployment Check Passes * Check Run Interval
?Downtime = Number of Deployment Check Fails * Check Run Interval
?Check Run Interval = how often the check runs (runInterval set in your KuberhealthyCheck Spec)
?PromQL Query (Availability % over the past 30 days):
1 - (sum(count_over_time(kuberhealthy_check{check="kuberhealthy/deployment", status="0"}[30d])) OR vector(0))/(sum(count_over_time(kuberhealthy_check{check="kuberhealthy/deployment", status="1"}[30d])) * 100)
利用率
我們將利用率定義為用戶對產品(k8s)及其資源(pod、服務等)的接受程度。通過客戶使用了多少節點、部署、有狀態集、持久卷、服務、pods和jobs來衡量。通過計算節點、部署、有狀態集、持久卷、服務、pods和jobs的總數來計算。
持續時間(延遲)
持續時間定義為控制平面的容量和吞吐量的利用率。通過捕獲kuberhealthy部署檢查運行的平均運行持續時間來計算。
PromQL查詢(部署檢查平均運行持續時間):
avg(kuberhealthy_check_duration_seconds{check="kuberhealthy/deployment"})
錯誤/警報
我們將錯誤定義為所有k8s集群和Kuberhealthy相關警報。每次Kuberhealthy檢查失敗,都會收到失敗的警報。
原文地址:
https://kubernetes.io/blog/202 ... lthy/
總結
以上是生活随笔為你收集整理的如何对K8s进行考核?Kuberhealthy来打个样!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: U盘分配单元大小建议设置多少?
- 下一篇: Python项目实践:蒙特卡罗方法计算圆