【云原生】 Prometheus-Operator

一、Prometheus-Operator

1.Prometheus-Operator是什么?

管理prometheus altermanager serviceMonitor podMOnitor PrometheusRule这些监控组件的。

2.Prometheus-Operator是怎么管理这些组件的?

通过crd(自定义yaml)来创建,更新这些组件,从而实现管理。

二、CRD

1.CRD是什么?

CRD的全拼:Custom Resource Define, 自定义资源资源定义

Custom:定制

Resource:资源

Define:定义

2.5个核心的CRD是什么,各有什么用?

Prometheus:创建和管理Prometheus

ServerMonitor:监控service

PodMonitor:监控Pod

AlterManager:接收Prometheus发出的警告,然后发送通知(邮件 钉钉等)

PrometheusRule:设置Prometheus的告警规则

三、下面介绍下5个核心的CRD

1.Prometheus-CRD

(1).promethesu crd是干啥的

告诉k8s怎么创建和管理prometheus的配置文件

(2).prometheus 和 serviceMonitor如何关联

Prometheus 通过 serviceMonitorSelector 匹配 ServiceMonitor 的 labels 来关联要抓取的 Service

(3).Prometheus示例

apiVersion: 复制代码
kind: Prometheus
metadata:
  name: my-prometheus
  namespace: monitoring
spec:
  replicas: 1
  serviceAccountName: prometheus
  serviceMonitorSelector:
    matchLabels:
      team: dev
  podMonitorSelector:
    matchLabels:
      team: dev
  alerting:
    alertmanagers:
      - namespace: monitoring
        name: alertmanager-main
        port: web
  resources:
    requests:
      memory: 400Mi
      cpu: 200m

2.ServiceMonitor CRD

(1).serviceMonitor crd是干啥的

监控service

(2).serviceMonitor如何监控serivce?

1.serviceMonitor 关联service

2.service关联pod,获取pod 暴露的指标(/metrics)

3.serviceMonitor 获取到pod暴露的指标

(3).serviceMonitor 和 service如何关联

通过labels,在serviceMonitor中选择service的labes关联

spec: 复制代码
   selector:
       matchesLables:
           app: myapp 

(4).完整的serviceMonitor示例

apiVersion: 复制代码
kind: ServiceMonitor
metadata:
  name: myapp-servicemonitor       # 这个 ServiceMonitor 的名字
  namespace: monitoring            # 放在哪个命名空间
  labels:
    team: backend                  # 标签,可用于 Prometheus CR 的 selector
spec:
  selector:                         # 选择要监控的 Service
    matchLabels:
      app: myapp
  namespaceSelector:                 # 选择 Service 所在命名空间
    matchNames:
    - default
  endpoints:                         # 指定抓取方式
  - port: http-metrics               # Service 的端口名
    interval: 30s                    # 抓取间隔
    path: /metrics                   # 抓取路径

3.PodMonitor CRD

(1).PodMonitor CRD做什么的

让Prometheus来自动发现并采集pod

(2).Prometheus如何监控pod?

通过 PodMonitor设置的 /metrics, Prometheus拉取 /metrics的数据

(3).PodMonitor如何和pod关联

通过 labels,podMonitor中些selector,关联 app=myapp的pod

spec: 复制代码
  selector:
     matchLabels:
         app: myapp 

(4).podMonitor的示例

apiVersion: 复制代码
kind: PodMonitor
metadata:
  name: myapp-pod-monitor
  namespace: monitoring
  labels:
    team: dev
spec:
  # 匹配哪些 Pod
  selector:
    matchLabels:
      app: myapp
  # 哪些命名空间下查找 Pod
  namespaceSelector:
    matchNames:
      - default
  # Pod metrics 端点配置
  podMetricsEndpoints:
    - port: metrics          # Pod 容器里暴露 metrics 的端口名称
      path: /metrics        # metrics 路径
      interval: 15s         # 抓取频率
      scheme: http          # 协议(http/https)

4.PrometheusRule CRD

(1).PrometheusRule crd是什么

