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