linux环境部署prometheus operator需在kubernetes集群(v1.22+)中通过kubectl部署,依赖k8s api而非传统linux服务管理;需满足kubectl权限、storageclass、selinux配置等前提,并通过bundle.yaml安装operator、创建crd、部署prometheus实例及配套组件。

Linux 环境部署 Prometheus Operator 是面向 Kubernetes 集群的生产级监控方案,它不是直接在 Linux 主机上运行 Operator 二进制,而是通过 kubectl 在已有的 Kubernetes 集群(运行于 Linux 节点之上)中部署 Operator 控制器及其托管组件。整个过程依赖 K8s API,而非传统 Linux 服务管理方式。
确认前提条件
确保以下基础环境已就绪:
- Kubernetes 集群正常运行(v1.22+ 推荐),kubectl 已配置且具备 cluster-admin 权限
- Linux 控制节点已安装 curl 或 wget、kubectl、helm(可选)
- 集群具备默认 StorageClass(用于 Prometheus 数据持久化)
- 建议禁用 SELinux 或配置为 permissive 模式,避免 CSI 驱动或 volume 挂载异常
使用官方 Operator Bundle 部署
这是最轻量、无 Helm 依赖的标准化方式:
- 执行一键安装(以 v0.78.0 为例,适配 K8s 1.26+):
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.78.0/bundle.yaml - 验证 CRD 是否注册成功:
kubectl get crd | grep -E "(prometheuses|servicemonitors|podmonitors|alertmanagers)"—— 应看到至少 5 个自定义资源类型 - 检查 operator Pod 运行状态:
kubectl get pods -n monitoring(Operator 默认部署在 monitoring 命名空间)
部署 Prometheus 实例与配套组件
Operator 本身不提供监控数据,需声明式创建资源对象:
- 创建命名空间:
kubectl create ns monitoring - 部署 Prometheus 实例(最小化示例):
保存以下内容为 prometheus-instance.yaml,然后kubectl apply -f prometheus-instance.yaml
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: k8s
namespace: monitoring
spec:
replicas: 1
serviceAccountName: prometheus-k8s
resources:
requests:
memory: 800Mi
enableAdminAPI: false
image: quay.io/prometheus-operator/prometheus:v2.47.2
serviceMonitorSelector:
matchLabels:
team: frontend
- 配套部署:
• node-exporter(DaemonSet,采集节点指标)
• kube-state-metrics(同步 K8s 对象状态为指标)
• Alertmanager(CRD 方式声明)
• ServiceMonitor(让 Prometheus 自动发现上述 exporter 的 endpoints)
暴露 Prometheus UI 与调试要点
Operator 默认不开放外部访问,需手动配置 Service 或 Ingress:
- 查看 Prometheus Service:
kubectl get svc -n monitoring -l prometheus=k8s - 临时端口转发测试:
kubectl port-forward -n monitoring svc/prometheus-k8s 9090,随后访问 http://localhost:9090 - 常见问题排查:
• 若 targets 显示 “context deadline exceeded”:检查 ServiceMonitor 的 namespaceSelector 或 endpoint port 是否匹配 exporter Pod 的实际监听端口(如 node-exporter 默认 9100)
• 若 Pod 处于 Pending:确认节点有足够资源,且 PVC 动态供给正常(kubectl get pvc -n monitoring)











