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

Prometheus on k8s 部署與實戰(zhàn)操作進階篇

云計算 云原生
Prometheus和Prometheus Operator的配置和使用在實際環(huán)境中可能會因版本和具體的Kubernetes發(fā)行版而有所不同。為了獲得更詳細(xì)和準(zhǔn)確的指導(dǎo),請查閱官方文檔和適用于您特定環(huán)境的教程。
一、概述

Prometheus是一種開源的監(jiān)控和警報工具,用于收集和記錄應(yīng)用程序和系統(tǒng)的度量數(shù)據(jù)。它特別適用于在Kubernetes集群中監(jiān)控容器化應(yīng)用程序。Kubernetes集群中通常與Prometheus一起使用的組件是Prometheus Operator和Grafana。

以下是在Kubernetes中使用Prometheus的主要步驟:

安裝Prometheus Operator:Prometheus Operator是一種Kubernetes控制器,用于簡化Prometheus的部署和管理。您可以通過在Kubernetes中部署Prometheus Operator來自動設(shè)置和管理Prometheus實例。

配置Prometheus實例:Prometheus Operator將通過Kubernetes的自定義資源定義(CRD)創(chuàng)建和管理Prometheus實例。您可以使用PrometheusRule CRD定義監(jiān)控規(guī)則,并使用ServiceMonitor CRD定義需要監(jiān)控的目標(biāo)(例如Kubernetes服務(wù))。

配置和導(dǎo)入Dashboard:Grafana通常與Prometheus一起使用,用于可視化監(jiān)控指標(biāo)。您可以在Grafana中導(dǎo)入Prometheus的預(yù)定義儀表板或自定義儀表板來查看和分析度量數(shù)據(jù)。

監(jiān)控應(yīng)用程序和系統(tǒng):Prometheus通過HTTP端點從目標(biāo)應(yīng)用程序和系統(tǒng)中拉取度量數(shù)據(jù)。您可以在應(yīng)用程序中暴露Prometheus格式的度量數(shù)據(jù),并在ServiceMonitor中定義用于監(jiān)控的目標(biāo)。

警報配置:Prometheus還支持配置警報規(guī)則,以便在達到特定閾值或條件時觸發(fā)警報。警報規(guī)則可以定義為PrometheusRule CRD。

請注意,Prometheus和Prometheus Operator的配置和使用在實際環(huán)境中可能會因版本和具體的Kubernetes發(fā)行版而有所不同。為了獲得更詳細(xì)和準(zhǔn)確的指導(dǎo),請查閱官方文檔和適用于您特定環(huán)境的教程。

圖片圖片

二、常見的幾款監(jiān)控工具

以下這些工具可以用于在 Kubernetes 集群中實現(xiàn)監(jiān)控和指標(biāo)收集,以便于監(jiān)視集群中的各種資源和應(yīng)用的性能。

  • Heapster:Heapster 是一個 Kubernetes 集群的資源監(jiān)控工具,用于收集和匯總資源使用情況數(shù)據(jù),如 CPU、內(nèi)存、網(wǎng)絡(luò)等。
  • Metrics Server:Metrics Server 是 Kubernetes 官方提供的一個輕量級指標(biāo)收集器,用于提供節(jié)點和 Pod 等資源的實時性能指標(biāo),可以用于水平自動擴展等。
  • Prometheus Operator:Prometheus Operator 是一個 Kubernetes 控制器,用于管理和部署 Prometheus 和相關(guān)的監(jiān)控組件。它可以自動創(chuàng)建和管理 Prometheus 實例、ServiceMonitor 和其他配置。
  • kube-prometheus 或 kube-prometheus-stack:這是一個基于 Prometheus 的 Kubernetes 集群監(jiān)控解決方案。它包含了一系列組件,用于部署和管理 Prometheus、Alertmanager、Grafana 等,以實現(xiàn)對 Kubernetes 集群和應(yīng)用的全面監(jiān)控。

heapster-》metrics-server-》prometheus-operator -》kube-prometheus-》kube-prometheus-stack

  • prometheus-operator GitHub地址:https://github.com/prometheus-operator/prometheus-operator
  • kube-prometheus GitHub地址:https://github.com/prometheus-operator/kube-prometheus
  • kube-prometheus-stack GitHub地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

