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

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方式收集apiserverschedulercontroller-managerkubelet组件数据,通过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 ControllerDeployment 或者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 的值
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注