10分钟搞定!Prometheus全家桶部署教程
2023-07-28 08:16:36
Prometheus 全家桶:监控 Kubernetes 集群的终极指南
简介
Kubernetes(k8s)是容器编排的领先平台,它极大地简化了管理和部署复杂应用程序的过程。然而,k8s 本身并不包含内置的监控工具,因此市场上出现了许多监控工具来填补这一空白。在这些工具中,没有一款能与 Prometheus 全家桶相媲美。
什么是 Prometheus 全家桶?
Prometheus 全家桶是一个由多个组件组成的监控系统,由 CNCF 维护,已成为监控 k8s 集群的事实标准。它的组件包括:
- Prometheus 服务器: 负责收集和存储数据的核心组件。
- Prometheus-node-exporter: 导出节点指标的工具。
- Prometheus-cadvisor: 导出容器指标的工具。
- Prometheus-alertmanager: 负责告警的组件。
- Prometheus-grafana: 用于数据可视化的工具。
Prometheus 全家桶的优势
Prometheus 全家桶的优势包括:
- 全面监控: 它监控 k8s 集群的各个方面,包括节点、容器、应用程序和网络。
- 高可用性: 它具有内置冗余,确保在组件故障的情况下保持监控。
- 可扩展性: 它可以轻松扩展以监控大型和复杂的 k8s 集群。
- 易于使用: 它提供了一个直观且易于使用的界面,便于设置和管理。
如何部署 Prometheus 全家桶
在 k8s 集群中部署 Prometheus 全家桶的过程涉及以下步骤:
1. 部署 Prometheus 服务器
部署 Prometheus 服务器包括创建 Service 和 Deployment,如下所示:
# 服务
apiVersion: v1
kind: Service
metadata:
name: prometheus-server
namespace: monitoring
spec:
selector:
app: prometheus-server
ports:
- port: 9090
targetPort: 9090
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-server
namespace: monitoring
spec:
selector:
matchLabels:
app: prometheus-server
template:
metadata:
labels:
app: prometheus-server
spec:
containers:
- name: prometheus-server
image: prom/prometheus:v2.36.1
args:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
volumeMounts:
- mountPath: /prometheus
name: prometheus-data
- mountPath: /etc/prometheus
name: prometheus-config
volumes:
- name: prometheus-data
emptyDir: {}
- name: prometheus-config
configMap:
name: prometheus-config
2. 部署 Prometheus-node-exporter
Prometheus-node-exporter 用于导出节点指标。部署过程类似于 Prometheus 服务器。
# 服务
apiVersion: v1
kind: Service
metadata:
name: prometheus-node-exporter
namespace: monitoring
spec:
selector:
app: prometheus-node-exporter
ports:
- port: 9100
targetPort: 9100
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-node-exporter
namespace: monitoring
spec:
selector:
matchLabels:
app: prometheus-node-exporter
template:
metadata:
labels:
app: prometheus-node-exporter
spec:
containers:
- name: prometheus-node-exporter
image: prom/node-exporter:v1.3.1
args:
- --path.procfs=/host/proc
- --path.rootfs=/host/sys
- --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+)($|/)
volumeMounts:
- mountPath: /host/proc
name: host-proc
- mountPath: /host/sys
name: host-sys
volumes:
- name: host-proc
hostPath:
path: /proc
- name: host-sys
hostPath:
path: /sys
3. 部署 Prometheus-cadvisor
Prometheus-cadvisor 用于导出容器指标。它的部署过程与前两个组件类似。
# 服务
apiVersion: v1
kind: Service
metadata:
name: prometheus-cadvisor
namespace: monitoring
spec:
selector:
app: prometheus-cadvisor
ports:
- port: 8080
targetPort: 8080
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-cadvisor
namespace: monitoring
spec:
selector:
matchLabels:
app: prometheus-cadvisor
template:
metadata:
labels:
app: prometheus-cadvisor
spec:
containers:
- name: prometheus-cadvisor
image: google/cadvisor:v0.44.0
args:
- --storage_driver=prometheus
- --prometheus_endpoint=http://prometheus-server:9090
4. 部署 Prometheus-alertmanager
Prometheus-alertmanager 用于告警。其部署过程如下:
# 服务
apiVersion: v1
kind: Service
metadata:
name: prometheus-alertmanager
namespace: monitoring
spec:
selector:
app: prometheus-alertmanager
ports:
- port: 9093
targetPort: 9093
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-alertmanager
namespace: monitoring
spec:
selector:
matchLabels:
app: prometheus-alertmanager
template:
metadata:
labels:
app: prometheus-alertmanager
spec:
containers:
- name: prometheus-alertmanager
image: prom/alertmanager:v0.26.0
args:
- --config.file=/etc/alertmanager/alertmanager.yml
volumeMounts:
- mountPath: /etc/alertmanager
name: alertmanager-config
volumes:
- name: alertmanager-config
configMap:
name: alertmanager-config
5. 部署 Prometheus-grafana
Prometheus-grafana 用于数据可视化。其部署过程如下:
# 服务
apiVersion: v1
kind: Service
metadata:
name: prometheus-grafana
namespace: monitoring
spec:
selector:
app: prometheus-grafana
ports:
- port: 3000
targetPort: 3000
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-grafana
namespace: monitoring
spec:
selector:
matchLabels:
app: prometheus-grafana
template:
metadata:
labels:
app: prometheus-grafana
spec:
containers:
- name: prometheus-grafana
image: grafana/grafana:9.2.5
args:
- -config=/etc/grafana/grafana.ini
volumeMounts:
- mountPath: /etc/grafana
name: grafana-config
volumes:
- name: grafana-config
configMap:
name: grafana-config
验证部署
部署完成后,可以使用以下命令验证部署结果:
kubectl get pods -n monitoring
如果所有 pod 的状态都是 Running,则表示部署成功。
常见问题解答
1. Prometheus 全家桶的成本是多少?
Prometheus 全家桶是免费且开源的。
2. Prometheus 全家桶是否支持 Kubernetes 集群以外的监控?
是的,Prometheus 全家桶可以监控任何类型的基础设施,包括虚拟机、物理服务器和应用程序。
3. Prometheus 全家桶有多复杂?
Prometheus 全家桶的安装和管理相对简单,但要充分利用它的功能,需要一些技术知识。
4. 我需要哪些工具才能使用 Prometheus 全家桶?
除了 Prometheus 全家桶组件之外,您还需要一个文本编辑器来创建配置文件以及一个命令行界面来管理组件。
5. Prometheus 全家桶与其他监控工具有何不同?
Prometheus 全家桶专注于指标监控,而其他工具可能