目录
一、概述
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: prometheus
name: prometheus-config
namespace: monitor-sa
data:
prometheus.yml: |
global:
scrape_interval: 15s # 数据采集时间间隔
scrape_timeout: 10s # 数据采集超时时间
evaluation_interval: 1m
scrape_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:10250
replacement: '${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: node
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- action: labelmap
regex: __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: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https # 正则匹配到的默认空间下的service名字是kubernetes,协议是https的endpoint类型保留下来
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_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-server
namespace: monitor-sa
labels:
app: prometheus
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
component: server
#matchExpressions:
#- {key: app, operator: In, values: [prometheus]}
#- {key: component, operator: In, values: [server]}
template:
metadata:
labels:
app: prometheus
component: server
annotations:
prometheus.io/scrape: 'false'
spec:
nodeName: node1
serviceAccountName: monitor
containers:
- name: prometheus
image: prom/prometheus:v2.2.1
imagePullPolicy: IfNotPresent
command:
- prometheus
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention=720h
- --web.enable-lifecycle
ports:
- containerPort: 9090
protocol: TCP
volumeMounts:
- mountPath: /etc/prometheus/prometheus.yml
name: prometheus-config
subPath: prometheus.yml
- mountPath: /prometheus/
name: prometheus-storage-volume
volumes:
- name: prometheus-config
configMap:
name: prometheus-config
items:
- key: prometheus.yml
path: prometheus.yml
mode: 0644
- name: prometheus-storage-volume
hostPath:
path: /data
type: 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: prometheus
namespace: monitor-sa
labels:
app: prometheus
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
protocol: TCP
selector:
app: prometheus
component: 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博客