设置告警规则,比如CPU占用率大于80%就告警

(2).PrometheusRule是如何获取到CPU占用率的

1.通过Prometheus暴露的指标 2.Pod的/metrics 计算出CPU占用率后,通过/metrics暴露,然后Prometheus抓取

(3).代码中 PrometheusRule 如何获取到Prometheus抓取的指标

通过定义PromQL 表达式,如: rate(container_cpu_usage_seconds_total[5m]) > 0.8

(4).PrometheusRule的完整示例

apiVersion: 复制代码
kind: PrometheusRule
metadata:
  name: myapp-rules
  namespace: monitoring
spec:
  groups:
    - name: myapp-alerts
      rules:
        # 告警规则示例:CPU 使用率过高
        - alert: HighCpuUsage
          expr: sum(rate(container_cpu_usage_seconds_total[5m])) by (pod) / sum(container_spec_cpu_quota / container_spec_cpu_period) by (pod) > 0.8
          for: 2m
          labels:
            severity: warning
          annotations:
            summary: "Pod {{ $labels.pod }} CPU usage is high"

        # 告警规则示例:内存使用率过高
        - alert: HighMemoryUsage
          expr: sum(container_memory_usage_bytes) by (pod) / sum(container_spec_memory_limit_bytes) by (pod) > 0.8
          for: 2m
          labels:
            severity: warning
          annotations:
            summary: "Pod {{ $labels.pod }} memory usage is high"

        # 记录规则示例:计算每秒请求数
        - record: job:http_requests:rate5m
          expr: rate(http_requests_total[5m])

5.AlterManager CRD

(1).AlterManager是干啥的

1.prometheus计算 prometheusRule的告警

2.有告警后 发送给AlterManager

3.AlterManager 处理告警信息(分组 去重等)

4.AlterManger将告警信息发到配置的平台(如钉钉 邮箱 )

(2).prometheus如何将告警发送给AlterManager

不是通过labels匹配

而是通过 namespace name port匹配

在prometheus可配置这些参数

spec: 复制代码
  alerting:
    alertmanagers:
      - namespace: monitoring
        name: alertmanager-main
        port: web

AlterManager本质也是个service

(3).AlterManager如何处理告警信息

可通过yaml配置

route: 复制代码
  receiver: 'team-email'
  group_by: ['alertname', 'severity']  # 按这些 labels 分组告警
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h

(4).AlterManger如何将告警信息发送到其他平台

通过yaml

通过yaml 复制代码
receivers:
  - name: 'team-email'
    email_configs:
      - to: 'devops@example.com'
        from: 'alertmanager@example.com'
        smarthost: 'smtp.example.com:587'
        auth_username: 'alertmanager'
        auth_identity: 'alertmanager'
        auth_password: 'password'
相关推荐
罗不俷23 分钟前
Prometheus 详解:从原理到实战,打造企业级云原生监控体系
云原生·prometheus
不爱笑的良田36 分钟前
从零开始的云原生之旅(十):HPA 完全指南:从原理到实践
云原生·容器·kubernetes
不爱笑的良田39 分钟前
从零开始的云原生之旅(九):云原生的核心优势:自动弹性伸缩实战
云原生·容器·kubernetes·go
万岳科技程序员小金41 分钟前
多商户商城APP源码开发的未来方向:云原生、电商中台与智能客服
人工智能·云原生·开源·软件开发·app开发·多商户商城系统源码·多商户商城app开发
白小云<9 小时前
Kubernetes service管理
云原生·容器·kubernetes
失因10 小时前
Kubernetes(K8s)基础知识与部署
云原生·容器·kubernetes
hello_25011 小时前
k8s证书过期时间扫描
云原生·容器·kubernetes
2302_7995257411 小时前
【k8s】Deployment、StatefulSet、DaemonSet
云原生·容器·kubernetes
维尔切11 小时前
K8s 资源管理与操作
云原生·容器·kubernetes
问道飞鱼13 小时前
【Kubernets】Kubernetes 资源类型大全:使用场景与配置示例
云原生·容器·kubernetes·资源类型