久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

使用Prometheus和Thanos怎樣進行高可用K8S監控

156次閱讀
沒有評論

共計 5352 個字符,預計需要花費 14 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關使用 Prometheus 和 Thanos 怎樣進行高可用 K8S 監控,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

介 紹 Prometheus 高可用的必要性

在過去的幾年里,Kubernetes 的采用量增長了數倍。很明顯,Kubernetes 是容器編排的不二選擇。與此同時,Prometheus 也被認為是監控容器化和非容器化工作負載的絕佳選擇。監控是任何基礎設施的一個重要關注點,我們應該確保我們的監控設置具有高可用性和高可擴展性,以滿足不斷增長的基礎設施的需求,特別是在采用 Kubernetes 的情況下。

因此,今天我們將部署一個集群化的 Prometheus 設置,它不僅能夠彈性應對節點故障,還能保證合適的數據存檔,供以后參考。我們的設置還具有很強的可擴展性,以至于我們可以在同一個監控保護傘下跨越多個 Kubernetes 集群。

當前方案

大部分的 Prometheus 部署都是使用持久卷的 pod,而 Prometheus 則是使用聯邦機制進行擴展。但是并不是所有的數據都可以使用聯邦機制進行聚合,在這里,當你增加額外的服務器時,你往往需要一個機制來管理 Prometheus 配置。

解決方法

Thanos 旨在解決上述問題。在 Thanos 的幫助下,我們不僅可以對 Prometheus 的實例進行多重復制,并在它們之間進行數據去重,還可以將數據歸檔到 GCS 或 S3 等長期存儲中。

實施過程 Thanos 架構

圖片來源: https://thanos.io/quick-tutorial.md/

Thanos 由以下組件構成:

Thanos sidecar:這是運行在 Prometheus 上的主要組件。它讀取和歸檔對象存儲上的數據。此外,它還管理著 Prometheus 的配置和生命周期。為了區分每個 Prometheus 實例,sidecar 組件將外部標簽注入到 Prometheus 配置中。該組件能夠在 Prometheus 服務器的 PromQL 接口上運行查詢。Sidecar 組件還能監聽 Thanos gRPC 協議,并在 gRPC 和 REST 之間翻譯查詢。

Thanos 存儲:該組件在對象 storage bucket 中的歷史數據之上實現了 Store API,它主要作為 API 網關,因此不需要大量的本地磁盤空間。它在啟動時加入一個 Thanos 集群,并公布它可以訪問的數據。它在本地磁盤上保存了少量關于所有遠程區塊的信息,并使其與 bucket 保持同步。通常情況下,在重新啟動時可以安全地刪除此數據,但會增加啟動時間。

Thanos 查詢:查詢組件在 HTTP 上監聽并將查詢翻譯成 Thanos gRPC 格式。它從不同的源頭匯總查詢結果,并能從 Sidecar 和 Store 讀取數據。在 HA 設置中,它甚至會對查詢結果進行重復數據刪除。

HA 組的運行時重復數據刪除

Prometheus 是有狀態的,不允許復制其數據庫。這意味著通過運行多個 Prometheus 副本來提高高可用性并不易于使用。簡單的負載均衡是行不通的,比如在發生某些崩潰之后,一個副本可能會啟動,但是查詢這樣的副本會導致它在關閉期間出現一個小的缺口(gap)。你有第二個副本可能正在啟動,但它可能在另一個時刻(如滾動重啟)關閉,因此在這些副本上面的負載均衡將無法正常工作。

Thanos Querier 則從兩個副本中提取數據,并對這些信號進行重復數據刪除,從而為 Querier 使用者填補了缺口(gap)。

Thanos Compact 組件將 Prometheus 2.0 存儲引擎的壓實程序應用于對象存儲中的塊數據存儲。它通常不是語義上的并發安全,必須針對 bucket 進行單例部署。它還負責數據的下采樣——40 小時后執行 5m 下采樣,10 天后執行 1h 下采樣。

Thanos Ruler 基本上和 Prometheus 的規則具有相同作用,唯一區別是它可以與 Thanos 組件進行通信。

配 置前期準備

要完全理解這個教程,需要準備以下東西:

對 Kubernetes 和使用 kubectl 有一定的了解。

運行中的 Kubernetes 集群至少有 3 個節點(在本 demo 中,使用 GKE 集群)

實現 Ingress Controller 和 Ingress 對象(在本 demo 中使用 Nginx Ingress Controller)。雖然這不是強制性的,但為了減少創建外部端點的數量,強烈建議使用。

創建用于 Thanos 組件訪問對象存儲的憑證(在本例中為 GCS bucket)。

創建 2 個 GCS bucket,并將其命名為 Prometheus-long-term 和 thanos-ruler。

創建一個服務賬戶,角色為 Storage Object Admin。

下載密鑰文件作為 json 證書,并命名為 thanos-gcs-credentials.json。

使用憑證創建 Kubernetes sercret

kubectl create secret generic thanos-gcs-credentials –from-file=thanos-gcs-credentials.json

部署各類組件

部署 Prometheus 服務賬戶、Clusterroler 和 Clusterrolebinding

apiVersion: v1
kind: Namespace
metadata:
 name: monitoring
apiVersion: v1
kind: ServiceAccount
metadata:
 name: monitoring
 namespace: monitoring
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
 name: monitoring
 namespace: monitoring
rules:
- apiGroups: [ ]
 resources:
 - nodes
 - nodes/proxy
 - services
 - endpoints
 - pods
 verbs: [get ,  list ,  watch]
- apiGroups: [ ]
 resources:
 - configmaps
 verbs: [get]
- nonResourceURLs: [/metrics]
 verbs: [get]
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
 name: monitoring
subjects:
 - kind: ServiceAccount
 name: monitoring
 namespace: monitoring
roleRef:
 kind: ClusterRole
 Name: monitoring
 apiGroup: rbac.authorization.k8s.io
---

以上 manifest 創建了 Prometheus 所需的監控命名空間以及服務賬戶、clusterrole 以及 clusterrolebinding。

部署 Prometheues 配置 configmap

apiVersion: v1
kind: ConfigMap
metadata:
 name: prometheus-server-conf
 labels:
 name: prometheus-server-conf
 namespace: monitoring
data:
 prometheus.yaml.tmpl: |-
 global:
 scrape_interval: 5s
 evaluation_interval: 5s
 external_labels:
 cluster: prometheus-ha
 # Each Prometheus has to have unique labels.
 replica: $(POD_NAME)
 rule_files:
 - /etc/prometheus/rules/*rules.yaml
 alerting:
 # We want our alerts to be deduplicated
 # from different replicas.
 alert_relabel_configs:
 - regex: replica
 action: labeldrop
 alertmanagers:
 - scheme: http
 path_prefix: /
 static_configs:
 - targets: [alertmanager:9093]
 scrape_configs:
 - job_name: kubernetes-nodes-cadvisor
 scrape_interval: 10s
 scrape_timeout: 10s
 scheme: https
 tls_config:
 ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
 bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
 kubernetes_sd_configs:
 - role: node
 relabel_configs:
 - action: labelmap
 regex: __meta_kubernetes_node_label_(.+)
 # Only for Kubernetes ^1.7.3.
 # See: https://github.com/prometheus/prometheus/issues/2916
 - target_label: __address__
 replacement: kubernetes.default.svc:443
 - source_labels: [__meta_kubernetes_node_name]
 regex: (.+)
 target_label: __metrics_path__
 replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
 metric_relabel_configs:
 - action: replace
 source_labels: [id]
 regex:  ^/machine\.slice/machine-rkt\\x2d([^\\]+)\\.+/([^/]+)\.service$
 target_label: rkt_container_name
 replacement:  ${2}-${1}
 - action: replace
 source_labels: [id]
 regex:  ^/system\.slice/(.+)\.service$
 target_label: systemd_service_name
 replacement:  ${1}
 - job_name:  kubernetes-pods
 kubernetes_sd_configs:
 - role: pod
 relabel_configs:
 - action: labelmap
 regex: __meta_kubernetes_pod_label_(.+)
 - source_labels: [__meta_kubernetes_namespace]
 action: replace
 target_label: kubernetes_namespace
 - source_labels: [__meta_kubernetes_pod_name]
 action: replace
 target_label: kubernetes_pod_name
 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
 action: keep
 regex: true
 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scheme]
 action: replace
 target_label: __scheme__
 regex: (https?)
 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
 action: replace
 target_label: __metrics_path__
 regex: (.+)
 - source_labels: [__address__, __meta_kubernetes_pod_prometheus_io_port]
 action: replace
 target_label: __address__
 regex: ([^:]+)(?::\d+)?;(\d+)
 replacement: $1:$2

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計5352字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 湖口县| 临汾市| 遵义县| 定安县| 龙井市| 绩溪县| 罗城| 石棉县| 江山市| 仪陇县| 信丰县| 怀化市| 白玉县| 苍山县| 维西| 黎平县| 乐陵市| 且末县| 莱西市| 贡觉县| 繁昌县| 湘阴县| 视频| 广灵县| 全椒县| 南平市| 永修县| 庆安县| 庐江县| 浑源县| 景宁| 肃宁县| 昌都县| 宁津县| 潜山县| 延长县| 蒙阴县| 区。| 西吉县| 铜陵市| 略阳县|