前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >prometheus (一) 简介及部署

prometheus (一) 简介及部署

作者头像
Amadeus
发布2023-04-27 20:21:46
1.2K0
发布2023-04-27 20:21:46
举报
文章被收录于专栏:linux技术

0. 前言

基于 centos7.9 docker-ce-20.10.18 kubelet-1.22.3-0 kube-prometheus-0.10 prometheus-v2.32.1

1. 简介

Prometheus Operator: 在 Kubernetes 上管理 Prometheus 集群。该项目的目的是简化和自动化基于 Prometheus 的 Kubernetes 集群监控堆栈的配置。

kube-prometheus 提供了一个基于 Prometheus 和 Prometheus Operator 的完整集群监控堆栈的示例配置。这包括部署多个 Prometheus 和 Alertmanager 实例、用于收集节点指标的指标导出器(如 node_exporters)、将 Prometheus 链接到各种指标端点的目标配置,以及用于通知集群中潜在问题的示例警报规则。

Prometheus Operator 的一个核心特性是 watch Kubernetes API 服务器对特定对象的更改,并确保当前 Prometheus 部署与这些对象匹配。Operator 对以下自定义资源定义 (crd) 进行操作:

monitoring.coreos.com/v1:

  • Prometheus: 它定义了 Prometheus 期望的部署。
  • Alertmanager: 它定义了 AlertManager 期望的部署。
  • ThanosRuler: 它定义了 ThanosRuler 期望的部署;如果有多个 Prometheus 实例,则通过 ThanosRuler 进行告警规则的统一管理。
  • ServiceMonitor: Prometheus Operator 通过 PodMonitorServiceMonitor 实现对资源的监控,ServiceMonitor 用于通过 Service 对 K8S 中的任何资源进行监控,推荐首选 ServiceMonitor. 它声明性地指定了 Kubernetes service 应该如何被监控。Operator 根据 API 服务器中对象的当前状态自动生成 Prometheus 刮擦配置。
  • PodMonitor: Prometheus Operator 通过 PodMonitorServiceMonitor 实现对资源的监控,PodMonitor 用于对 Pod 进行监控,推荐首选 ServiceMonitor. PodMonitor 声明性地指定了应该如何监视一组 pod。Operator 根据 API 服务器中对象的当前状态自动生成 Prometheus 刮擦配置。
  • Probe: 它声明性地指定了应该如何监视 ingress 或静态目标组。Operator 根据定义自动生成 Prometheus 刮擦配置。
  • PrometheusRule: 用于管理 Prometheus 告警规则;它定义了一套所需的 Prometheus 警报和/或记录规则。Prometheus 生成一个规则文件,可以被 Prometheus 实例使用。
  • AlertmanagerConfig: 用于管理 AlertManager 配置文件,主要是告警发给谁;它声明性地指定 Alertmanager 配置的子部分,允许将警报路由到自定义接收器,并设置禁止规则。

Prometheus Operator 自动检测 Kubernetes API 服务器对上述任何对象的更改,并确保匹配的部署和配置保持同步。

https://prometheus-operator.dev/docs/operator/api/#monitoring.coreos.com/v1.Prometheus

2. 部署

kubernets 与 kube-prometheus 的兼容性关系如下

kube-prometheus stack

Kubernetes 1.21

Kubernetes 1.22

Kubernetes 1.23

Kubernetes 1.24

Kubernetes 1.25

release-0.9

release-0.10

release-0.11

release-0.12

kube-prometheus 项目提供的 yaml 中使用的镜像大部分是 quay.io 或者 k8s.gcr.io 等外网仓库的镜像,博主已经将所需镜像上传到,且 fork 官方仓库后修改了 yaml 中的镜像仓库地址,可以直接拉取我修改后的 yaml

这里我的 k8s 测试集群版本是 1.22.3,所以我部署的是 release-0.10 版本的 kube-prometheus

代码语言:javascript
复制
[root@k8s-node1 opt]# cd /opt/ && git clone https://github.com/lvbibir/kube-prometheus -b release-0.10
[root@k8s-node1 kube-prometheus]# cd /opt/kube-prometheus/
[root@k8s-node1 kube-prometheus]# kubectl create  -f manifests/setup/
[root@k8s-node1 kube-prometheus]# kubectl create  -f manifests/

验证

代码语言:javascript
复制
[root@k8s-node1 kube-prometheus]# kubectl get pods -n monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-main-0                    2/2     Running   0          5m16s
alertmanager-main-1                    2/2     Running   0          5m16s
alertmanager-main-2                    2/2     Running   0          5m16s
blackbox-exporter-7c8787786-r9lmv      3/3     Running   0          8m12s
grafana-795c6dd64b-8cspz               1/1     Running   0          8m11s
kube-state-metrics-56f79b8fdc-9p97x    3/3     Running   0          8m11s
node-exporter-4scm6                    2/2     Running   0          8m11s
node-exporter-7hlrp                    2/2     Running   0          8m11s
node-exporter-pph2d                    2/2     Running   0          8m11s
prometheus-adapter-5595dcc894-nmn2w    1/1     Running   0          8m10s
prometheus-adapter-5595dcc894-rzdhv    1/1     Running   0          8m10s
prometheus-k8s-0                       2/2     Running   0          5m15s
prometheus-k8s-1                       2/2     Running   0          5m15s
prometheus-operator-7575c94984-7r4l9   2/2     Running   0          8m10s

