[关闭]
@zhangyy 2020-07-23T03:08:43.000000Z 字数 3863 阅读 584

kubernetes 部署Prometheus

kubernetes系列


  • 一: 组件说明

  • 二: Prometheus的部署

  • 三: HPA 资源限制


一: 组件说明

1.1 相关地址信息

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

1.2 组件说明

  1. 1.MetricServer:是kubernetes集群资源使用情况的聚合器,收集数据给kubernetes集群内使用,如 kubectl,hpa,scheduler等。
  2. 2.PrometheusOperator:是一个系统监测和警报工具箱,用来存储监控数据。
  3. 3.NodeExporter:用于各node的关键度量指标状态数据。
  4. 4.KubeStateMetrics:收集kubernetes集群内资源对象数据,制定告警规则。
  5. 5.Prometheus:采用pull方式收集apiserver,scheduler,controller-manager,kubelet组件数据,通过http协议传输。
  6. 6.Grafana:是可视化数据统计和监控平台。

二: Prometheus的部署

  1. mkdir Prometheus
  2. cd Prometheus
  3. git clone https://github.com/coreos/kube-prometheus.git

image_1e4nuspf71d9hppu10jsn0t19is9.png-159.3kB


  1. cd /root/kube-prometheus/manifests
  2. 修改 grafana-service.yaml 文件,使用 nodeport 方式访问 grafana:
  3. vim grafana-service.yaml
  4. ---
  5. apiVersion: v1
  6. kind: Service
  7. metadata:
  8. labels:
  9. app: grafana
  10. name: grafana
  11. namespace: monitoring
  12. spec:
  13. type: NodePort
  14. ports:
  15. - name: http
  16. port: 3000
  17. targetPort: http
  18. nodePort: 30100
  19. selector:
  20. app: grafana
  21. ---
  22. 修改 prometheus-service.yaml,改为 nodepode
  23. vim prometheus-service.yaml
  24. -----
  25. apiVersion: v1
  26. kind: Service
  27. metadata:
  28. labels:
  29. prometheus: k8s
  30. name: prometheus-k8s
  31. namespace: monitoring
  32. spec:
  33. type: NodePort
  34. ports:
  35. - name: web
  36. port: 9090
  37. targetPort: web
  38. nodePort: 30200
  39. selector:
  40. app: prometheus
  41. prometheus: k8s
  42. sessionAffinity: ClientIP
  43. ----
  44. 修改 alertmanager-service.yaml,改为 nodeport
  45. vim alertmanager-service.yaml
  46. ---
  47. apiVersion: v1
  48. kind: Service
  49. metadata:
  50. labels:
  51. alertmanager: main
  52. name: alertmanager-main
  53. namespace: monitoring
  54. spec:
  55. type: NodePort
  56. ports:
  57. - name: web
  58. port: 9093
  59. targetPort: web
  60. nodePort: 30300
  61. selector:
  62. alertmanager: main
  63. app: alertmanager
  64. sessionAffinity: ClientIP
  65. ---

  1. 导入镜像处理(节点全部导入)
  2. 上传 load-images.sh prometheus.tar.gz 到 /root
  3. tar -zxvf prometheus.tar.gz
  4. chmod +x load-images.sh
  5. ./load-images.sh

image_1e4o009rlpsm11713q116rv1u38m.png-320kB

image_1e4o01i761iaini51nbm1j8g1r13.png-306.2kB


  1. kubectl apply -f kube-prometheus/manifests/
  2. 连续执行两次: 第一次会报错
  3. kubectl apply -f kube-prometheus/manifests/

image_1e4o58a4m159qect7nh11um1qjm9.png-118.5kB


  1. kubectl get pod -n monitoring
  2. kubectl get svc -n monitoring
  3. kubectl top node

image_1e4o5c2tr188d1iodg2ihopt3f13.png-122.7kB

image_1e4o5deu012d31jrd55i3vr11cb1g.png-126.9kB

image_1e4o5ffrd1iapf4tc6r1s661r7h1t.png-59.5kB


  1. prometheus 对应的 nodeport 端口为 30200,访问 http://MasterIP:30200
  2. http://192.168.100.11:30200/graph

image_1e4o5rrli1pl91nlngk5c3cq5lm.png-179.9kB

image_1e4o5sof23271fnd8d4107vc6i13.png-345.5kB

  1. prometheus 的 WEB 界面上提供了基本的查询 K8S 集群中每个 POD 的 CPU 使用情况,查询条件如下:
  2. 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


  1. 查看 grafana 服务暴露的端口号:
  2. kubectl get service -n monitoring | grep grafana
  3. grafana NodePort 10.107.56.143 <none> 3000:30100/TCP 20h

