Helm安裝Prometheus Operator


一、概述

使用 helm 安裝 Prometheus Operator。使用 helm 安裝后,會在 Kubernetes 集群中創建、配置和管理 Prometheus 集群,chart 中包含多種組件:

 

 

架構

Prometheus Operator 架構圖如下:

 

上面架構圖中,各組件以不同的方式運行在 Kubernetes 集群中:

  • Operator: 根據自定義資源(Custom Resource Definition / CRDs)來部署和管理 Prometheus Server,同時監控這些自定義資源事件的變化來做相應的處理,是整個系統的控制中心。
  • Prometheus:聲明 Prometheus deployment 期望的狀態,Operator 確保這個 deployment 運行時一直與定義保持一致。
  • Prometheus Server: Operator 根據自定義資源 Prometheus 類型中定義的內容而部署的 Prometheus Server 集群,這些自定義資源可以看作是用來管理 Prometheus Server 集群的 StatefulSets 資源。
  • ServiceMonitor:聲明指定監控的服務,描述了一組被 Prometheus 監控的目標列表。該資源通過 Labels 來選取對應的 Service Endpoint,讓 Prometheus Server 通過選取的 Service 來獲取 Metrics 信息。
  • Service:簡單的說就是 Prometheus 監控的對象。
  • Alertmanager:定義 AlertManager deployment 期望的狀態,Operator 確保這個 deployment 運行時一直與定義保持一致。

二、安裝

環境說明

操作系統:centos 7.6

ip地址:192.168.31.148

k8s版本:v1.16.3

主機名:k8s-master

配置:2核4g

helm:v2.16.6

 

操作系統:centos 7.6

ip地址:192.168.31.179

k8s版本:v1.16.3

主機名:k8s-node01

配置:4核8g

 

安裝

Prometheus Operator 所有的組件都打包成 Helm Chart,安裝部署非常方便。

helm install --name prometheus-operator --set rbacEnable=true --namespace=monitoring stable/prometheus-operator

 

查看資源

#查看創建的資源
kubectl get all -n monitoring

#查看安裝后的release
helm list

#查看訪問類型
kubectl get svc -n monitoring 

 

查看狀態

# kubectl get pod -n monitoring
NAME                                                          READY   STATUS    RESTARTS   AGE
pod/alertmanager-prometheus-operator-alertmanager-0           2/2     Running   0          98m
pod/prometheus-operator-grafana-857dfc5fc8-vdnff              2/2     Running   0          99m
pod/prometheus-operator-kube-state-metrics-66b4c95cd9-mz8nt   1/1     Running   0          99m
pod/prometheus-operator-operator-56964458-8sspk               2/2     Running   0          99m
pod/prometheus-operator-prometheus-node-exporter-dcf5p        1/1     Running   0          99m
pod/prometheus-operator-prometheus-node-exporter-nv6ph        1/1     Running   0          99m
pod/prometheus-prometheus-operator-prometheus-0               3/3     Running   1          98m

確保pod狀態運行正常

 

方法1:修改訪問類型為NodePort

將type類型值改為NodePort

kubectl edit svc prometheus-operator-grafana -n monitoring    
kubectl edit svc prometheus-operator-alertmanager -n monitoring   
kubectl edit svc prometheus-operator-prometheus -n monitoring

 

查看修改后的訪問類型

# kubectl get svc -n monitoring
NAME                                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
alertmanager-operated                          ClusterIP   None           <none>        9093/TCP,9094/TCP,9094/UDP   100m
prometheus-operated                            ClusterIP   None           <none>        9090/TCP                     100m
prometheus-operator-alertmanager               NodePort    10.1.238.78    <none>        9093:31765/TCP               102m
prometheus-operator-grafana                    NodePort    10.1.125.228   <none>        80:30284/TCP 102m
prometheus-operator-kube-state-metrics         ClusterIP   10.1.187.129   <none>        8080/TCP                     102m
prometheus-operator-operator                   ClusterIP   10.1.242.61    <none>        8080/TCP,443/TCP             102m
prometheus-operator-prometheus                 NodePort    10.1.156.181   <none>        9090:30268/TCP               102m
prometheus-operator-prometheus-node-exporter   ClusterIP   10.1.226.134   <none>        9100/TCP                     102m

 

