目录
一、概述
1.1 prometheus简介
1.2 prometheus架构图
1.3测试环境
二、k8s集群中部署prometheus server
2.1创建sa账号和数据目录
2.2安装prometheus
2.2.1创建configmap存储卷存放prometheus配置信息
2.2.2 通过deployment部署prometheus
2.2.3prometheus pod创建service
三、prometheus可视化
3.1 Graph页面
3.2 Status页面
一、概述
1.1 prometheus简介
Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。
文档地址:
prometheus官网文档地址:Overview | Prometheus
prometheus中文文档地址:第1节:Prometheus 简介 | Prometheus 中文文档
1.2 prometheus架构图
从上图可发现,Prometheus整个生态圈组成主要包括prometheus server,Exporter,pushgateway,alertmanager,grafana,Web ui界面,Prometheus server由三个部分组成,Retrieval,Storage,PromQL。
1.3测试环境
IP | 主机名 |
192.168.40.130 | k8s-master1 |
192.168.40.131 | k8s-node1 |
192.168.40.132 | k8s-node2 |
prometheus部署版本:v2.2.1
二、k8s集群中部署prometheus server
2.1创建sa账号和数据目录
创建sa账号,在k8s集群的master节点操作
kubectl create serviceaccount monitor -n monitor-sa
把sa账号monitor通过clusterrolebing绑定到clusterrole上
kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrole=cluster-admin --serviceaccount=monitor-sa:monitor
在k8s集群的任何一个node节点操作创建数据目录,我在node1上操作如下命令:
mkdir /data
chmod 777 /data/
2.2安装prometheus
安装prometheus,以下步骤均在在k8s集群的master1节点操作。
2.2.1创建configmap存储卷存放prometheus配置信息
- 获取node节点数据
- 监控apiserver
prometheus-cfg.yaml内容如下:
---
kind: ConfigMap
apiVersion: v1
metadata:labels:app: prometheusname: prometheus-confignamespace: monitor-sa
data:prometheus.yml: |global:scrape_interval: 15s # 数据采集时间间隔scrape_timeout: 10s # 数据采集超时时间evaluation_interval: 1mscrape_configs: # scrape_configs:配置数据源,称为target,每个target用job_name命名。又分为静态配置和服务发现- job_name: 'kubernetes-node'kubernetes_sd_configs: # 使用k8s的服务发现- role: node # 使用node角色,它使用默认的kubelet提供的http端口来发现集群中每个node节点。relabel_configs: # 重新标记- source_labels: [__address__] # 配置的原始标签,匹配地址regex: '(.*):10250' # 匹配带有10250端口的ip:10250replacement: '${1}:9100' # 匹配到的ip:10250的ip保留替换成${1}target_label: __address__ # 新生成的地址action: replace- action: labelmap # 匹配到下面正则表达式的标签会被保留regex: __meta_kubernetes_node_label_(.+)- job_name: 'kubernetes-node-cadvisor' kubernetes_sd_configs: # 抓取cAdvisor数据,是获取kubelet上/metrics/cadvisor接口数据来获取容器的资源使用情况- 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-apiserver' # apiserver 监控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 # 正则匹配到的默认空间下的service名字是kubernetes,协议是https的endpoint类型保留下来- 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
kubectl apply -f prometheus-cfg.yaml
kubectl get ConfigMap -n monitor-sa
2.2.2 通过deployment部署prometheus
prometheus-deploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: prometheus-servernamespace: monitor-salabels:app: prometheus
spec:replicas: 1selector:matchLabels:app: prometheuscomponent: server#matchExpressions:#- {key: app, operator: In, values: [prometheus]}#- {key: component, operator: In, values: [server]}template:metadata:labels:app: prometheuscomponent: serverannotations:prometheus.io/scrape: 'false'spec:nodeName: node1serviceAccountName: monitorcontainers:- name: prometheusimage: prom/prometheus:v2.2.1imagePullPolicy: IfNotPresentcommand:- prometheus- --config.file=/etc/prometheus/prometheus.yml- --storage.tsdb.path=/prometheus- --storage.tsdb.retention=720h- --web.enable-lifecycleports:- containerPort: 9090protocol: TCPvolumeMounts:- mountPath: /etc/prometheus/prometheus.ymlname: prometheus-configsubPath: prometheus.yml- mountPath: /prometheus/name: prometheus-storage-volumevolumes:- name: prometheus-configconfigMap:name: prometheus-configitems:- key: prometheus.ymlpath: prometheus.ymlmode: 0644- name: prometheus-storage-volumehostPath:path: /datatype: Directory
执行部署
kubectl apply -f prometheus-deploy.yaml
kubectl get pods -n monitor-sa
2.2.3prometheus pod创建service
prometheus-svc.yaml
apiVersion: v1
kind: Service
metadata:name: prometheusnamespace: monitor-salabels:app: prometheus
spec:type: NodePortports:- port: 9090targetPort: 9090protocol: TCPselector:app: prometheuscomponent: server
kubectl apply -f prometheus-svc.yaml
kubectl get svc -n monitor-sa
三、prometheus可视化
启动 Prometheus服务后我们可访问Prometheus 自带的Web UI 界面。Web控制页面包含4个子页面:
- Alerts页面
告警规则和告警信息。可查看告警规则和正在进行的不用状态的告警信息。
- Graph页面
指标查询和图形化页面展示页面。可查询PromeQL表达式值,以图形或者折线图的方式进行可视化展示。
- Status页面
状态页面。可查看Prometheus运行和构建信息、命令行标志、系统配置、规则、Targets和Service Discovery等。
- Help页面
可直接打开官方文档。
测试环境WEB http://192.168.2.139:30546/graph
3.1 Graph页面
- PromQL表达式输入框
PromQL表达式输入框输入任意的PromQL表达式,点击”Execute“按钮可查询表达式的结果
- 表格或图形化展示区域
对PromQL表达式的结果按表格或图形化的方式进行展示
控制台展示
图形展示
3.2 Status页面
状态页面。可查看Prometheus运行和构建信息、命令行标志、系统配置、规则、Targets和Service Discovery等。
(1)Runtime & BuildInformation
(2)Command-Line Flags
可查看系统的所有命令行标志参数值。
查看所有的命令标志的帮助命令:进入容器的“./bin"执行"./prometheus -h”。帮助信息中可以看到所有命令行参数及参数描述。
所有命令行标志参数都有一个默认值,我们可以在启动Prometheus服务的时候修改某些标志参数值,如下:
#启动prometheus服务
./bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus
(3)Configuration
可查看所有已生效的配置信息,配置信息来源为如下文件 prometheus.yml中定义。
(4)Rules
可查看系统中已配置的所有规则信息。
(5)Targets
可查看当前prometheus服务监控的各个Target的信息,如:Endpoint、状态、标签、上次pull抓取数据时间、抓取数据耗时、抓取时间时异常信息等。
(6)Service Discovery
可查看Prometheus服务发现的所有job,和每个job的targets信息。
四、Kubernetes书籍介绍
4.1作者介绍
51CTO学堂K8S教学总监,K8S架构师,为移动、电信等进行过多次K8S技术培训,课程包含大量企业真实项目,提供秒级答疑的售后服务和技术支持,是《Kubernetes从入门到DevOps企业应用实战》畅销书作者,K8S开源社区贡献者,Linux基金会做客嘉宾。始终致力于K8S、DevOps等云原生技术的研究,51CTO学堂K8S精培课程主讲老师,课程更新及时,基于最新版本实时更新,拥有多年一线运维实战经验,主导过的k8S项目多达上万个。51CTO十大杰出讲师,国内早批K8S布道者,具有丰富的在线教育经验,发表过多篇K8S等方面的系列文章,累计阅读量现已突破100万。参加过新一代云计算大会,作为主讲嘉宾分享k8s如何助力企业转型、被北京日报、环球网发文专题报道。为移动、联通、咪咕视讯、任子行、电信、天翼互联等大型企业提供多次企业内训和架构设
4.2图书简介
《Kubernetes从入门到DevOps企业应用实战》以实战为主,内容涵盖容器技术、Kubernetes核心资源以及基于Kubernetes的企业级实践。从容器基础知识开始,由浅入深,阐述Kubernetes各个方面的知识,并提供大量实际项目和应用场景。全书共20章,第1~3章讲解容器技术,这是理解Kubernetes的必要基础,主要介绍容器的定义、创建和管理容器、容器网络和存储等方面的知识。第4章讲解如何使用Kubeadm和二进制文件安装高可用Kubernetes集群。第5~12章讲解Kubernetes的核心资源,包括Pod、Deployment、Service、Ingress等资源的定义、使用和管理方法,以及实际应用场景。第13~20章讲解基于Kubernetes的企业实践,介绍如何使用Kubernetes解决实际问题,包括使用Kubernetes进行应用程序的部署、容器云平台的构建、流量治理、监控、自动化扩缩容和灰度发布等项目与案例。
《Kubernetes从入门到DevOps企业应用实战》基于Kubernetes 1.27新版本编写(本书的内容也适合1.20之后的所有版本),从零基础开始,涵盖理论知识、企业级案例,以及自动化运维DevOps体系和一些大厂架构设计思路,适合云原生领域的从业者、Kubernetest初学者、运维和开发人员使用,也可以作为企业内训、培训机构和大中专院校的教学用书。
4.3 自主购买
小伙伴也可以访问链接进行自主购买哦~
直达京东购买链接🔗:
《Kubernetes从入门到DevOps企业应用实战》(韩先超)【摘要 书评 试读】- 京东图书
参考链接:
Prometheus监控实战之node_exporter详解_node-exporter-CSDN博客