目录

1、K8S监控指标

1.1 Kubernetes本身监控

1.2 Pod监控

1.3 Prometheus监控K8S架构

2、部署Prometheus+Grafana

2.1 部署Prometheus

2.1.1 创建rbac

2.1.2 创建配置项

2.1.3 部署prometheus

2.1.4 配置service

2.1.5 访问prometheus

2.2 部署Grafana

3、参考网站


1、K8S监控指标

1.1 Kubernetes本身监控

• Node资源利用率 :一般生产环境几十个node,几百个node去监控

• Node数量 :一般能监控到node,就能监控到它的数量了,因为它是一个实例,一个node能跑多少个项目,也是需要去评估的,整体资源率在一个什么样的状态,什么样的值,所以需要根据项目,跑的资源利用率,还有值做一个评估的,比如再跑一个项目,需要多少资源。

•   Pods数量(Node):其实也是一样的,每个node上都跑多少pod,不过默认一个node上能跑110个pod,但大多数情况下不可能跑这么多,比如一个128G的内存,32核cpu,一个java的项目,一个分配2G,也就是能跑50-60个,一般机器,pod也就跑几十个,很少很少超过100个。

• 资源对象状态 :比如pod,service,deployment,job这些资源状态,做一个统计。

1.2 Pod监控

• Pod数量(项目):你的项目跑了多少个pod的数量,大概的利益率是多少,好评估一下这个项目跑了多少个资源占有多少资源,每个pod占了多少资源。

• 容器资源利用率 :每个容器消耗了多少资源,用了多少CPU,用了多少内存

•   应用程序:这个就是偏应用程序本身的指标了,这个一般在我们运维很难拿到的,所以在监控之前呢,需要开发去给你暴露出来,这里有很多客户端的集成,客户端库就是支持很多语言的,需要让开发做一些开发量将它集成进去,暴露这个应用程序的想知道的指标,然后纳入监控,如果开发部配合,基本运维很难做到这一块,除非自己写一个客户端程序,通过shell/python能不能从外部获取内部的工作情况,如果这个程序提供API的话,这个很容易做到。

1.3 Prometheus监控K8S架构

如果想监控node的资源,就可以放一个node_exporter,这是监控node资源的,node_exporter是Linux上的采集器,你放上去你就能采集到当前节点的CPU、内存、网络IO,等待都可以采集的。

如果想监控容器,k8s内部提供cAdvisor采集器,pod呀,容器都可以采集到这些指标,都是内置的,不需要单独部署,只知道怎么去访问这个Cadvisor就可以了。

如果想监控k8s资源对象,会部署一个kube-state-metrics这个服务,它会定时的API中获取到这些指标,帮你存取到Prometheus里,要是告警的话,通过Alertmanager发送给一些接收方,通过Grafana可视化展示。

监控指标

具体实现

举例

pod性能

cAdvisor

容器CPU,内存利用率

node性能

node-exporter

节点CPU,内存利用率

k8s资源对象

kube-state-metrics

pod/deployment/service

2、部署Prometheus+Grafana

2.1 部署Prometheus

2.1.1 创建rbac

现在先来创建rbac,因为部署它的主服务主进程要引用这几个服务。因为prometheus来连接你的API,从API中获取很多的指标,并且设置了绑定集群角色的权限,只能查看,不能修改。

cat prometheus-ra.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: prometheus
rules:
- apiGroups: [""]resources:- nodes- nodes/proxy- services- endpoints- podsverbs: ["get", "list", "watch"]
- apiGroups:- extensionsresources:- ingressesverbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:name: prometheusnamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: prometheus
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: prometheus
subjects:
- kind: ServiceAccountname: prometheusnamespace: kube-system

创建rbac

kubectl create -f prometheus-ra.yaml 
[root@VM-0-12-tlinux ~]# kubectl create -f prometheus-ra.yaml
clusterrole.rbac.authorization.k8s.io/prometheus created
serviceaccount/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created

2.1.2 创建配置项

