k8s監控系統prometheus-operator

2020-09-26 斜影

簡介

prometheus-operator
Prometheus:一個非常優秀的監控工具或者說是監控方案。它提供了數據搜集、存儲、處理、可視化和告警一套完整的解決方案。作為kubernetes官方推薦的監控系統,用Prometheus來監控kubernetes集群的狀況和運行在集群上的應用運行狀況。

Prometheus架構圖

那Prometheus Operator是做什麼的呢?
Operator是由CoreOS公司開發的,用來擴展 Kubernetes API,特定的應用程式控制器,它用來創建、配置和管理複雜的有狀態應用,如資料庫、緩存和監控系統。
可以理解為,Prometheus Operator就是用於管理部署Prometheus到kubernetes的工具,其目的是簡化和自動化對Prometheus組件的維護。

Prometheus Operator架構

部署前準備

1、克隆kube-prometheus項目

[root@k8s-master001 opt] ls -altotal 20drwxr-xr-x. 10 root root  140 Sep 14 21:25 .drwxr-xr-x. 12 root root 4096 Sep 14 21:11 ..drwxr-xr-x.  2 root root 4096 Sep 14 21:23 adapterdrwxr-xr-x.  2 root root  189 Sep 14 21:22 alertmanagerdrwxr-xr-x.  2 root root  241 Sep 14 21:22 exporterdrwxr-xr-x.  2 root root  254 Sep 14 21:23 grafanadrwxr-xr-x.  2 root root  272 Sep 14 21:22 metricsdrwxr-xr-x.  2 root root 4096 Sep 14 21:25 prometheusdrwxr-xr-x.  2 root root 4096 Sep 14 21:23 serviceMonitordrwxr-xr-x.  2 root root 4096 Sep 14 21:11 setup

3、修改yaml文件中的nodeSelector
首先查看下現在Node節點的標籤

