K8s--08 prometheus監控


prometheus監控

特別快,適合監控容器
Prometheus server 歷史數據存儲
用pull形式收集數據
metrics監控指標
exporters 就像是zabbix的客戶端
promql 普羅米修斯自己的查詢語言
web UI 自己的webUI很簡陋
service discovery 自動發現,容器的添加,發現哪些pod有變化,就不用寫一個pod,寫一個監控項
aletmanager報警組件
1.官網地址
https://github.com/prometheus/prometheus

2.監控k8s需要的組件
使用metric-server收集數據給k8s集群內使用,如kubectl,hpa,scheduler等
使用prometheus-operator部署prometheus,存儲監控數據
使用kube-state-metrics收集k8s集群內資源對象數據
使用node_exporter收集集群中各節點的數據
使用prometheus收集apiserver,scheduler,controller-manager,kubelet組件數據
使用alertmanager實現監控報警
使用grafana實現數據可視化

metrics-server 主要關注的是資源度量 API 的實現,比如 CPU、文件描述符、內存、請求延時等指標。
kube-state-metrics 主要關注的是業務相關的一些元數據,比如 Deployment、Pod、副本狀態等


3.安裝部署prometheus
###導入鏡像
docker load < prom-prometheusv2_2_1.tar 

###創建命名空間
kubectl create namespace prom

###創建資源
cd prometheus
kubectl create -f ./ 

###檢查資源
kubectl -n prom get all -o wide

web瀏覽器查看
http://10.0.0.11:30090/targets


4.安裝部署metrics-server
###導入鏡像
docker load < k8s-gcr-io-addon-resizer1_8_6.tar
docker load < k8s-gcr-io-metrics-server-amd64v0-3-6.tar

###創建資源
kubectl create -f ./

###檢查
kubectl top node
kubectl top pod

5.安裝node-exporterv
###導入鏡像
docker load < prom-node-exporterv0_15_2.tar

###創建資源
kubectl create -f ./

###查看資源
kubectl -n prom get pod -o wide
kubectl -n prom get svc

###瀏覽器查看
http://10.0.0.12:9100/metrics
http://10.0.0.13:9100/metrics


5.安裝kube-state-metrics
###導入鏡像
docker load < gcr-io-google_containers-kube-state-metrics-amd64v1-3-1.tar

###創建資源
kubectl create -f ./

###查看
kubectl -n prom get pod
kubectl -n prom get svc
curl 10.1.232.109:8080/metrics

6.安裝grafna和k8s-prometheus-adapter
###導入鏡像
docker load <  directxman12-k8s-prometheus-adapter-amd64-latest.tar 
docker load <  k8s-gcr-io-heapster-grafana-amd64v5_0_4.tar

###修改grafana資源配置清單
  1 apiVersion: apps/v1
  2 kind: Deployment
  3 metadata:
  4   name: monitoring-grafana
  5   namespace: prom
  6 spec:
  7   selector:
  8     matchLabels:
  9       k8s-app: grafana
 10   replicas: 1
 11   template:

###創建資源
cd k8s-prometheus-adapter
kubectl create -f ./

###檢查創建的資源
kubectl -n prom get pod -o wide
kubectl -n prom get svc

###瀏覽器查看
http://10.0.0.11:32725


###導入dashboard
https://grafana.com/grafana/dashboards/10000


x.prometheus查詢語句
sum by (name) (rate (container_cpu_usage_seconds_total{image!=""}[1m]))

container_cpu_usage_seconds_total{name =~ "^k8s_POD.*",namespace="default"}


正則表達式:
=~  模糊匹配
==   完全匹配
!=   不匹配
!~   不匹配正則表達式


查詢語句:
sum (container_memory_working_set_bytes{image!="",name=~"^k8s_.*",kubernetes_io_hostname=~".*",namespace="default"}) by (pod)

翻譯:
sum (監控指標{字段1!="字段1配置的值",字段2!="字段2配置的值"}) by (分組字段名)


添加namespace標簽后grafana修改圖標
sum (container_memory_working_set_bytes{image!="",name=~"^k8s_.*",kubernetes_io_hostname=~"^$Node$",namespace=~"^$Namespace$"}) by (pod)


HPA資源自動擴容

https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

1.生成測試鏡像
###創建測試首頁
cat index.php 
<?php
  $x = 0.0001;
  for ($i = 0; $i <= 1000000; $i++) {
    $x += sqrt($x);
  }
  echo "OK!";
?>

###創建dockerfile
cat dockerfile 
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php

###生成鏡像
docker build -t php:v1 .

2.創建php-deployment資源
cat >php-dp.yaml<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: php-apache
  name: php-apache
  namespace: default
  replicas: 1
  selector:
    matchLabels:
      run: php-apache
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - image: php:v1
        imagePullPolicy: IfNotPresent
        name: php-apache
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          requests:
            cpu: 200m
EOF

3.創建hpa資源
cat >php-hpa.yaml<<EOF 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  targetCPUUtilizationPercentage: 50
EOF

4.查看
kubectl get svc
kubectl get pod
kubectl get hpa

5.壓測
while true; do wget -q -O- http://10.1.28.100; done

6.觀察hpa數據
kubectl get hpa -w 
kubectl get pod -w 

7.如果覺得操作麻煩,可以使用下面的命令,效果一樣
###創建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80

###創建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

###壓測
while true; do wget -q -O- http://10.1.28.100; done

01grafana添加數據源

02prometheus查詢語句

03grafana修改后的圖

04grafana添加namespace標簽

05grafana添加namespace標簽2

06最終效果圖

07完整大圖

dashboard圖

dashboard圖2


``


免責聲明!

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



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