概述
繼上一篇 Thanos 部署與實踐 發布半年多之后,隨著技術的發展,本系列又迎來了一次更新,本文將介紹如何結合 Kvass 與 Thanos,來更好的實作大規模容器集群場景下的監控,
有 Thanos 不夠嗎 ?
有同學可能會問,Thanos 不就是為了解決 Prometheus 的分布式問題么,有了 Thanos 不就可以實作大規模的 Prometheus 監控了嗎?為什么還需要個 Kvass?
Thanos 解決了 Prometheus 的分布式存盤與查詢的問題,但沒有解決 Prometheus 分布式采集的問題,如果采集的任務和資料過多,還是會使 Prometheus 達到的瓶頸,不過對于這個問題,我們在系列的第一篇 大規模場景下 Prometheus 的優化手段 中就講了一些優化方法:
- 從服務維度拆分采集任務到不同 Prometheus 實體,
- 使用 Prometheus 自帶的 hashmod 對采集任務做分片,
但是,這些優化方法還是存在一些缺點:
- 配置繁瑣,每個 Prometheus 實體的采集配置都需要單獨配,
- 需要提前對資料規模做預估才好配置,
- 不同 Prometheus 實體采集任務不同,負載很可能不太均衡,控制不好的話仍然可能存在部分實體負載過高的可能,
- 如需對 Prometheus 進行擴縮容,需要手動調整,無法做到自動擴縮容,
Kvass 就是為了解決這些問題而生,也是本文的重點,
什么是 Kvass ?
Kvass 專案是騰訊云開源的輕量級 Prometheus 橫向擴縮容方案,其巧妙的將服務發現與采集程序分離,并用 Sidecar 動態給 Prometheus 生成組態檔,從而達到無需手工配置就能實作不同 Prometheus 采集不同任務的效果,并且能夠將采集任務進行負載均衡,以避免部分 Prometheus 實體負載過高,即使負載高了也可以自動擴容,再配合 Thanos 的全域視圖,就可以輕松構建只使用一份組態檔的超大規模集群監控系統,下面是 Kvass+Thanos 的架構圖:

更多關于 Kvass 的詳細介紹,請參考 如何用 Prometheus 監控十萬 container 的 Kubernetes 集群 ,文章中詳細介紹了原理和使用效果,
部署實踐
部署準備
首先下載 Kvass 的 repo 并進入 examples 目錄:
git clone https://github.com/tkestack/kvass.git
cd kvass/examples
在部署 Kvass 之前我們需要有服務暴露指標以便采集,我們提供了一個 metrics 資料生成器,可以指定生成一定數量的 series,在本例子中,我們將部署 6 個 metrics 生成器副本,每個會生成 10045 series,將其一鍵部署到集群:
kubectl create -f metrics.yaml
部署 Kvass
接著我們來部署 Kvass:
kubectl create -f kvass-rbac.yaml # Kvass 所需的 RBAC 配置
kubectl create -f config.yaml # Prometheus 組態檔
kubectl create -f coordinator.yaml # Kvass coordinator 部署配置
其中,config.yaml 的 Prometheus 組態檔,配了對剛才部署的 metrics 生成器的采集:
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
cluster: custom
scrape_configs:
- job_name: 'metrics-test'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
regex: metrics
action: keep
- source_labels: [__meta_kubernetes_pod_ip]
action: replace
regex: (.*)
replacement: ${1}:9091
target_label: __address__
- source_labels:
- __meta_kubernetes_pod_name
target_label: pod
coordinator.yaml 我們給 Coordinator 的啟動引數中設定每個分片的最大 head series 數目不超過 30000:
--shard.max-series=30000
然后部署 Prometheus 實體(包含 Thanos Sidecar 與 Kvass Sidecar),一開始可以只需要單個副本:
kubectl create -f prometheus-rep-0.yaml
如果需要將資料存盤到物件存盤,請參考上一篇 Thanos 部署與實踐 對 Thanos Sidecar 的配置進行修改,
部署 thanos-query
為了得到全域資料,我們需要部署一個 thanos-query:
kubectl create -f thanos-query.yaml
根據上述計算,監控目標總計 6 個 target, 60270 series,根據我們設定每個分片不能超過 30000 series,則預期需要 3 個分片,我們發現,Coordinator 成功將 StatefulSet 的副本數改成了 3,
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kvass-coordinator-c68f445f6-g9q5z 2/2 Running 0 64s
metrics-5876dccf65-5cncw 1/1 Running 0 75s
metrics-5876dccf65-6tw4b 1/1 Running 0 75s
metrics-5876dccf65-dzj2c 1/1 Running 0 75s
metrics-5876dccf65-gz9qd 1/1 Running 0 75s
metrics-5876dccf65-r25db 1/1 Running 0 75s
metrics-5876dccf65-tdqd7 1/1 Running 0 75s
prometheus-rep-0-0 3/3 Running 0 54s
prometheus-rep-0-1 3/3 Running 0 45s
prometheus-rep-0-2 3/3 Running 0 45s
thanos-query-69b9cb857-d2b45 1/1 Running 0 49s
我們再通過 thanos-query 來查看全域資料,發現資料是完整的(其中 metrics0 為指標生成器生成的指標名):


如果需要用 Grafana 面板查看監控資料,可以添加 thanos-query 地址作為 Prometheus 資料源: http://thanos-query.default.svc.cluster.local:9090,
小結
本文介紹了如何結合 Kvass 與 Thanos 來實作超大規模容器集群的監控,如果你使用了騰訊云容器服務,可以直接使用運維中心下的 云原生監控 服務,此服務就是基于 Kvass 構建的產品,
【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231838.html
標籤:其他
上一篇:構建乘積陣列