這些工具的組合可以幫助您搭建一個完整的監(jiān)控系統(tǒng),用于監(jiān)視 Kubernetes 集群中的資源利用率、應(yīng)用的性能、服務(wù)的可用性等指標(biāo)。請注意,隨著時間的推移,Kubernetes 社區(qū)的工具和技術(shù)也可能會有變化和演進,因此在使用這些工具時,建議查閱相關(guān)文檔以獲得最新信息和最佳實踐。

1)kube-prometheus 和 kube-prometheus-stack 區(qū)別

"kube-prometheus" 和 "kube-prometheus-stack" 本質(zhì)上是同一個項目,只是在不同的時間和版本中使用了不同的名稱。"kube-prometheus-stack" 是 "kube-prometheus" 項目的更新版本,它提供了更多的功能、改進和修復(fù)。

  • 最初,項目被稱為 "kube-prometheus",但隨著時間的推移,項目團隊對項目進行了大量的改進和擴展,并將其重命名為 "kube-prometheus-stack",以更好地反映其提供的綜合性監(jiān)控解決方案。
  • "kube-prometheus-stack"(或簡稱 "kube-prometheus")是一個在 Kubernetes 集群中部署和管理 Prometheus 監(jiān)控系統(tǒng)以及相關(guān)組件的綜合解決方案。它集成了 Prometheus、Grafana、Alertmanager 等一系列組件,還包括預(yù)配置的監(jiān)控規(guī)則和儀表盤,以及一鍵部署功能。用戶可以通過部署 "kube-prometheus-stack" 來快速啟動一個全面的 Kubernetes 集群監(jiān)控系統(tǒng),無需逐個配置各個組件。

總結(jié)起來,"kube-prometheus-stack" 是 "kube-prometheus" 項目的更新版本,提供更多的功能和改進,是一個便捷的綜合性監(jiān)控解決方案,適合在 Kubernetes 環(huán)境中快速部署和使用。

2)Prometheus Operator 和kube-prometheus 或 kube-prometheus-stack對比

"Prometheus Operator" 和 "kube-prometheus"(或 "kube-prometheus-stack")都是用于在 Kubernetes 集群中部署和管理 Prometheus 監(jiān)控系統(tǒng)的工具。它們有一些相似之處,但也存在一些區(qū)別。以下是它們的主要特點和區(qū)別的對比:

Prometheus Operator:

  • 核心功能:Prometheus Operator 是一個 Kubernetes 控制器,專門用于管理 Prometheus 和相關(guān)組件的配置和部署。它自動創(chuàng)建和管理 Prometheus 實例、ServiceMonitor、Alertmanager、PrometheusRule 等 Kubernetes 資源。
  • 聲明式配置:Prometheus Operator 通過自定義資源定義(Custom Resource Definitions,CRDs)來實現(xiàn)聲明式配置。您可以創(chuàng)建 Prometheus、ServiceMonitor 等資源對象來定義監(jiān)控配置,Operator 會根據(jù)這些定義自動創(chuàng)建和維護相關(guān)的資源。
  • 自動發(fā)現(xiàn):Prometheus Operator 支持自動發(fā)現(xiàn) Kubernetes 中的 Service、Pod、Namespace 等資源,無需手動配置每個監(jiān)控目標(biāo)。
  • 生態(tài)系統(tǒng)整合:Prometheus Operator 集成了 Grafana 和 Alertmanager,并可以輕松與其他監(jiān)控工具集成。
  • 靈活性:Prometheus Operator 允許根據(jù)不同的需求和配置選擇性地部署多個 Prometheus 實例,每個實例可以針對特定的監(jiān)控任務(wù)進行配置。

kube-prometheus 或 kube-prometheus-stack:

  • 綜合解決方案:kube-prometheus(或 kube-prometheus-stack)是一個完整的監(jiān)控解決方案,集成了 Prometheus、Grafana、Alertmanager 等一系列組件,以及一些預(yù)配置的監(jiān)控規(guī)則和儀表盤。
  • 快速啟動:kube-prometheus 提供了一鍵式的部署方式,適合快速啟動一個完整的監(jiān)控系統(tǒng),無需逐個配置各個組件。
  • 預(yù)配置規(guī)則和儀表盤:kube-prometheus 提供了一些默認(rèn)的監(jiān)控規(guī)則和 Grafana 儀表盤,可以快速啟用監(jiān)控功能。
  • 集成和擴展:由于 kube-prometheus 集成了多個組件,您可以使用這個解決方案來快速部署一個全面的監(jiān)控系統(tǒng),并且可以根據(jù)需要進行定制和擴展。

