prometheus.(1).yaml安裝


安裝prometheus

作者聲明:本博客內容是作者在學習以及搭建過程中積累的內容,內容采自網絡中各位老師的優秀博客以及視頻,並根據作者本人的理解加以修改(由於工作以及學習中東拼西湊,如何造成無法提供原鏈接,在此抱歉!!!)

作者再次聲明:作者只是一個很摳腳的IT工作者,希望可以跟那些提供原創的老師們學習

prometheus采用nfs掛載方式來存儲數據,同時使用configMap管理配置文件。並且我們將所有的prometheus存儲在kube-system

1.prometheus的configmap配置文件

#建議將所有的prometheus yaml文件存在一塊
mkdir /opt/prometheus -p && cd /opt/prometheus

cat >> prometheus.configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: kube-system
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
      scrape_timeout: 15s
    scrape_configs:
    - job_name: 'prometheus'
      static_configs:
      - targets: ['localhost:9090']
EOF

# 配置文件解釋(這里的configmap實際上就是prometheus的配置)
上面包含了3個模塊global、rule_files和scrape_configs

其中global模塊控制Prometheus Server的全局配置
scrape_interval:表示prometheus抓取指標數據的頻率,默認是15s,我們可以覆蓋這個值
evaluation_interval:用來控制評估規則的頻率,prometheus使用規則產生新的時間序列數據或者產生警報

rule_files模塊制定了規則所在的位置,prometheus可以根據這個配置加載規則,用於生產新的時間序列數據或者報警信息,當前我們沒有配置任何規則,后期會添加

scrape_configs用於控制prometheus監控哪些資源。由於prometheus通過http的方式來暴露它本身的監控數據,prometheus也能夠監控本身的健康情況。在默認的配置有一個單獨的job,叫做prometheus,它采集prometheus服務本身的時間序列數據。這個job包含了一個單獨的、靜態配置的目標;監聽localhost上的9090端口。
prometheus默認會通過目標的/metrics路徑采集metrics。所以,默認的job通過URL:http://localhost:9090/metrics采集metrics。收集到時間序列包含prometheus服務本身的狀態和性能。如果我們還有其他的資源需要監控,可以直接配置在該模塊下即可

2.prometheus的pod資源

配置文件創建完成,如果以后我們有新的資源需要被監控,我們只需要將ConfigMap對象更新即可,現在我們開始創建prometheus的Pod資源

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: prometheus
  namespace: kube-system
  labels:
    app: prometheus
spec:
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      serviceAccountName: prometheus
      containers:
      - image: prom/prometheus:v2.4.3
        name: prometheus
        command:
        - "/bin/prometheus"
        args:
        - "--config.file=/etc/prometheus/prometheus.yml"
        - "--storage.tsdb.path=/prometheus"
        - "--storage.tsdb.retention=30d"
        - "--web.enable-admin-api"  # 控制對admin HTTP API的訪問,其中包括刪除時間序列等功能
        - "--web.enable-lifecycle"  # 支持熱更新,直接執行localhost:9090/-/reload立即生效
        ports:
        - containerPort: 9090
          protocol: TCP
          name: http
        volumeMounts:
        - mountPath: "/prometheus"
          subPath: prometheus
          name: data
        - mountPath: "/etc/prometheus"
          name: config-volume
        resources:
          requests:
            cpu: 100m
            memory: 512Mi
          limits:
            cpu: 100m
            memory: 512Mi
      securityContext:
        runAsUser: 0
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: prometheus
      - configMap:
          name: prometheus-config
        name: config-volume

這里稍微講解一下配置參數

我們在啟動程序的時候,除了指定prometheus.yaml(configmap)以外,還通過storage.tsdb.path指定了TSDB數據的存儲路徑、通過storage.tsdb.rentention設置了保留多長時間的數據,還有下面的web.enable-admin-api參數可以用來開啟對admin api的訪問權限,參數web.enable-lifecyle用來開啟支持熱更新,有了這個參數之后,prometheus.yaml(configmap)文件只要更新了,通過執行localhost:9090/-/reload就會立即生效

我們添加了一行securityContext,,其中runAsUser設置為0,這是因為prometheus運行過程中使用的用戶是nobody,如果不配置可能會出現權限問題

3.NFS搭建步驟,步驟簡單不多說!!!

4.創建pv,pvc

prometheus.yaml文件對應的ConfigMap對象通過volume的形式掛載進Pod,這樣ConfigMap更新后,對應的pod也會熱更新,然后我們在執行上面的reload請求,prometheus配置就生效了。除此之外,對了將時間數據進行持久化,我們將數據目錄和一個pvc對象進行了綁定,所以我們需要提前創建pvc對象

cat >>prometheus-volume.yaml <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: prometheus
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 10.4.82.138
    path: /data/k8s

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: prometheus
  namespace: kube-system
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
EOF

#nfs 
server nfs服務器ip
path  掛載點,提前掛在好,確保可以寫入
kubectl create -f prometheus-volume.yaml
kubectl get pvc --all-namespaces

這里稍微提示一下,我們創建的pv和pvc大小都是10g,只是測試存儲為10g。線上可以修改為200或者更多,一般prometheus數據保留15-30天就可以,如果數據量過大建議使用TSBD分布式存儲

5.rbac認證

我們這里還需要創建rbac認證,因為prometheus需要訪問k8s集群內部的資源

cat >>prometheus-rbac.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - services
  - endpoints
  - pods
  - nodes/proxy
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  - nodes/metrics
  verbs:
  - get
- nonResourceURLs:
  - /metrics
  verbs:
  - get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: kube-system
EOF

由於我們要獲取的資源,在每一個namespace下面都有可能存在,所以我們這里使用的是ClusterRole的資源對象,nonResourceURLs是用來對非資源型metrics進行操作的權限聲明

kubectl create -f prometheus-rbac.yaml

6.運行prometheus服務

我們將ConfigMap volume rbac 創建完畢后,就可以創建prometheus.deploy.yaml了,運行prometheus服務

kubectl create -f prometheus.deploy.yaml
kubectl get pod --all-namespaces |grep prometheus

7.service服務

現在我們prometheus服務狀態是已經正常了,但是我們在瀏覽器是無法訪問prometheus的 webui服務。那么我們還需要創建一個service

cat >>prometeheus-svc.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: kube-system
  labels:
    app: prometheus
spec:
  selector:
    app: prometheus
  type: NodePort
  ports:
    - name: web
      port: 9090
      targetPort: http
EOF
kubectl create -f prometeheus-svc.yaml
kubectl get svc -n kube-system |grep prometheus

prometeheus界面

1.監控規則

Status-->Targets
img

2.查看數據

img

比如我們這里就選擇scrape_duration_seconds這個指標,然后點擊Execute,如果這個時候沒有查詢到任何數據,我們可以切換到Graph這個 tab 下面重新選擇下時間,選擇到當前的時間點,重新執行,就可以看到類似於下面的圖表數據了:

img

少年不識愁滋味,愛上層樓。愛上層樓。為賦新詞強說愁。 而今識盡愁滋味,欲說還休。欲說還休。卻道天涼好個秋。


免責聲明!

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



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