自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文讀懂Thanos多集群監(jiān)控

開發(fā) 架構
在本文中,我們將看到Prometheus監(jiān)控技術棧的局限性,以及為什么移動到基于Thanos的技術棧可以提高指標留存率并降低總體基礎設施成本。

[[416190]]

 介紹

在本文中,我們將看到Prometheus監(jiān)控技術棧的局限性,以及為什么移動到基于Thanos的技術棧可以提高指標留存率并降低總體基礎設施成本。

用于此演示的內容可以在下面鏈接中獲取,并提交到他們各自的許可證。

Kubernetes普羅米修斯技術棧

在為我們的客戶部署Kubernetes基礎設施時,在每個集群上部署監(jiān)控技術棧是標準做法。這個堆棧通常由幾個組件組成:

  •  Prometheus:收集度量標準
  •  告警管理器:根據指標查詢向各種提供者發(fā)送警報
  •  Grafana:可視化豪華儀表板

簡化架構如下:

注意事項

這種架構有一些注意事項,當你想從其中獲取指標的集群數量增加時,它的伸縮性以及可擴展性不太好。

多個Grafana

在這種設置中,每個集群都有自己的Grafana和自己的一組儀表板,維護起來很麻煩。

存儲指標數據是昂貴的

Prometheus將指標數據存儲在磁盤上,你必須在存儲空間和指標保留時間之間做出選擇。如果你想長時間存儲數據并在云提供商上運行,那么如果存儲TB的數據,塊存儲的成本可能會很高。同樣,在生產環(huán)境中,Prometheus經常使用復制或分片或兩者同時運行,這可能會使存儲需求增加兩倍甚至四倍。

解決方案

多個Grafana數據源

可以在外部網絡上公開Prometheus的端點,并將它們作為數據源添加到單個Grafana中。你只需要在Prometheus外部端點上使用TLS或TLS和基本認證來實現(xiàn)安全性。此解決方案的缺點是不能基于不同的數據源進行計算。

Prometheus聯(lián)邦

Prometheus聯(lián)邦允許從Prometheus中抓取Prometheus,當你不抓取很多指標數據時,這個解決方案可以很好地工作。在規(guī)模上,如果你所有的Prometheus目標的抓取持續(xù)時間都比抓取間隔長,可能會遇到一些嚴重的問題。

Prometheus遠程寫

雖然遠程寫入是一種解決方案(也由Thanos receiver實現(xiàn)),但我們將不在本文中討論“推送指標”部分。你可以在這里[1]閱讀關于推送指標的利弊。建議在不信任多個集群或租戶的情況下(例如在將Prometheus構建為服務提供時),將指標作為最后的手段。無論如何,這可能是以后文章的主題,但我們將在這里集中討論抓取。

Thanos,它來了

Thanos是一個“開源的,高可用的Prometheus系統(tǒng),具有長期存儲能力”。很多知名公司都在使用Thanos,也是CNCF孵化項目的一部分。

Thanos的一個主要特點就是允許“無限”存儲空間。通過使用對象存儲(比如S3),幾乎每個云提供商都提供對象存儲。如果在前提環(huán)境下運行,對象存儲可以通過rook或minio這樣的解決方案提供。

它是如何工作的?

Thanos和Prometheus并肩作戰(zhàn),從Prometheus開始升級到Thanos是很常見的。

Thanos被分成幾個組件,每個組件都有一個目標(每個服務都應該這樣:)),組件之間通過gRPC進行通信。

Thanos Sidecar

Thanos和Prometheus一起運行(有一個邊車),每2小時向一個對象存儲庫輸出Prometheus指標。這使得Prometheus幾乎是無狀態(tài)的。Prometheus仍然在內存中保存著2個小時的度量值,所以在發(fā)生宕機的情況下,你可能仍然會丟失2個小時的度量值(這個問題應該由你的Prometheus設置來處理,使用HA/分片,而不是Thanos)。

Thanos sidecar與Prometheus運營者和Kube Prometheus棧一起,可以輕松部署。這個組件充當Thanos查詢的存儲。

Thanos存儲

Thanos存儲充當一個網關,將查詢轉換為遠程對象存儲。它還可以在本地存儲上緩存一些信息?;旧?,這個組件允許你查詢對象存儲以獲取指標。這個組件充當Thanos查詢的存儲。

Thanos Compactor

Thanos Compactor是一個單例(它是不可擴展的),它負責壓縮和降低存儲在對象存儲中的指標。下采樣是隨著時間的推移對指標粒度的寬松。例如,你可能想將你的指標保持2年或3年,但你不需要像昨天的指標那么多數據點。這就是壓縮器的作用,它可以在對象存儲上節(jié)省字節(jié),從而節(jié)省成本。

Thanos Query

Thanos查詢是Thanos的主要組件,它是向其發(fā)送PromQL查詢的中心點。Thanos查詢暴露了一個與Prometheus兼容的端點。然后它將查詢分派給所有的“stores”。記住,Store可能是任何其他提供指標的Thanos組件。Thanos查詢可以發(fā)送查詢到另一個Thanos查詢(他們可以堆疊)。

  •  Thanos Store
  •  Thanos Sidecar
  •  Thanos Query

還負責對來自不同Store或Prometheus的相同指標進行重復數據刪除。例如,如果你有一個度量值在Prometheus中,同時也在對象存儲中,Thanos Query可以對該指標值進行重復數據刪除。在Prometheus HA設置的情況下,重復數據刪除也基于Prometheus副本和分片。

Thanos Query Frontend

正如它的名字所暗示的,Thanos查詢前端是Thanos查詢的前端,它的目標是將大型查詢拆分為多個較小的查詢,并緩存查詢結果(在內存或memcached中)。

還有其他組件,比如在遠程寫的情況下接收Thanos,但這仍然不是本文的主題。

多集群架構

有多種方法可以將這些組件部署到多個Kubernetes集群中,根據用例的不同,有些方法比其他方法更好,在這里我們不能給出詳細的介紹。

我們的例子是在AWS上運行,使用tEKS[2]部署了2個集群,我們的all in one解決方案將生產就緒的EKS集群部署在AWS上:

  •   一個觀察者集群[3]
  •     一個被觀察集群[4]

我們的部署使用了官方的kube-prometheus-stack和bitnami thanos圖表。

一切都是在我們的terraform-kubernetes-addons存儲庫中策劃的。

Thanos demo文件夾中的目錄結構如下:. 

  1. ├──  env_tags.yaml  
  2. ├──  eu-west-1  
  3. │  ├──  clusters  
  4. │  │  └──  observer 
  5. │  │     ├──  eks  
  6. │  │     │  ├──  kubeconfig  
  7. │  │     │  └──  terragrunt.hcl  
  8. │  │     ├──  eks-addons  
  9. │  │     │  └──  terragrunt.hcl  
  10. │  │     └──  vpc  
  11. │  │        └──  terragrunt.hcl  
  12. │  └──  region_values.yaml  
  13. └──  eu-west-3  
  14.    ├──  clusters  
  15.    │  └──  observee 
  16.    │     ├──  cluster_values.yaml  
  17.    │     ├──  eks  
  18.    │     │  ├──  kubeconfig  
  19.    │     │  └──  terragrunt.hcl  
  20.    │     ├──  eks-addons 
  21.    │     │  └──  terragrunt.hcl  
  22.    │     └──  vpc  
  23.    │        └──  terragrunt.hcl  
  24.    └──  region_values.yaml 

這允許DRY(Don 't Repeat Yourself)基礎設施,并可以輕松地擴展AWS帳戶、區(qū)域和集群的數量。

觀察者集群

觀察者集群是我們的主集群,我們將從它查詢其他集群:

Prometheus正在運行:

  •  Grafana啟用
  •  Thanos邊車上傳到特定的桶 
  1. kube-prometheus-stack = {  
  2.   enabled                     = true  
  3.   allowed_cidrs               = dependency.vpc.outputs.private_subnets_cidr_blocks  
  4.   thanos_sidecar_enabled      = true  
  5.   thanos_bucket_force_destroy = true  
  6.   extra_values                = <<-EXTRA_VALUES  
  7.     grafana:  
  8.       deploymentStrategy:  
  9.         type: Recreate  
  10.       ingress:  
  11.         enabled: true  
  12.         annotations:  
  13.           kubernetes.io/ingress.class: nginx  
  14.           cert-manager.io/cluster-issuer: "letsencrypt"  
  15.         hosts:  
  16.           - grafana.${local.default_domain_suffix}  
  17.         tls:  
  18.           - secretName: grafana.${local.default_domain_suffix}  
  19.             hosts:  
  20.               - grafana.${local.default_domain_suffix}  
  21.       persistence:  
  22.         enabled: true  
  23.         storageClassName: ebs-sc  
  24.         accessModes:  
  25.           - ReadWriteOnce  
  26.         size: 1Gi  
  27.     prometheus:  
  28.       prometheusSpec:  
  29.         replicas: 1 
  30.         retention: 2d  
  31.         retentionSize: "10GB"  
  32.         ruleSelectorNilUsesHelmValues: false  
  33.         serviceMonitorSelectorNilUsesHelmValues: false  
  34.         podMonitorSelectorNilUsesHelmValues: false  
  35.         storageSpec: 
  36.           volumeClaimTemplate:  
  37.             spec:  
  38.               storageClassName: ebs-sc  
  39.               accessModes: ["ReadWriteOnce"]  
  40.               resources:  
  41.                 requests:  
  42.                   storage: 10Gi  
  43.     EXTRA_VALUES 

為觀察者集群生成一個CA證書:

  •  這個CA將被進入sidecar的被觀察集群所信任
  •  為Thanos querier組件生成TLS證書,這些組件將查詢被觀察集群

Thanos組件部署:

  •  Thanos組件全部部署完成
  •  查詢前端,作為Grafana的數據源端點
  •  存儲網關用于查詢觀察者桶
  •  Query將對存儲網關和其他查詢器執(zhí)行查詢

部署的額外Thanos組件:

  •  配置了TLS的Thanos查詢器對每個被觀察集群進行查詢 
  1. thanos-tls-querier = {  
  2.   "observee" = {  
  3.     enabled                 = true  
  4.     default_global_requests = true  
  5.     default_global_limits   = false  
  6.     stores = [  
  7.       "thanos-sidecar.${local.default_domain_suffix}:443"  
  8.     ]  
  9.   }  
  10.  
  11. thanos-storegateway = {  
  12.   "observee" = {  
  13.     enabled                 = true  
  14.     default_global_requests = true  
  15.     default_global_limits   = false  
  16.     bucket                  = "thanos-store-pio-thanos-observee"  
  17.     region                  = "eu-west-3"  
  18.   } 

被觀測集群

被觀測集群是Kubernetes集群,具有最小的Prometheus/Thanos安裝,將被觀測集群查詢。

Prometheus operator正在運行:

  •  Thanos這邊就是上傳給觀察者特定的桶
  •  Thanos邊車與TLS客戶端認證的入口對象一起發(fā)布,并信任觀察者集群CA 
  1. kube-prometheus-stack = {  
  2.   enabled                     = true  
  3.   allowed_cidrs               = dependency.vpc.outputs.private_subnets_cidr_blocks  
  4.   thanos_sidecar_enabled      = true 
  5.   thanos_bucket_force_destroy = true  
  6.   extra_values                = <<-EXTRA_VALUES  
  7.     grafana:  
  8.       enabled: false  
  9.     prometheus:  
  10.       thanosIngress:  
  11.         enabled: true  
  12.         ingressClassName: nginx 
  13.         annotations:  
  14.           cert-manager.io/cluster-issuer: "letsencrypt"  
  15.           nginx.ingress.kubernetes.io/ssl-redirect: "true"  
  16.           nginx.ingress.kubernetes.io/backend-protocol: "GRPC"  
  17.           nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"  
  18.           nginx.ingress.kubernetes.io/auth-tls-secret: "monitoring/thanos-ca"  
  19.         hosts:  
  20.         - thanos-sidecar.${local.default_domain_suffix}  
  21.         paths:  
  22.         - /  
  23.         tls:  
  24.         - secretName: thanos-sidecar.${local.default_domain_suffix}  
  25.           hosts: 
  26.            - thanos-sidecar.${local.default_domain_suffix}  
  27.       prometheusSpec:  
  28.         replicas: 1  
  29.         retention: 2d  
  30.         retentionSize: "6GB"  
  31.         ruleSelectorNilUsesHelmValues: false  
  32.         serviceMonitorSelectorNilUsesHelmValues: false  
  33.         podMonitorSelectorNilUsesHelmValues: false  
  34.         storageSpec:  
  35.           volumeClaimTemplate:  
  36.             spec:  
  37.               storageClassName: ebs-sc  
  38.               accessModes: ["ReadWriteOnce"]  
  39.               resources:  
  40.                 requests:  
  41.                   storage: 10Gi  
  42.     EXTRA_VALUES 

Thanos組件部署:

  •  Thanos壓縮器來管理這個特定集群的下采樣 
  1. thanos = {  
  2.   enabled = true  
  3.   bucket_force_destroy = true  
  4.   trusted_ca_content      = dependency.thanos-ca.outputs.thanos_ca  
  5.   extra_values = <<-EXTRA_VALUES  
  6.     compactor:  
  7.       retentionResolution5m: 90d  
  8.     query:  
  9.       enabled: false  
  10.     queryFrontend:  
  11.       enabled: false  
  12.     storegateway:  
  13.       enabled: false  
  14.     EXTRA_VALUES  

再深入一點

讓我們檢查一下集群上正在運行什么。關于觀察員,我們有: 

  1. kubectl -n monitoring get pods  
  2. NAME                                                        READY   STATUS    RESTARTS   AGE  
  3. alertmanager-kube-prometheus-stack-alertmanager-0           2/2     Running   0          120m  
  4. kube-prometheus-stack-grafana-c8768466b-rd8wm               2/2     Running   0          120m  
  5. kube-prometheus-stack-kube-state-metrics-5cf575d8f8-x59rd   1/1     Running   0          120m  
  6. kube-prometheus-stack-operator-6856b9bb58-hdrb2             1/1     Running   0          119m  
  7. kube-prometheus-stack-prometheus-node-exporter-8hvmv        1/1     Running   0          117m  
  8. kube-prometheus-stack-prometheus-node-exporter-cwlfd        1/1     Running   0          120m  
  9. kube-prometheus-stack-prometheus-node-exporter-rsss5        1/1     Running   0          120m  
  10. kube-prometheus-stack-prometheus-node-exporter-rzgr9        1/1     Running   0          120m  
  11. prometheus-kube-prometheus-stack-prometheus-0               3/3     Running   1          120m 
  12. thanos-compactor-74784bd59d-vmvps                           1/1     Running   0          119m  
  13. thanos-query-7c74db546c-d7bp8                               1/1     Running   0          12m  
  14. thanos-query-7c74db546c-ndnx2                               1/1     Running   0          12m  
  15. thanos-query-frontend-5cbcb65b57-5sx8z                      1/1     Running   0          119m  
  16. thanos-query-frontend-5cbcb65b57-qjhxg                      1/1     Running   0          119m  
  17. thanos-storegateway-0                                       1/1     Running   0          119m  
  18. thanos-storegateway-1                                       1/1     Running   0          118m 
  19. thanos-storegateway-observee-storegateway-0                 1/1     Running   0          12m  
  20. thanos-storegateway-observee-storegateway-1                 1/1     Running   0          11m  
  21. thanos-tls-querier-observee-query-dfb9f79f9-4str8           1/1     Running   0          29m  
  22. thanos-tls-querier-observee-query-dfb9f79f9-xsq24           1/1     Running   0          29m  
  23. kubectl -n monitoring get ingress  
  24. NAME                            CLASS    HOSTS                                            ADDRESS                                                                     PORTS     AGE 
  25.  
  26. kube-prometheus-stack-grafana   <none>   grafana.thanos.teks-tg.clusterfrak-dynamics.io   k8s-ingressn-ingressn-afa0a48374-f507283b6cd101c5.elb.eu-west-1.amazonaws.com   80, 443   123m 

被觀察者: 

  1. kubectl -n monitoring get pods  
  2. NAME                                                        READY   STATUS    RESTARTS   AGE  
  3. alertmanager-kube-prometheus-stack-alertmanager-0           2/2     Running   0          39m  
  4. kube-prometheus-stack-kube-state-metrics-5cf575d8f8-ct292   1/1     Running   0          39m 
  5. kube-prometheus-stack-operator-6856b9bb58-4cngc             1/1     Running   0          39m  
  6. kube-prometheus-stack-prometheus-node-exporter-bs4wp        1/1     Running   0          39m  
  7. kube-prometheus-stack-prometheus-node-exporter-c57ss        1/1     Running   0          39m  
  8. kube-prometheus-stack-prometheus-node-exporter-cp5ch        1/1     Running   0          39m  
  9. kube-prometheus-stack-prometheus-node-exporter-tnqvq        1/1     Running   0          39m  
  10. kube-prometheus-stack-prometheus-node-exporter-z2p49        1/1     Running   0          39m  
  11. kube-prometheus-stack-prometheus-node-exporter-zzqp7        1/1     Running   0          39m 
  12. prometheus-kube-prometheus-stack-prometheus-0               3/3     Running   1          39m  
  13. thanos-compactor-7576dcbcfc-6pd4v                           1/1     Running   0          38m 
  14. kubectl -n monitoring get ingress  
  15. NAME                                   CLASS   HOSTS                                                   ADDRESS                                                                      PORTS     AGE 
  16. kube-prometheus-stack-thanos-gateway   nginx   thanos-sidecar.thanos.teks-tg.clusterfrak-dynamics.io   k8s-ingressn-ingressn-95903f6102-d2ce9013ac068b9e.elb.eu-west-3.amazonaws.com   80, 443   40m 

我們的TLS查詢器應該能夠查詢被觀測集群的度量標準。讓我們來看看它們的行為: 

  1. k -n monitoring logs -f thanos-tls-querier-observee-query-687dd88ff5-nzpdh  
  2. level=info ts=2021-02-23T15:37:35.692346206Z caller=storeset.go:387 component=storeset msg="adding new storeAPI to query storeset" address=thanos-sidecar.thanos.teks-tg.clusterfrak-dynamics.io:443 extLset="{cluster=\"pio-thanos-observee\", prometheus=\"monitoring/kube-prometheus-stack-prometheus\", prometheus_replica=\"prometheus-kube-prometheus-stack-prometheus-0\"}" 

所以這個查詢器pods可以查詢我的其他集群,如果我們檢查Web,我們可以看到存儲: 

  1. kubectl -n monitoring port-forward thanos-tls-querier-observee-query-687dd88ff5-nzpdh 10902 

太棒了,但是我只有一個存儲,還記得我們說過查詢器可以堆疊在一起嗎?在我們的觀察者集群中,我們有標準的http查詢器,它可以查詢架構圖中的其他組件。 

  1. kubectl -n monitoring port-forward thanos-query-7c74db546c-d7bp8 10902 

這里我們可以看到所有的存儲已經被添加到我們的中心查詢器:

  •  觀察者把本地Thanos聚集
  •  我們的存儲網關(一個用于遠程觀測者集群,一個用于本地觀測者集群)
  •  本地TLS查詢器,它可以查詢被觀察的sidecar

在Grafana可視化

最后,我們可以前往Grafana,看看默認的Kubernetes儀表板是如何與多集群兼容的。

總結

Thanos是一個非常復雜的系統(tǒng),有很多移動部件,我們沒有深入研究具體的自定義配置,因為它會花費太多的時間。

我們在tEKS存儲庫中提供了一個相當完整的AWS實現(xiàn),它抽象了很多復雜性(主要是mTLS部分),并允許進行很多定制。你也可以使用terraform-kubernetes-addons模塊作為獨立的組件。我們計劃在未來支持其他云提供商。不要猶豫,通過Github上的任何一個項目的問題聯(lián)系我們。

根據你的基礎設施和需求,有許多可能適合你的Thanos實現(xiàn)。

如果你想深入研究Thanos,可以查看他們的官方kube-thanos存儲庫,以及他們關于跨集群通信的建議[5]。

當然,我們很樂意幫助你設置你的云原生監(jiān)控堆棧,歡迎聯(lián)系我們contact@particule.io:)

你也可以每天通過CNCF/Kubernetes Slack頻道聯(lián)系我們。 

 

責任編輯:龐桂玉 來源: 運維派
相關推薦

2021-08-27 10:14:16

Thanos監(jiān)控開源

2025-02-10 07:10:00

多模態(tài)embeddingsAI

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領云

2018-09-28 14:06:25

前端緩存后端

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2022-11-06 21:14:02

數據驅動架構數據

2024-05-31 12:44:12

2023-08-10 09:49:57

自動駕駛視覺

2022-07-05 06:30:54

云網絡網絡云原生

2023-05-20 17:58:31

低代碼軟件

2023-11-27 17:35:48

ComponentWeb外層

2022-10-20 08:01:23

2022-07-26 00:00:03

語言模型人工智能

2022-12-01 17:23:45

2021-12-29 18:00:19

無損網絡網絡通信網絡

2021-02-05 05:26:33

字節(jié)ASCII控制

2020-12-30 09:05:24

架構微內核系統(tǒng)

2017-05-04 20:29:12

HTTP服務器TCP
點贊
收藏

51CTO技術棧公眾號