image_1e4o674ce5mn1bvrhh217o62uv37.png-261.7kB


  1. 默认的用户名与 密码 都是admin
  2. 然后从新修改密码即可

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 的资源限制

  1. 上传hpa-example.tar 然后导入 (所有节点)
  2. 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

  1. Horizontal Pod Autoscaling 可以根据 CPU 利用率自动伸缩一个 Replication Controller、Deployment 或者Replica Set 中的 Pod 数量
  2. kubectl run php-apache --image=gcr.io/google_containers/hpa-example --requests=cpu=200m --expose --port=80

image_1e4o7aho3117vn9s1omc16tr149c99.png-64.5kB

  1. kubectl get deploy
  2. kubectl edit deploy php-apache
  3. ----
  4. 修改:
  5. imagePullPolicy: Always 改为
  6. imagePullPolicy: IfNotPresent
  7. ----
  8. kubectl get pod

image_1e4o7qkfp1ir76ug2qmqkrcto9m.png-96.4kB

  1. 创建 HPA 控制器
  2. kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
  3. kubectl top pod

image_1e4o7rfso139h11nijmj1v1n1hdva3.png-25.1kB

image_1e4o7tvbj1o61pm1daaoa712spag.png-86.8kB

image_1e4o80aod137o1p7k11gd1b801gaebd.png-42.1kB

  1. 增加负载,查看负载节点数目
  2. kubectl run -i --tty load-generator --image=busybox /bin/sh
  3. while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

image_1e4o87a2jtl31jn21kdu14nsifsbq.png-125.2kB

  1. pod 开始扩展
  2. kubectl get hpa
  3. kubectl get pod

image_1e4o892pn1q1p19d819408o1vdgc7.png-126.4kB

image_1e4o8bbblfr9c0m1fn61u0d17k8ck.png-122.4kB

image_1e4o8jj2fekmfcu1fg1gef59od1.png-422.3kB

image_1e4o8klmod0a89clpp6cujf2de.png-361.8kB

  1. kubernetes 回收的速度比较慢(非常慢)
  2. 这是因为并发的问题,一单有 大流量过来,如果回收的速度比较快,很容易将某一个pod给压死

3.2 k8s 的资源限制

  1. 资源限制 - Pod
  2. Kubernetes 对资源的限制实际上是通过 cgroup 来控制的,cgroup 是容器的一组用来控制内核如何运行进程的
  3. 相关属性集合。针对内存、CPU 和各种设备都有对应的 cgroup
  4. 默认情况下,Pod 运行没有 CPU 和内存的限额。 这意味着系统中的任何 Pod 将能够像执行该 Pod 所在的节点一
  5. 样,消耗足够多的 CPU 和内存 。一般会针对某些应用的 pod 资源进行资源限制,这个资源限制是通过
  6. resources 的 requests 和 limits 来实现
  7. ---
  8. spec:
  9. containers:
  10. - image: xxxx
  11. imagePullPolicy: Always
  12. name: auth
  13. ports:
  14. - containerPort: 8080
  15. protocol: TCP
  16. resources:
  17. limits:
  18. cpu: "4"
  19. memory: 2Gi
  20. requests:
  21. cpu: 250m
  22. memory: 250Mi
  23. ----
  24. requests 要分分配的资源,limits 为最高请求的资源值。可以简单理解为初始值和最大值

  1. 资源限制 - 名称空间
  2. 1、计算资源配额
  3. apiVersion: v1
  4. kind: ResourceQuota
  5. metadata:
  6. name: compute-resources
  7. namespace: spark-cluster
  8. spec:
  9. hard:
  10. pods: "20"
  11. requests.cpu: "20"
  12. requests.memory: 100Gi
  13. limits.cpu: "40"
  14. limits.memory: 200Gi

  1. 2. 配置对象数量配额限制
  2. apiVersion: v1
  3. kind: ResourceQuota
  4. metadata:
  5. name: object-counts
  6. namespace: spark-cluster
  7. spec:
  8. hard:
  9. configmaps: "10"
  10. persistentvolumeclaims: "4"
  11. replicationcontrollers: "20"
  12. secrets: "10"
  13. services: "10"
  14. services.loadbalancers: "2"

  1. 3. 配置 CPU 和 内存 LimitRange
  2. apiVersion: v1
  3. kind: LimitRange
  4. metadata:
  5. name: mem-limit-range
  6. spec:
  7. limits:
  8. - default:
  9. memory: 50Gi
  10. cpu: 5
  11. defaultRequest:
  12. memory: 1Gi
  13. cpu: 1
  14. type: Container
  15. ----
  16. default 即 limit 的值
  17. defaultRequest 即 request 的值
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注