[root@k8s-node1 kube-prometheus]# kubectl get svc -n monitoring
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
alertmanager-main       NodePort    10.104.94.103    <none>        9093:39093/TCP,8080:10422/TCP   9m12s
alertmanager-operated   ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP      6m16s
blackbox-exporter       ClusterIP   10.103.168.130   <none>        9115/TCP,19115/TCP              9m12s
grafana                 NodePort    10.108.134.168   <none>        3000:33000/TCP                  9m11s
kube-state-metrics      ClusterIP   None             <none>        8443/TCP,9443/TCP               9m11s
node-exporter           ClusterIP   None             <none>        9100/TCP                        9m11s
prometheus-adapter      ClusterIP   10.111.22.126    <none>        443/TCP                         9m10s
prometheus-k8s          NodePort    10.111.183.173   <none>        9090:39090/TCP,8080:43263/TCP   9m11s
prometheus-operated     ClusterIP   None             <none>        9090/TCP                        6m15s
prometheus-operator     ClusterIP   None             <none>        8443/TCP                        9m10s

可以通过 nodePort 访问 alertmanager prometheus grafana,也可以通过 ingress 将 grafana 暴露到外部

grafana 默认用户名密码为 admin/admin

3. 数据持久化

3.1 prometheus

prometheus 默认的数据文件使用的是 emptydir 方式进行的持久化, 我们改为 nfs

修改 manifests/prometheus-prometheus.yaml

在文件最后新增配置

代码语言:javascript
复制
  retention: 15d          # 监控数据保存的时间为 15 天
  storage:                # 存储配置, 使用 nfs 的 storageClass
    volumeClaimTemplate:
      spec:
        storageClassName: "nfs"
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi

应用后查看新建的 pod 中的 volumes 信息

代码语言:javascript
复制
# pod.spec.container.volumeMounts
[root@k8s-node1 ~]# kubectl get pod prometheus-k8s-0 -n monitoring -o jsonpath='{.spec.containers[?(@.name=="prometheus")].volumeMounts[?(@.name=="prometheus-k8s-db")]}{"\n"}' | python -m json.tool
{
    "mountPath": "/prometheus",
    "name": "prometheus-k8s-db",
    "subPath": "prometheus-db"
}

# pod.spec.volumes
[root@k8s-node1 ~]# kubectl get pod prometheus-k8s-0 -n monitoring -o jsonpath='{.spec.volumes[?(@.name=="prometheus-k8s-db")]}' | python -m json.tool
{
    "name": "prometheus-k8s-db",
    "persistentVolumeClaim": {
        "claimName": "prometheus-k8s-db-prometheus-k8s-0"
    }
}

与传统 statefulset 不同的是, prometheus 识别到 .spec.storage.volumeClaimTemplate 配置后会自动将 prometheus 的数据文件挂载到自动创建的 pvc 上, 无需手动指定 name 然后挂载

3.2 alertmanager

与 prometheus 类似, 这里就不赘述了

manifests/alertmanager-alertmanager.yaml

代码语言:javascript
复制
  storage:                # 存储配置, 使用 nfs 的 storageClass
    volumeClaimTemplate:
      spec:
        storageClassName: "nfs"
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi

重新 apply 之后, 查看新生成 pod 的 volumes

代码语言:javascript
复制
# pod.spec.container.volumeMounts
[root@k8s-node1 ~]# kubectl get pod alertmanager-main-0 -n monitoring -o jsonpath='{.spec.containers[?(@.name=="alertmanager")].volumeMounts[?(@.name=="alertmanager-main-db")]}{"\n"}' | python -m json.tool
{
    "mountPath": "/alertmanager",
    "name": "alertmanager-main-db",
    "subPath": "alertmanager-db"
}

# pod.spec.volumes
[root@k8s-node1 ~]# kubectl get pod alertmanager-main-0 -n monitoring -o jsonpath='{.spec.volumes[?(@.name=="alertmanager-main-db")]}' | python -m json.tool
{
    "name": "alertmanager-main-db",
    "persistentVolumeClaim": {
        "claimName": "alertmanager-main-db-alertmanager-main-0"
    }
}

3.3 grafana

grafana 就是一个普通的 deployment 应用, 直接修改 yaml 中的 volume 配置即可

代码语言:javascript
复制
[root@k8s-node1 ~]# mkdir /nfs/kubernetes/grafana-data
[root@k8s-node1 ~]# chomd -R 777 /nfs/kubernetes/grafana-data

修改 manifests/grafana-deployment.yaml 直接将默认的 emptydir 修改为 nfs 即可

代码语言:javascript
复制
      volumes:
      - name: grafana-storage
        nfs:
          server: k8s-node1
          path: /nfs/kubernetes/grafana-data
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 前言
  • 1. 简介
  • 2. 部署
  • 3. 数据持久化
    • 3.1 prometheus
      • 3.2 alertmanager
        • 3.3 grafana
        相关产品与服务
        Prometheus 监控服务
        Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档