kubernetes 部署Prometheus

kubernetes 部署Prometheus

標籤(空格分隔): kubernetes系列php


  • 一: 組件說明node

  • 二: Prometheus的部署git

  • 三: HPA 資源限制

一: 組件說明

1.1 相關地址信息

Prometheus
github 地址:https://github.com/coreos/kube-prometheus

1.2 組件說明

1.MetricServer:是kubernetes集羣資源使用狀況的聚合器,收集數據給kubernetes集羣內使用,如 kubectl,hpa,scheduler等。

2.PrometheusOperator:是一個系統監測和警報工具箱,用來存儲監控數據。

3.NodeExporter:用於各node的關鍵度量指標狀態數據。 

4.KubeStateMetrics:收集kubernetes集羣內資源對象數據,制定告警規則。 

5.Prometheus:採用pull方式收集apiserver,scheduler,controller-manager,kubelet組件數據,經過http協議傳輸。 

6.Grafana:是可視化數據統計和監控平臺。

二: Prometheus的部署

mkdir Prometheus
cd Prometheus

git clone https://github.com/coreos/kube-prometheus.git

image_1e4nuspf71d9hppu10jsn0t19is9.png-159.3kB


cd /root/kube-prometheus/manifests

修改 grafana-service.yaml 文件,使用 nodeport 方式訪問 grafana:

vim grafana-service.yaml
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30100
  selector:
    app: grafana
---

修改 prometheus-service.yaml,改成 nodepode

vim prometheus-service.yaml

-----
apiVersion: v1
kind: Service
metadata:
  labels:
    prometheus: k8s
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 30200
  selector:
    app: prometheus
    prometheus: k8s
  sessionAffinity: ClientIP
----
修改 alertmanager-service.yaml,改成 nodeport 

vim alertmanager-service.yaml
---
apiVersion: v1
kind: Service
metadata:
  labels:
    alertmanager: main
  name: alertmanager-main
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9093
    targetPort: web
    nodePort: 30300
  selector:
    alertmanager: main
    app: alertmanager
  sessionAffinity: ClientIP
---

導入鏡像處理(節點所有導入)

上傳 load-images.sh prometheus.tar.gz 到 /root 

tar -zxvf prometheus.tar.gz

chmod +x load-images.sh 

./load-images.sh

image_1e4o009rlpsm11713q116rv1u38m.png-320kB

image_1e4o01i761iaini51nbm1j8g1r13.png-306.2kB


kubectl apply -f kube-prometheus/manifests/

連續執行兩次: 第一次會報錯

kubectl apply -f kube-prometheus/manifests/

image_1e4o58a4m159qect7nh11um1qjm9.png-118.5kB


kubectl get pod -n monitoring 

kubectl get svc -n monitoring 

kubectl top node

image_1e4o5c2tr188d1iodg2ihopt3f13.png-122.7kB

image_1e4o5deu012d31jrd55i3vr11cb1g.png-126.9kB

image_1e4o5ffrd1iapf4tc6r1s661r7h1t.png-59.5kB


prometheus 對應的 nodeport 端口爲 30200,訪問 http://MasterIP:30200

http://192.168.100.11:30200/graph

image_1e4o5rrli1pl91nlngk5c3cq5lm.png-179.9kB

image_1e4o5sof23271fnd8d4107vc6i13.png-345.5kB

prometheus 的 WEB 界面上提供了基本的查詢 K8S 集羣中每一個 POD 的 CPU 使用狀況,查詢條件以下:

sum by (pod_name)( rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m] ) )

image_1e4o604cncogvngvsp4on1pra1g.png-345.2kB

image_1e4o62pvn137g16j8df41aji1fht2d.png-369.8kB

image_1e4o63f9l1v501dsphdbajb13p42q.png-476.1kB


查看 grafana 服務暴露的端口號:

kubectl get service -n monitoring | grep grafana

grafana NodePort 10.107.56.143 <none> 3000:30100/TCP 20h

image_1e4o674ce5mn1bvrhh217o62uv37.png-261.7kB


默認的用戶名與 密碼 都是admin

而後重新修改密碼便可

image_1e4o69dvtrpvr8lgf6jln6n3k.png-330kB

image_1e4o6as5bbc9dt81plmevh1po641.png-1024.5kB