綜合來看,Prometheus Operator 專注于 Prometheus 和相關(guān)資源的管理和自動化配置,而 kube-prometheus 或 kube-prometheus-stack 則是一個更加綜合的解決方案,適合快速啟動一個完整的監(jiān)控系統(tǒng),尤其對于剛開始使用 Prometheus 的用戶來說,可以減少配置的復(fù)雜性。您可以根據(jù)實際需求和情況選擇合適的工具。

三、Prometheus Operator 架構(gòu)

圖片圖片

Prometheus Operator 是一個用于在 Kubernetes 集群中自動化部署和管理 Prometheus 監(jiān)控系統(tǒng)的控制器。它采用了聲明式配置的方式,通過 Kubernetes 自定義資源定義(Custom Resource Definitions,CRDs)來定義和管理 Prometheus、ServiceMonitor、Alertmanager、PrometheusRule 等資源對象。以下是 Prometheus Operator 的架構(gòu)說明:

  • Prometheus Operator 控制器:Prometheus Operator 控制器是一個運行在 Kubernetes 集群中的控制器,負(fù)責(zé)監(jiān)聽 Prometheus 相關(guān)的自定義資源變化,根據(jù)變化自動執(zhí)行相應(yīng)的操作。
  • Prometheus CRD:Prometheus Operator 引入了自定義資源定義(CRD) Prometheus,用于定義 Prometheus 實例的配置。在 Prometheus CRD 中,您可以定義監(jiān)控的規(guī)則、數(shù)據(jù)存儲、數(shù)據(jù)保留策略等。
  • ServiceMonitor CRD:ServiceMonitor 是另一個自定義資源,用于定義要監(jiān)控的應(yīng)用程序。每個 ServiceMonitor 都關(guān)聯(lián)到一個或多個 Kubernetes 的 Service,Prometheus Operator 將自動發(fā)現(xiàn)這些關(guān)聯(lián)的服務(wù),并生成適當(dāng)?shù)谋O(jiān)控配置。
  • Alertmanager CRD:類似于 Prometheus 和 ServiceMonitor,Prometheus Operator 還支持 Alertmanager 自定義資源,用于定義 Alertmanager 實例的配置。
  • PrometheusRule CRD:PrometheusRule 自定義資源用于定義 Prometheus 的告警規(guī)則。通過這些規(guī)則,您可以指定應(yīng)該在 Prometheus 中生成哪些告警。
  • 自動發(fā)現(xiàn)和配置生成:Prometheus Operator 根據(jù)定義的 ServiceMonitor 和 PrometheusRule 自動發(fā)現(xiàn)和生成相應(yīng)的監(jiān)控配置。它會監(jiān)聽 Kubernetes 中的變化,如服務(wù)的創(chuàng)建、刪除或標(biāo)簽的變更,以及規(guī)則的更新,然后自動更新 Prometheus 的配置文件。
  • Prometheus 部署:Prometheus Operator 會基于 Prometheus 自定義資源的定義,在 Kubernetes 集群中部署 Prometheus 實例。Operator 負(fù)責(zé)管理配置、Pod 的生命周期、版本升級等。
  • 集成 Grafana 和 Alertmanager:Prometheus Operator 通常也與 Grafana 和 Alertmanager 集成,可以配置 Grafana 和 Alertmanager 自定義資源,以便自動部署和配置這些組件。

ServiceMonitor 作用和示例講解:

ServiceMonitor 是 Prometheus Operator 中的一個自定義資源定義(CRD),用于定義要監(jiān)控的應(yīng)用程序服務(wù)。它的作用是指定哪些服務(wù)需要被 Prometheus 監(jiān)控,以及如何進行監(jiān)控。ServiceMonitor 在 Prometheus Operator 中的使用非常重要,因為它能夠自動發(fā)現(xiàn)被監(jiān)控的服務(wù),并生成適當(dāng)?shù)谋O(jiān)控配置。

下面是一個 ServiceMonitor 的示例講解:

假設(shè)有一個名為 "my-app" 的應(yīng)用程序在 Kubernetes 集群中運行,我們希望 Prometheus 監(jiān)控該應(yīng)用程序的性能指標(biāo)。首先,我們需要創(chuàng)建一個 ServiceMonitor 自定義資源來定義該應(yīng)用程序的監(jiān)控配置。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-app-monitor
  namespace: default