[root@k8s-master001 manifests] grep -A1 nodeSelector  prometheus/*prometheus/prometheus-prometheus.yaml:  nodeSelector:prometheus/prometheus-prometheus.yaml:  nodeSelector:prometheus/prometheus-prometheus.yaml-    kubernetes.io/os: linux

部署kube-prometheus

1、安裝operator

[root@k8s-master001 manifests] kubectl  get po -n monitoringNAME                                   READY   STATUS    RESTARTS   AGEprometheus-operator-74d54b5cfc-xgqg7   2/2     Running   0          2m40s

2、安裝adapter

[root@k8s-master001 manifests] kubectl  get po -n monitoringNAME                                   READY   STATUS    RESTARTS   AGEprometheus-adapter-557648f58c-9x446    1/1     Running   0          41sprometheus-operator-74d54b5cfc-xgqg7   2/2     Running   0          4m33s

3、安裝alertmanager

[root@k8s-master001 manifests] kubectl  get po -n monitoringNAME                                   READY   STATUS    RESTARTS   AGEalertmanager-main-0                    2/2     Running   0          53malertmanager-main-1                    2/2     Running   0          3m3salertmanager-main-2                    2/2     Running   0          53m

4、安裝exporter

[root@k8s-master001 manifests] kubectl  get po -n monitoring NAME                                   READY   STATUS    RESTARTS   AGEnode-exporter-2rvtt                    2/2     Running   0          108snode-exporter-9kwb6                    2/2     Running   0          108snode-exporter-9zlbb                    2/2     Running   0          108s

5、安裝metrics

[root@k8s-master001 manifests] kubectl  get po -n monitoringNAME                                   READY   STATUS    RESTARTS   AGEkube-state-metrics-85cb9cfd7c-v9c4f    3/3     Running   0          2m8s

6、安裝prometheus

[root@k8s-master001 manifests] kubectl  get po -n monitoringNAME                                   READY   STATUS    RESTARTS   AGEprometheus-k8s-0                       3/3     Running   1          94sprometheus-k8s-1                       3/3     Running   1          94s

7、安裝grafana

root@k8s-master001 manifests] kubectl  get po -n monitoringNAME                                   READY   STATUS    RESTARTS   AGEgrafana-b558fb99f-87spq                1/1     Running   0          3m14s

8、安裝serviceMonitor

[root@k8s-master001 manifests] kubectl  get po -n monitoring NAME                                   READY   STATUS    RESTARTS   AGEalertmanager-main-0                    2/2     Running   0          90malertmanager-main-1                    2/2     Running   0          40malertmanager-main-2                    2/2     Running   0          90mgrafana-b558fb99f-87spq                1/1     Running   0          4m56skube-state-metrics-85cb9cfd7c-v9c4f    3/3     Running   0          10mnode-exporter-2rvtt                    2/2     Running   0          35mnode-exporter-9kwb6                    2/2     Running   0          35mnode-exporter-9zlbb                    2/2     Running   0          35mprometheus-adapter-557648f58c-9x446    1/1     Running   0          91mprometheus-k8s-0                       3/3     Running   1          7m49sprometheus-k8s-1                       3/3     Running   1          7m49sprometheus-operator-74d54b5cfc-xgqg7   2/2     Running   0          95mNAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGEservice/alertmanager-main       ClusterIP   10.98.96.94     <none>        9093/TCP                     91mservice/alertmanager-operated   ClusterIP   None            <none>        9093/TCP,9094/TCP,9094/UDP   91mservice/grafana                 ClusterIP   10.108.204.33   <none>        3000/TCP                     6m30sservice/kube-state-metrics      ClusterIP   None            <none>        8443/TCP,9443/TCP            12mservice/node-exporter           ClusterIP   None            <none>        9100/TCP                     36mservice/prometheus-adapter      ClusterIP   10.98.16.117    <none>        443/TCP                      93mservice/prometheus-k8s          ClusterIP   10.109.119.37   <none>        9090/TCP                     9m22sservice/prometheus-operated     ClusterIP   None            <none>        9090/TCP                     9m24sservice/prometheus-operator     ClusterIP   None            <none>        8443/TCP                     97m

10、使用nodeport暴露grafana和prometheus服務,訪問UI界面

---apiVersion: v1kind: Servicemetadata:  name: grafana-svc  namespace: monitoringspec:  type: NodePort  ports:  - port: 3000    targetPort: 3000  selector:    app: grafana---apiVersion: v1kind: Servicemetadata:  name: prometheus-svc  namespace: monitoringspec:  type: NodePort  ports:  - port: 9090    targetPort: 9090  selector:    prometheus: k8s

查看結果

[root@k8s-master001 manifests]FFFFFF; --tt-darkmode-color: EF7060; --tt-darkmode-bgcolor:  grep -A2 -B2  selector serviceMonitor/prometheus-serviceMonitorKube*serviceMonitor/prometheus-serviceMonitorKubeControllerManager.yaml-    matchNames:serviceMonitor/prometheus-serviceMonitorKubeControllerManager.yaml-    - kube-systemserviceMonitor/prometheus-serviceMonitorKubeControllerManager.yaml:  selector:serviceMonitor/prometheus-serviceMonitorKubeControllerManager.yaml-    matchLabels:serviceMonitor/prometheus-serviceMonitorKubeControllerManager.yaml-      k8s-app: kube-controller-manager--serviceMonitor/prometheus-serviceMonitorKubelet.yaml-    matchNames:serviceMonitor/prometheus-serviceMonitorKubelet.yaml-    - kube-systemserviceMonitor/prometheus-serviceMonitorKubelet.yaml:  selector:serviceMonitor/prometheus-serviceMonitorKubelet.yaml-    matchLabels:serviceMonitor/prometheus-serviceMonitorKubelet.yaml-      k8s-app: kubelet--serviceMonitor/prometheus-serviceMonitorKubeScheduler.yaml-    matchNames:serviceMonitor/prometheus-serviceMonitorKubeScheduler.yaml-    - kube-systemserviceMonitor/prometheus-serviceMonitorKubeScheduler.yaml:  selector:serviceMonitor/prometheus-serviceMonitorKubeScheduler.yaml-    matchLabels:serviceMonitor/prometheus-serviceMonitorKubeScheduler.yaml-      k8s-app: kube-scheduler

2、創建kube-controller-manager和kube-scheduler service
k8s v1.19默認使用https,kube-controller-manager埠10257 kube-scheduler埠10259
kube-controller-manager-scheduler.yml

apiVersion: v1kind: Servicemetadata:  namespace: kube-system  name: kube-controller-manager  labels:    k8s-app: kube-controller-managerspec:  selector:    component: kube-controller-manager  type: ClusterIP  clusterIP: None  ports:  - name: https-metrics    port: 10257    targetPort: 10257    protocol: TCP---apiVersion: v1kind: Servicemetadata:  namespace: kube-system  name: kube-scheduler  labels:    k8s-app: kube-schedulerspec:  selector:    component: kube-scheduler  type: ClusterIP  clusterIP: None  ports:  - name: https-metrics    port: 10259    targetPort: 10259    protocol: TCP

執行命令

[root@k8s-master001 manifests] kubectl  get svc -n kube-system NAME                      TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                        AGEkube-controller-manager   ClusterIP   None         <none>        10257/TCP                      37mkube-scheduler            ClusterIP   None         <none>        10259/TCP                      37m

3、創建kube-controller-manager和kube-scheduler endpoint
注意:addresses改成集群實際的IP
kube-ep.yml

apiVersion: v1kind: Endpointsmetadata:  labels:    k8s-app: kube-controller-manager  name: kube-controller-manager  namespace: kube-systemsubsets:- addresses:  - ip: 10.26.25.20  - ip: 10.26.25.21  - ip: 10.26.25.22  ports:  - name: https-metrics    port: 10257    protocol: TCP---apiVersion: v1kind: Endpointsmetadata:  labels:    k8s-app: kube-scheduler  name: kube-scheduler  namespace: kube-systemsubsets:- addresses:  - ip: 10.26.25.20  - ip: 10.26.25.21  - ip: 10.26.25.22  ports:  - name: https-metrics    port: 10259    protocol: TCP

[root@k8s-master001 manifests] kubectl  get ep -n kube-systemNAME                      ENDPOINTS                                                        AGEkube-controller-manager   10.26.25.20:10257,10.26.25.21:10257,10.26.25.22:10257            16mkube-scheduler            10.26.25.20:10259,10.26.25.21:10259,10.26.25.22:10259            16m

現在看下頁面上prometheus target,已經能看到kube-controller-manager和kube-scheduler被監控了

坑位二

1、默認清理下,kube-controller-manager和kube-scheduler綁定IP為127.0.0.1,如果需要監控這兩個服務,需要修改kube-controller-manager和kube-scheduler配置,讓其綁定到0.0.0.0
2、配置文件所在目錄/etc/kubernetes/manifests
修改kube-controller-manager.yaml中--bind-address=0.0.0.0
修改kube-scheduler.yaml中--bind-address=0.0.0.0
3、重啟kubelet:systemctl restart kubelet
4、查看是否生效,返回200即為成功

[root@k8s-master002 manifests] curl -I -k https://10.26.25.20:10259/healthzHTTP/1.1 200 OKCache-Control: no-cache, privateContent-Type: text/plain; charset=utf-8X-Content-Type-Options: nosniffDate: Tue, 15 Sep 2020 06:19:36 GMTContent-Length: 2

最後

kube-prometheus配置很多,這裡只是做了最基礎的設置。更多需求請自行查看官方文檔

註:文中圖片來源於網絡,如有侵權,請聯繫我及時刪除。

相關焦點

  • k8s裡prometheus-operator監控jvm
    在配置prometheus-operator 監控jvm之前,我們必須要了解prometheus-operator的4個crd不然後續會蒙蔽。https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.11.0/jmx_prometheus_javaagent-0.11.0.jar
  • 使用operator部署Prometheus
    一、介紹Operator是CoreOS公司開發,用於擴展kubernetes API或特定應用程式的控制器,它用來創建、配置、管理複雜的有狀態應用,例如資料庫,監控系統。其中Prometheus-Operator就是其中一個重要的項目。
  • Prometheus Operator自定義監控項
    Prometheus Operator默認的監控指標並不能完全滿足實際的監控需求,這時候就需要我們自己根據業務添加自定義監控。的監控指標了,但是現在並沒有配置監控報警規則。而對應的報警規則文件位於:/etc/prometheus/rules/prometheus-k8s-rulefiles-0/目錄下面所有的 YAML 文件。
  • 集群外部署Prometheus+Grafana監控K8S解析
    /prometheus/etc/prometheus.yml:/etc/prometheus/prometheus.yml -v /App/prometheus:/prometheus prom/prometheus在後期我們可能要刪除一些metric,此時需要調用API,默認是關閉的,可在容器啟動時開啟,因此我們使用docker-compose部署更合適:
  • Prometheus 監控外部 Kubernetes 集群
    前面我們的文章中都是將 Prometheus 安裝在 Kubernetes 集群中來採集數據,但是在實際環境中很多企業是將 Prometheus 單獨部署在集群外部的,甚至直接監控多個 Kubernetes 集群,雖然不推薦這樣去做,因為 Prometheus 採集的數據量太大,或大量消耗資源,比較推薦的做法是用不同的 Prometheus 實例監控不同的集群,然後用聯邦的方式進行匯總。
  • Go 監控的標配:實戰 Prometheus
    最近手頭的項目開始從 PHP,Lua 遷移到 Golang,心想正好趁此機會夯實監控,提到 Golang 的監控,不得不說 prometheus這裡顯示了相關的監控信息,預設情況下,監控了 prometheus 本身。
  • 「Kubernetes 系列」 Prometheus Operator 定製指南
    這裡我們針對Prometheus監控感受下它。+:: { prometheus+: { spec+: { // https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md39;t specified for &39;, then by default the &39; arg will be passed to prometheus
  • 監控工具之Prometheus普羅米修斯,搭建和使用
    目前已經被雲計算本地基金會託管,是繼k8s託管的第二個項目,號稱是下一代監控。Prometheus和其他監控系統橫向比較1.3 支持類型Prometheus為了支持各種中間件以及第三方的監控提供了exporter,大家可以把它理解成監控適配器,將不同指標類型和格式的數據統一轉化為Prometheus能夠識別的指標類型。
  • CentOS7下簡單搭建Prometheus+Grafana監控系統
    下面介紹CentOS7下簡單搭建Prometheus+Grafana監控系統1、先官網下載安裝包https://prometheus.io/download/1)prometheus-2.17.2.linux-amd64.tar.gz2)node_exporter-0.18.1.linux-amd64.tar.gzgrafana
  • 我選擇的開源運維監控系統-Prometheus
    簡介運維監控系統,不用多介紹,網上有很多介紹的文章。為什麼選擇Prometheus呢?大家應該都有自己的理由。高性能,單點就有很高的性能,目前很多監控系統都支持分布式,單點性能不好,靠分布式來緩解壓力。強大的查詢語句,有很多實用的函數,可以提供給我們查詢分析。結合grafana可以快速地實現圖表。
  • Prometheus 監控MySQL資料庫
    Prometheus 監控mysql容器Prometheus這裡我們演示中,prometheus以及mysqld_exporter都使用容器進行運行。項目地址https://github.com/prometheus/node_exporter官方文檔提示: node_exporter設計用於監控主機系統。
  • 使用Prometheus和Thanos進行高可用K8S監控
    我們的設置還具有很強的可擴展性,以至於我們可以在同一個監控保護傘下跨越多個Kubernetes集群。當前方案大部分的Prometheus部署都是使用持久卷的pod,而Prometheus則是使用聯邦機制進行擴展。
  • k8s安裝Prometheus+Grafana(無坑版)
    一、Prometheus、Grafana介紹Prometheus(普羅米修斯)是一套開源的監控&報警&時間序列資料庫的組合,起始是由SoundCloud公司開發的。隨著發展,越來越多公司和組織接受採用Prometheus,社會也十分活躍,他們便將它獨立成開源項目,並且有公司來運作。Google SRE的書內也曾提到跟他們BorgMon監控系統相似的實現是Prometheus。現在最常見的Kubernetes容器管理系統中,通常會搭配Prometheus進行監控。
  • 用prometheus監控GlusterFS
    GlusterFS的測試環境搭建之後,在中間件的監控方面我首選prometheus,節約時間我們直接在github找已經造好的輪子。以下兩個exporter值得推薦1. https://github.com/gluster/gluster-prometheus 輕量簡單
  • 運維監控Prometheus,部署安全的node_exporter監控主機
    簡介prometheus監控系統的時候,是使用pull的方式來獲取監控數據,需要被監控端監聽對應的埠,prometheus從這些埠服務中拉取對應的數據。  static_configs:   - targets: [&39;]重載prometheus服務會自動去獲取數據了。基礎的驗證只能是防君子不能防小人,只要抓包就可以獲取對應的密碼串了。
  • 運維監控系統之Prometheus Server安裝
    /prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz tar zxvf prometheus-2.23.0.linux-amd64.tar.gz 運行
  • prometheus+grafana監控SQLerver
    valid_lft forever preferred_lft forever部署exporterdocker run -e SERVER=172.17.0.1 -e USERNAME=SA -e PASSWORD=qkD4x3yy -e DEBUG=app -p 4000:4000 --name prometheus-mssql-exporter
  • 不懂Prometheus?看完這個你就入門了
    Prometheus簡介Prometheus 是一款基於時序資料庫的開源監控告警系統,非常適合Kubernetes集群的監控。Prometheus的基本原理是通過HTTP協議周期性抓取被監控組件的狀態,任意組件只要提供對應的HTTP接口就可以接入監控。不需要任何SDK或者其他的集成過程。
  • 使用Prometheus監控Flink
    這篇文章介紹了如何利用Apache Flink的內置指標系統以及如何使用Prometheus來高效地監控流式應用程式。部署Prometheus對k8s不熟悉的同學,可以查閱k8s相關文檔。/prometheus.yml - --storage.tsdb.path=/data/prometheus - --storage.tsdb.retention.time=10d image: prom/prometheus:v2.19.0 imagePullPolicy: IfNotPresent
  • 從kubectl top看K8S監控原理
    Custom Metrics(自定義指標):由Prometheus Adapter提供API custom.metrics.k8s.io,由此可支持任意Prometheus採集到的指標。目前Kubernetes中自定義指標一般由Prometheus來提供,再利用k8s-prometheus-adpater聚合到apiserver,實現和核心指標(metric-server)同樣的效果。