cat prometheus-config.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: prometheus-confignamespace: kube-system
data:prometheus.yml: |global:scrape_interval:     15sevaluation_interval:  15sscrape_configs:- job_name: 'kubernetes-apiservers'kubernetes_sd_configs:- role: endpointsscheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]action: keepregex: default;kubernetes;https- job_name: 'kubernetes-nodes'kubernetes_sd_configs:- role: nodescheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)- target_label: __address__replacement: kubernetes.default.svc:443- source_labels: [__meta_kubernetes_node_name]regex: (.+)target_label: __metrics_path__replacement: /api/v1/nodes/${1}/proxy/metrics- job_name: 'kubernetes-cadvisor'kubernetes_sd_configs:- role: nodescheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)- target_label: __address__replacement: kubernetes.default.svc:443- source_labels: [__meta_kubernetes_node_name]regex: (.+)target_label: __metrics_path__replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor- job_name: 'kubernetes-service-endpoints'kubernetes_sd_configs:- role: endpointsrelabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]action: replacetarget_label: __scheme__regex: (https?)- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]action: replacetarget_label: __address__regex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]action: replacetarget_label: kubernetes_name- job_name: 'kubernetes-services'kubernetes_sd_configs:- role: servicemetrics_path: /probeparams:module: [http_2xx]relabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]action: keepregex: true- source_labels: [__address__]target_label: __param_target- target_label: __address__replacement: blackbox-exporter.example.com:9115- source_labels: [__param_target]target_label: instance- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]target_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]target_label: kubernetes_name- job_name: 'kubernetes-ingresses'kubernetes_sd_configs:- role: ingressrelabel_configs:- source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]action: keepregex: true- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]regex: (.+);(.+);(.+)replacement: ${1}://${2}${3}target_label: __param_target- target_label: __address__replacement: blackbox-exporter.example.com:9115- source_labels: [__param_target]target_label: instance- action: labelmapregex: __meta_kubernetes_ingress_label_(.+)- source_labels: [__meta_kubernetes_namespace]target_label: kubernetes_namespace- source_labels: [__meta_kubernetes_ingress_name]target_label: kubernetes_name- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]action: replaceregex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2target_label: __address__- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_pod_name]action: replacetarget_label: kubernetes_pod_name
kubectl create -f prometheus-config.yaml 
[root@VM-0-12-tlinux ~]# kubectl create -f prometheus-config.yaml
configmap/prometheus-config created

2.1.3 部署prometheus

cat prometheus.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:labels:name: prometheus-deploymentname: prometheusnamespace: kube-system
spec:replicas: 1selector:matchLabels:app: prometheustemplate:metadata:labels:app: prometheusspec:containers:- image: prom/prometheus:v2.0.0name: prometheuscommand:- "/bin/prometheus"args:- "--config.file=/etc/prometheus/prometheus.yml"- "--storage.tsdb.path=/prometheus"- "--storage.tsdb.retention=24h"ports:- containerPort: 9090protocol: TCPvolumeMounts:- mountPath: "/prometheus"name: data- mountPath: "/etc/prometheus"name: config-volumeresources:requests:cpu: 100mmemory: 100Milimits:cpu: 500mmemory: 1500MiserviceAccountName: prometheus    volumes:- name: dataemptyDir: {}- name: config-volumeconfigMap:name: prometheus-config   
执行下面命令
[root@VM-0-12-tlinux ~]# kubectl create -f prometheus.yaml
deployment.apps/prometheus created
[root@VM-0-12-tlinux ~]# kubectl get pods -n kube-system
NAME                                READY   STATUS    RESTARTS   AGE
coredns-65d9c796fc-jhrgt            0/1     Pending   0          3h24m
coredns-65d9c796fc-pb66f            1/1     Running   0          3h24m
ip-masq-agent-sn6nw                 1/1     Running   0          3h21m
kube-proxy-qv9q9                    1/1     Running   0          3h21m
l7-lb-controller-66c5cd4f46-fj6mt   1/1     Running   0          3h24m
prometheus-5dd6c4b799-9jjmm         1/1     Running   0          44s
tke-bridge-agent-4czmq              1/1     Running   0          3h21m
tke-cni-agent-kdnrd                 1/1     Running   0          3h21m

2.1.4 配置service

[root@VM-0-12-tlinux ~]# cat prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:name: prometheus-servicenamespace: kube-systemlabels:app: prometheus-service
spec:type: NodePortports:- port: 80name: httptargetPort: 9090selector:app: prometheus

执行命令

[root@VM-0-12-tlinux ~]# kubectl create -f prometheus-service.yaml
service/prometheus-service created
[root@VM-0-12-tlinux ~]# kubectl get svc -n kube-system
NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
hpa-metrics-service   ClusterIP   172.20.255.174   <none>        443/TCP         3h27m
kube-dns              ClusterIP   172.20.255.135   <none>        53/TCP,53/UDP   3h27m
prometheus-service    NodePort    172.20.254.64    <none>        80:32264/TCP    14s

2.1.5 访问prometheus

点开链接:http://127.0.0.1:32264

http://${service IP}:${随机端口}/graph

2.2 部署Grafana

执行命令

docker run -d -p 3000:3000  --network=host --name grafana grafana/grafana

3、参考网站

官方网站:Prometheus - Monitoring system & time series database

GitHub地址:Prometheus · GitHub

服务发现: Configuration | Prometheus