spec:
  selector:
    matchLabels:
      app: my-app
  endpoints:
    - port: web
      interval: 30s

在上述示例中:

  • apiVersion 和 kind 指定了這是一個 ServiceMonitor 自定義資源。
  • metadata 中的 name 指定了 ServiceMonitor 對象的名稱。
  • spec 部分定義了監(jiān)控的配置。在 selector 中,我們使用了 matchLabels 來選擇帶有 app: my-app 標(biāo)簽的 Pod。這意味著只有具有該標(biāo)簽的 Pod 會被監(jiān)控。
  • 在 endpoints 中,我們定義了監(jiān)控的端點信息。在這個示例中,我們監(jiān)控了名為 "web" 的端口,并指定了抓取數(shù)據(jù)的時間間隔為 30 秒。

通過創(chuàng)建這個 ServiceMonitor 對象,Prometheus Operator 將自動發(fā)現(xiàn)帶有標(biāo)簽 app: my-app 的 Pod,并在 Prometheus 配置中生成相應(yīng)的監(jiān)控作業(yè)(job)。這樣,Prometheus 就會定期抓取這些 Pod 的指標(biāo)數(shù)據(jù),以進行監(jiān)控和告警。

通過使用 Prometheus Operator,您可以通過簡單的聲明式配置來自動管理和擴展 Prometheus 監(jiān)控系統(tǒng),從而使監(jiān)控的部署和維護更加簡單和可靠。

四、快速在k8s內(nèi)搭建 Prometheus 全家桶

最開始是Heapster+cAdvisor方式監(jiān)控,這是Prometheus Operator出現(xiàn)之前的k8s監(jiān)控方案。后來出現(xiàn)了Prometheus Operator,但是目前Prometheus Operator已經(jīng)不包含完整功能,完整的解決方案已經(jīng)變?yōu)閗ube-prometheus(或kube-prometheus-stack)。

"kube-prometheus" 和 "kube-prometheus-stack" 本質(zhì)上是同一個項目,只是在不同的時間和版本中使用了不同的名稱。"kube-prometheus-stack" 是 "kube-prometheus" 項目的更新版本,它提供了更多的功能、改進和修復(fù)。

kube-prometheus-stack GitHub地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

1)k8s 環(huán)境安裝

k8s 環(huán)境安裝之前寫過很多文檔,可以參考我以下幾篇文章:

  • 【云原生】k8s 離線部署講解和實戰(zhàn)操作
  • 【云原生】k8s 環(huán)境快速部署(一小時以內(nèi)部署完)

2)安裝 helm

下載地址:https://github.com/kubernetes/helm/releases

# 下載包
wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz
# 解壓壓縮包
tar -xf helm-v3.7.1-linux-amd64.tar.gz
# 制作軟連接
ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm
# 驗證
helm version
helm help

3)【第一種安裝方法】直接安裝方式(kube-prometheus)

第一種方法是下載 manifests 包里的yaml,再通過 kubectl 部署。

1、下載kube-prometheus

下載地址:https://github.com/prometheus-operator/kube-prometheus

git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus

【注】在 release-0.11 版本之后新增了 NetworkPolicy 默認(rèn)是允許自己訪問,如果了解 NetworkPolicy 可以修改一下默認(rèn)的規(guī)則,可以用查看 ls manifests/*networkPolicy*,如果不修改的話則會影響到修改 NodePort 類型也無法訪問,如果不會 Networkpolicy 可以直接刪除就行。

2、修改鏡像源

國外鏡像源某些鏡像無法拉取,我們這里修改prometheus-operator,prometheus,alertmanager,kube-state-metrics,node-exporter,prometheus-adapter的鏡像源為國內(nèi)鏡像源。我這里使用的是中科大的鏡像源。

# 查找
grep -rn 'quay.io' *
# 批量替換
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' `grep "quay.io" -rl *`
# 再查找
grep -rn 'quay.io' *
grep -rn 'image: ' *

3、修改 service 配置類型為 NodePort

為了可以從外部訪問 prometheus,alertmanager,grafana,我們這里修改 promethes,alertmanager,grafana的 service 類型為 NodePort 類型。

【1】修改 prometheus 的 service
# 設(shè)置對外訪問端口,增加如下兩行,完整配置也貼出來了。
# type: NodePort
# nodePort: 30090

vi manifests/prometheus-service.yaml

完整配置

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.46.0
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 30090
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
  selector:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: ClientIP
【2】修改 grafana 的 service

完整配置

# 設(shè)置對外訪問端口,增加如下兩行,完整配置也貼出來了。
# type: NodePort
# nodePort: 30300
vi manifests/grafana-service.yaml

完整配置

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 9.5.3
  name: grafana
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30300
  selector:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
【3】修改 alertmanager 的 service
# 設(shè)置對外訪問端口,增加如下兩行,完整配置也貼出來了。
# type: NodePort
# nodePort: 30093
vi manifests/grafana-service.yaml

完整配置

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: alert-router
    app.kubernetes.io/instance: main
    app.kubernetes.io/name: alertmanager
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 0.25.0
  name: alertmanager-main
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9093
    targetPort: web
    nodePort: 30093
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
  selector:
    app.kubernetes.io/component: alert-router
    app.kubernetes.io/instance: main
    app.kubernetes.io/name: alertmanager
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: ClientIP

4、開始安裝

kubectl apply --server-side -f manifests/setup
kubectl wait \
	--for cnotallow=Established \
	--all CustomResourceDefinition \
	--namespace=monitoring
kubectl apply -f manifests/

# 查看
kubectl get all -n monitoring

圖片圖片

【溫馨提示】如果上面下載鏡像失敗,可以使用以下地址下載,當(dāng)然也可以去hub.docker.com下載。

這里也提供鏡像包

鏈接:https://pan.baidu.com/s/10ksK1OtKwlvZqbExKmZgLw?pwd=bcu6提取碼:bcu6

6、瀏覽器訪問

Prometheus:http://ip:30090/

圖片圖片

Grafana :http://ip:30300/默認(rèn)賬號/密碼:admin/admin

圖片圖片

Alertmanager:http://ip:30093/

圖片圖片

5、卸載

kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup

4)【第二種安裝方法】通過 helm3 開始安裝 kube-prometheus-stack

1、下載安裝包

# 添加repo
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 查詢
helm search repo prometheus-community/prometheus

# 拉包
helm pull prometheus-community/kube-prometheus-stack --versinotallow=48.4.0
# 解包
tar -xf kube-prometheus-stack-48.4.0.tgz

2、修改配置

查看所需要的鏡像,最好提前下載鏡像,要不然很大可能會因為下載鏡像失敗而安裝失敗。

grep -A3 'image:' kube-prometheus-stack/values.yaml

圖片圖片

3、開始安裝

helm install mykube-prometheus-stack kube-prometheus-stack \
  -n kube-prometheus-stack --create-namespace \
  --set prometheus-node-exporter.hostRootFsMount=false \
  --set prometheus.ingress.enabled=true \
  --set prometheus.ingress.hosts='{prometheus.k8s.local}' \
  --set prometheus.ingress.paths='{/}' \
  --set prometheus.ingress.pathType=Prefix \
  --set alertmanager.ingress.enabled=true \
  --set alertmanager.ingress.hosts='{alertmanager.k8s.local}' \
  --set alertmanager.ingress.paths='{/}' \
  --set alertmanager.ingress.pathType=Prefix \
  --set grafana.ingress.enabled=true \
  --set grafana.ingress.hosts='{grafana.k8s.local}' \
  --set grafana.ingress.paths='{/}' \
  --set grafana.ingress.pathType=Prefix

4、卸載

helm uninstall mykube-prometheus-stack -n kube-prometheus-stack

責(zé)任編輯:武曉燕 來源: 大數(shù)據(jù)與云原生技術(shù)分享
相關(guān)推薦

2023-07-10 07:22:16

2023-07-11 07:12:21

Hadoop部署mysql

2022-10-10 12:54:00

Flink運維

2023-02-27 07:40:00

2022-11-06 21:31:11

云原生Sentinel集群模式

2023-03-01 07:42:12

HBase編排部署數(shù)據(jù)

2023-09-06 08:12:04

k8s云原生

2023-03-06 07:19:50

2023-11-06 01:17:25

主機容器選項

2023-03-03 07:54:21

2022-11-08 08:55:31

2023-03-07 07:56:37

Sqoopk8s底層

2022-10-14 07:42:50

LuceneHTTPWeb

2023-09-11 00:09:18

2024-11-27 16:37:57

2017-09-19 15:01:06

PHP漏洞滲透測試

2024-02-01 09:48:17

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2021-01-01 09:20:20

操作DjangoORM

2023-03-26 09:08:36

點贊
收藏

51CTO技術(shù)棧公眾號