image_1e4o6c1v4gl7ut91cb19h1167q4e.png-866.8kB

image_1e4o6d0ieg801vp6nl210hrtug5b.png-1035.1kB

image_1e4o6e3dadm7560ucibjh1uvv5o.png-346.3kB

image_1e4o6h0a513gs7591bdn1dk31d4165.png-296.2kB

三:HPA 的資源限制

上傳hpa-example.tar 而後導入 (全部節點)

docker load -i hpa-example.tar

image_1e4o74foq823mlu1uk31ldd1ade72.png-173.8kB

image_1e4o74uca84a1j7v7nj1tmf1tf27f.png-169.2kB

image_1e4o75mp21ks7gcpfvfapc19ju8c.png-164.6kB

3.1 Horizontal Pod Autoscaling

Horizontal Pod Autoscaling 能夠根據 CPU 利用率自動伸縮一個 Replication Controller、Deployment 或者Replica Set 中的 Pod 數量

kubectl run php-apache --image=gcr.io/google_containers/hpa-example --requests=cpu=200m --expose --port=80

image_1e4o7aho3117vn9s1omc16tr149c99.png-64.5kB

kubectl get deploy 

kubectl edit deploy php-apache
----
修改:
imagePullPolicy: Always  改成

imagePullPolicy: IfNotPresent
----

kubectl get pod

image_1e4o7qkfp1ir76ug2qmqkrcto9m.png-96.4kB

建立 HPA 控制器

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

kubectl top pod

image_1e4o7rfso139h11nijmj1v1n1hdva3.png-25.1kB

image_1e4o7tvbj1o61pm1daaoa712spag.png-86.8kB

image_1e4o80aod137o1p7k11gd1b801gaebd.png-42.1kB

增長負載,查看負載節點數目

kubectl run -i --tty load-generator --image=busybox /bin/sh
while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

image_1e4o87a2jtl31jn21kdu14nsifsbq.png-125.2kB

pod 開始擴展

kubectl get hpa

kubectl get pod

image_1e4o892pn1q1p19d819408o1vdgc7.png-126.4kB

image_1e4o8bbblfr9c0m1fn61u0d17k8ck.png-122.4kB

image_1e4o8jj2fekmfcu1fg1gef59od1.png-422.3kB

image_1e4o8klmod0a89clpp6cujf2de.png-361.8kB

kubernetes 回收的速度比較慢(很是慢)
這是由於併發的問題,一單有 大流量過來,若是回收的速度比較快,很容易將某一個pod給壓死

3.2 k8s 的資源限制

資源限制 - Pod

Kubernetes 對資源的限制其實是經過 cgroup 來控制的,cgroup 是容器的一組用來控制內核如何運行進程的
相關屬性集合。針對內存、CPU 和各類設備都有對應的 cgroup

默認狀況下,Pod 運行沒有 CPU 和內存的限額。 這意味着系統中的任何 Pod 將可以像執行該 Pod 所在的節點一
樣,消耗足夠多的 CPU 和內存 。通常會針對某些應用的 pod 資源進行資源限制,這個資源限制是經過
resources 的 requests 和 limits 來實現
---
spec:
  containers:
  - image: xxxx
    imagePullPolicy: Always
    name: auth
    ports:
    - containerPort: 8080
      protocol: TCP
    resources:
      limits:
        cpu: "4"
        memory: 2Gi
      requests:
        cpu: 250m
        memory: 250Mi
----

requests 要分分配的資源,limits 爲最高請求的資源值。能夠簡單理解爲初始值和最大值

資源限制 - 名稱空間

一、計算資源配額

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: spark-cluster
spec:
  hard:
    pods: "20"
    requests.cpu: "20"
    requests.memory: 100Gi
    limits.cpu: "40"
    limits.memory: 200Gi

2. 配置對象數量配額限制
apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
  namespace: spark-cluster
spec:
  hard:
    configmaps: "10"
    persistentvolumeclaims: "4"
    replicationcontrollers: "20"
    secrets: "10"
    services: "10"
    services.loadbalancers: "2"

3. 配置 CPU 和 內存 LimitRange

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 50Gi
      cpu: 5
   defaultRequest:
     memory: 1Gi
     cpu: 1
     type: Container
----
default 即 limit 的值
defaultRequest 即 request 的值
相關文章
相關標籤/搜索