Kubernetes监控篇相关推荐

  1. Kubernetes监控之Heapster源码分析

    源码版本 heapster version: release-1.2 简介 Heapster是Kubernetes下的一个监控项目,用于进行容器集群的监控和性能分析. 基本的功能及概念介绍可以回顾我之 ...

  2. Kubernetes监控在小米的落地

    戳蓝字"CSDN云计算"关注我们哦! 转自:小米云技术 作者:郭如意 本文介绍了高可用.持久存储.可动态调整的Kubernetes监控方案的实现过程. 小米的弹性调度平台(Ocea ...

  3. Kubernetes监控:部署Heapster、InfluxDB和Grafana

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Kubernetes 监控方案 可选的方案: Heapster + InfluxDB + Grafana Prometheus + Grafana C ...

  4. 系统架构面临的三大挑战,看 Kubernetes 监控如何解决?

    作者|炎寻 审核&校对:白玙 编辑&排版:雯燕 大家好,我是阿里云云原生应用平台的炎寻,很高兴能与大家继续分享 Kubernetes 监控系列公开课.前两期公开课我们讲到了 Vol.1 ...

  5. 通过Kubernetes监控探索应用架构,发现预期外的流量

    大家好,我是阿里云云原生应用平台的炎寻,很高兴能和大家一起在 Kubernetes 监控系列公开课上进行交流.本次公开课期望能够给大家在 Kubernetes 容器化环境中快速发现和定位问题带来新的解 ...

  6. 简单、有效、全面的Kubernetes监控方案

    简介:近年来,Kubernetes作为众多公司云原生改造的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes展开,保证Kubernetes的稳定性和可用性是最基础的需求,而这其中最 ...

  7. 云原生应用 Kubernetes 监控与弹性实践

    前言 云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider.CRD C ...

  8. 搭建前端监控系统(四)接口请求异常监控篇

    背景:市面上的监控系统有很多,大多收费,对于小型前端项目来说,必然是痛点.另一点主要原因是,功能虽然通用,却未必能够满足我们自己的需求, 所以我们自给自足也许是个不错的办法. 这是搭建前端监控系统的第 ...

  9. 微服务之服务监控篇 ActuatorAdmin

    微服务之服务监控篇 Actuator 服务监控 什么是服务监控? 主要是查看当前系统的运行状态,例如内存.线程.堆栈.日志等等,通过服务监控可以快速准确的发现问题,以减少或避免对用户的影响. 为什么使 ...

  10. 企业实战-Kubernetes(十一)Kubernetes监控

    Kubernetes监控 1 k8s容器资源限制 内存限制 CPU限制 为namespace设置资源限制 2 kubernetes资源监控 Metrics-Server部署 Dashboard部署(可 ...

最新文章

  1. 拒绝穿模!新方法让虚拟偶像自由互动无障碍“贴贴”,8000网友追着点赞
  2. Ember.js系列文章
  3. CG CTF WEB file_get_contents
  4. 使用expdp导出时评估所需存储容量大小
  5. jpa java.util.map_使用JPA存储Map String,String
  6. 网站攻击软件_佳能遭严重勒索软件攻击,10TB的数据被窃取,大量服务宕机
  7. webService简单入门实战(一)
  8. 中文论文万能句型_干货|SCI论文写作的万能句型~
  9. 【c++】字符串的冒泡排序【存疑,待查】
  10. linux socket 开源库,linux c websocket开源库libwebsockets的编译和使用-Go语言中文社区...
  11. ALtium 16等长布线、差分布线
  12. KAIST 电子工程系半导体实验室ISSCC会议发表的文章(Deep-Learning Processor)
  13. Linux【环境部署 02】yum源镜像下载+挂载镜像+本地yum源配置+局域网yum源服务搭建+局域网yum源使用(一篇学会离线yum源配置)
  14. 插值方法: 拉格朗日插值--逐步插值的自适应算法
  15. Wretch超雅虎奇摩成台湾省第一大网站
  16. 关于职称评审的一些见解
  17. 腾讯QQ、新浪微博第三方登录接口申请说明
  18. Spark作业提交流程
  19. mysql | left join 出现的结果会重复的问题
  20. win10开启自带移动热点以及解决无法设置移动热点,请打开WLAN问题

热门文章

  1. Linux系统蓝牙WiFi抓包命令
  2. JSP内置对象out对象的功能简介说明
  3. AD14 如何设置PCB板框大小及形状
  4. http接口开发与调用案例
  5. 误差的基本性质与处理matlab实验,误差理论与数据处理实验报告
  6. oracle startup open ora 03113,startup mount备库的时候报ORA-03113错误
  7. 异步社区免费电子书下载爬虫实验攻略
  8. Linux 加密压缩与解压
  9. Android APP渗透测试方法大全(百度云分享)
  10. 速学堂java面试题_速学堂JAVA300集 第四章作业练习题