修改 kubelet 打開只讀端口

prometheus 需要訪問 kubelet 的 10255 端口獲取 metrics。但是默認情況下 10255 端口是不開放的,會導致 prometheus 上有 unhealthy。打開只讀端口需要編輯所有節點的vi /var/lib/kubelet/config.yaml (我這里有圖形界面可以用gedit命令)文件,加入以下內容

port: 10250
readOnlyPort: 10255          #增加此行

重啟 kubelet 服務

systemctl restart kubelet.service

 

查看grafana隨機端口

# kubectl get svc -n monitoring|grep grafana
prometheus-operator-grafana                    NodePort    10.1.125.228   <none>        80:30284/TCP                 106m

可以看到,它的隨機端口為:30284

 

訪問grafana,地址為:http://nodeip:30284/

默認的用戶名/密碼為:admin/prom-operator,登陸后,點擊Manage,如下圖:

 

 

效果如下:

 

 

方法2:通過 Ingress 來暴漏服務 

安裝Ingress

kubectl apply -f https://kuboard.cn/install-script/v1.17.x/nginx-ingress.yaml

 

新建文件prometheus-ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: monitoring
  name: prometheus-ingress
spec:
  rules:
  - host: grafana.domain.com
    http:
      paths:
      - backend:
          serviceName: prometheus-operator-grafana 
          servicePort: 80
  - host: prometheus.domain.com
    http:
      paths:
      - backend:
          serviceName: prometheus-operator-prometheus
          servicePort: 9090
  - host: alertmanager.domain.com
    http:
      paths:
      - backend:
          serviceName: prometheus-operator-alertmanager
          servicePort: 9093

 

執行命令

kubectl apply -f prometheus-ingress.yaml

 

修改hosts文件:

192.168.31.179 grafana.domain.com
192.168.31.179 prometheus.domain.com
192.168.31.179 alertmanager.domain.com

注意:192.168.31.179 是Node節點ip

 

訪問以下幾個url,是否正常。

http://grafana.domain.com
http://prometheus.domain.com
http://alertmanager.domain.com

 

效果如下:

 

 

 

 

 

 

三、修改k8s配置

Prometheus Operator某些圖表沒有數據,需要修改配置文件才行。

etcd

prometheus 通過 4001 端口訪問 etcd metrics,但是 etcd 默認監聽 2379。解決方法是在 /etc/kubernetes/manifests/etcd.yaml


增加k8s-app: etcd-server

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
 k8s-app: etcd-server
    component: etcd
    tier: control-plane

重啟kubelet

systemctl restart kubelet.service

 

注意:經驗證,此方法無效。etcd依然沒有圖表數據。

 

kube-controller-manager

由於 kube-controller-manager 和 kube-scheduler 默認監聽 127.0.0.1 ,prometheus 無法通過本機地址獲取數據,需要修改kube-controller-manager 和 kube-scheduler 監聽地址。

解決辦法如下:/etc/kubernetes/manifests/kube-controller-manager.yaml 增加 k8s-app: kube-controller-manager

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
 k8s-app: kube-controller-manager
    component: kube-controller-manager
    tier: control-plane

重啟kubelet

systemctl restart kubelet.service

 

訪問圖表

 

 

 

kube-scheduler

/etc/kubernetes/manifests/kube-scheduler.yaml增加 k8s-app: kube-scheduler

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
 k8s-app: kube-scheduler
    component: kube-scheduler
    tier: control-plane

重啟kubelet

systemctl restart kubelet.service

 

訪問圖表

 

 

本文參考鏈接:

https://www.cnblogs.com/majiang/p/11431577.html

https://blog.csdn.net/choerodon/article/details/98587027

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM