章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • ansible系列文章

  • Kubernetes笔记

    • 安装篇-kubeadm
    • k8s入门
    • k8s安装篇二进制
    • k8s面试题
    • kubernetes(k8s)yaml文件详解
    • k8s报错小结
    • Kubernetes 安装配置ingress controller
    • cka考试真题
    • ingress配置证书
    • cka考试作业
    • k8s部署java项目
    • jenkins脚本式流水线部署k8s项目实例一
    • helm v3安装并创建例子
    • 使用helm将本地部署文件上传到harbor chart上
    • helm公共仓库创建
    • helm适应minio作为私有仓库
    • helm release使用说明
    • kubernetes核心概念
    • kubectl使用技巧
    • kubernetes卷的几种类型
    • kubernetes安全框架
    • 云原生-什么是HPA和PDB、VPA
    • k8s部署php项目示例
    • 配置kubeconfig 文件访问 Kubernetes 集群
    • configmap配置的几种方式
    • k8s配置go服务
    • k8s部署java项目
    • kubernetes部署prometheus监控
      • kubernetes部署elk日志系统
      • kubernetes环境devops流水线
      • kubernetes高阶技能必备的工具
      • deployment中使用configmap、secret的方式
      • 业务pod 飘移pending排查分析
    • elk

    • jenkins

    • GitLabCI_CD

    • 专题
    • Kubernetes笔记
    章工运维
    2025-02-28
    目录

    kubernetes部署prometheus监控

    # Prometheus监控安装

    添加helm仓库

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
    
    1
    2

    之后来到重点,在我们install 之后,会遇到很多拉不下的镜像,可以通过一下方式解决: 首先 install 命令,看有哪些镜像拉不下来

    helm install  dfsf prometheus-community/kube-prometheus-stack --namespace monitoring
    
    1

    之后通过 kubectl describe命令查看具体的问题pod(注意:stack会首先启动一个job,如果读者在上一步指令遇到等待条件超时的报错请kubectl get all -n monitoring查看具体问题pod)

    知道了具体的镜像名之后,我们进入docker.aityp.com找到对应的镜像

    导出默认的values.yaml文件

    helm show values prometheus-community/kube-prometheus-stack > default-values.yaml
    
    1

    下面是我整理的镜像文件images-values.yaml

    grafana:
      image:
        registry: swr.cn-north-4.myhuaweicloud.com
        repository: ddn-k8s/docker.io/grafana/grafana
        tag: latest
      sidecar:
        image:
          registry: swr.cn-north-4.myhuaweicloud.com
          repository: ddn-k8s/docker.io/kiwigrid/k8s-sidecar
          tag: 1.28.0
    alertmanager:
      alertmanagerSpec:
        image:
          registry: swr.cn-north-4.myhuaweicloud.com
          repository: ddn-k8s/docker.io/rancher/mirrored-prometheus-alertmanager
          tag: v0.27.0
    prometheus:
      prometheusSpec:
        image:
          registry: swr.cn-north-4.myhuaweicloud.com
          repository: ddn-k8s/quay.io/prometheus/prometheus
          tag: v3.1.0
    prometheusOperator:
      image:
        registry: swr.cn-north-4.myhuaweicloud.com
        repository: ddn-k8s/quay.io/prometheus-operator/prometheus-operator
        tag: v0.79.2
      admissionWebhooks:
        deployment:
          image:
            registry: docker.io
            repository: imroc/prometheus-operator-admission-webhook
            tag: "v0.77.2"
        patch:
          image:
            registry: swr.cn-north-4.myhuaweicloud.com
            repository: ddn-k8s/registry.k8s.io/ingress-nginx/kube-webhook-certgen
            tag: v1.5.1
      prometheusConfigReloader:
        image:
          registry: swr.cn-north-4.myhuaweicloud.com
          repository: ddn-k8s/docker.io/imroc/prometheus-config-reloader
          tag: "v0.80.0"
      thanosImage:
        registry: swr.cn-north-4.myhuaweicloud.com
        repository: ddn-k8s/docker.io/imroc/thanos
        tag: v0.37.2
    thanosRuler:
      thanosRulerSpec:
        image:
          registry: swr.cn-north-4.myhuaweicloud.com
          repository: ddn-k8s/docker.io/imroc/thanos
          tag: v0.37.2
    kube-state-metrics:
      image:
        registry: swr.cn-north-4.myhuaweicloud.com
        repository: ddn-k8s/registry.k8s.io/kube-state-metrics/kube-state-metrics
        tag: v2.9.2
    prometheus-node-exporter:
      image:
        registry: swr.cn-north-4.myhuaweicloud.com
        repository: ddn-k8s/quay.io/prometheus/node-exporter
        tag: v1.8.2
      kubeRBACProxy:
        image:
          registry: swr.cn-north-4.myhuaweicloud.com
          repository: ddn-k8s/quay.io/brancz/kube-rbac-proxy
          tag: v0.18.2
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68

    以同时针对 grafana 的配置编辑文件grafana-values.yaml

    grafana:
      adminUser: "admin"
      adminPassword: "123456"
    
    1
    2
    3
    helm install  zpj-monitor prometheus-community/kube-prometheus-stack -f images-values.yaml -f grafana-values.yaml --namespace monitoring
    # 更新操作
    helm upgrade  zpj-monitor prometheus-community/kube-prometheus-stack -f images-values.yaml -f grafana-values.yaml --namespace monitoring
    
    1
    2
    3

    结果展示

    image-20250228132155304


    # 总结

    组件 默认镜像仓库 核心职责
    Prometheus Operator quay.io/prometheus-operator 管理监控组件(Prometheus、Alertmanager)
    Prometheus Server quay.io/prometheus 指标采集、存储、告警触发
    Alertmanager quay.io/prometheus 告警路由与通知
    Grafana grafana/grafana 可视化仪表盘
    Node Exporter quay.io/prometheus 采集节点级指标(CPU、内存等)
    Kube State Metrics quay.io/kube-state-metrics 采集 Kubernetes 资源状态指标
    组件 核心作用
    k8s-sidecar 动态同步 ConfigMap/Secret 文件到主容器(热加载配置)
    admission-webhook Kubernetes 资源操作准入控制(验证/变更请求)
    kube-webhook-certgen 自生成 Webhook 所需的 TLS 证书
    prometheus-config-reloader 动态重载 Prometheus 配置(无需重启)
    thanos 扩展 Prometheus 的高可用和全局查询能力
    kubectl 执行 Kubernetes 操作(初始化 Job 中的权限调整、资源管理)
    busybox 轻量级调试命令工具(网络测试、文件检查等)

    # 时区问题

    # 更改 Prometheus 的显示时区

    Prometheus 为避免时区混乱,在所有组件中专门使用 Unix Time 和 Utc 进行显示。不支持在配置文件中设置时区,也不能读取本机 /etc/timezone 时区。

    其实这个限制是不影响使用的:

    如果做可视化,Grafana是可以做时区转换的。

    如果是调接口,拿到了数据中的时间戳,你想怎么处理都可以。

    如果因为 Prometheus 自带的 UI 不是本地时间,看着不舒服,2.16 版本的新版 Web UI已经引入了Local Timezone 的选项。

    # 报错问题

    1、kube-system命名空间的metrics-server报错

    image-20250305170156579

    解决方法:修改镜像

    kubectl edit deploy metrics-server -n kube-system

    重启deploy

    kubectl rollout restart deployment metrics-server -n kube-system
    
    1

    2、运行报错证书验证问题

    kubectl logs -f metrics-server-8658cdb478-ff2vw -n kube-system

    image-20250305170428144

    解决方法

    kubectl edit deploy metrics-server -n kube-system
    #添加以下参数到容器启动命令:
    containers:
    - args:
      - --kubelet-insecure-tls  # 跳过 TLS 验证
    
    1
    2
    3
    4
    5

    验证是否修复

    kubectl logs -n kube-system -l k8s-app=metrics-server --tail=100
    
    1

    # 告警规则修改

    #备份告警规则
    kubectl get prometheusrules zpj-monitor-kube-prometheu-etcd -n monitoring -o yaml > zpj-monitor-kube-prometheu-etcd.yaml
    #执行编辑规则
    kubectl edit prometheusrules zpj-monitor-kube-prometheu-etcd -n monitoring
    #如果对默认规则不满意也可以删除,新建一个规则应用
    
    1
    2
    3
    4
    5

    # 配置邮件告警

    1、获取并解压当前配置

    kubectl get secret alertmanager-zpj-monitor-kube-prometheu-alertmanager-generated -n monitoring -o json | jq -r '.data["alertmanager.yaml.gz"]' | base64 -d | gunzip > alertmanager.yaml
    
    1

    2、编辑配置文件

    打开 alertmanager.yaml 文件,添加邮件告警配置。一个完整的邮件告警配置示例:

    global:
      resolve_timeout: 5m
      smtp_smarthost: 'smtp.qq.com:465'
      smtp_from: '874878956@qq.com'
      smtp_auth_username: '874878956@qq.com'
      smtp_auth_password: 'xxxxxxxxxxxxxxx'
      smtp_require_tls: false
    route:
      receiver: "email-notifications"
      group_by:
      - namespace
      - job
      - severity
      routes:
      - receiver: "email-notifications"
        matchers:
        - alertname = "Watchdog"
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 12h
    inhibit_rules:
    - target_matchers:
      - severity =~ warning|info
      source_matchers:
      - severity = critical
      equal:
      - namespace
      - alertname
    - target_matchers:
      - severity = info
      source_matchers:
      - severity = warning
      equal:
      - namespace
      - alertname
    - target_matchers:
      - severity = info
      source_matchers:
      - alertname = InfoInhibitor
      equal:
      - namespace
    - target_matchers:
      - alertname = InfoInhibitor
    receivers:
    - name: 'email-notifications'
      email_configs:
      - to: 'zpj199310@163.com'
        send_resolved: true
    templates:
    - /etc/alertmanager/config/*.tmpl
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50

    3、压缩修改后的配置

    gzip -c alertmanager.yaml > alertmanager.yaml.gz
    
    1

    4、创建新的 Secret

    kubectl create secret generic alertmanager-new-config -n monitoring --from-file=alertmanager.yaml.gz
    
    1

    5、提取新 Secret 的 base64 编码数据

    NEW_CONFIG=$(kubectl get secret alertmanager-new-config -n monitoring -o json | jq -r '.data["alertmanager.yaml.gz"]')
    
    1

    6、更新原始 Secret

    kubectl get secret alertmanager-zpj-monitor-kube-prometheu-alertmanager-generated -n monitoring -o json | \
      jq --arg new_config "$NEW_CONFIG" '.data["alertmanager.yaml.gz"]=$new_config' | \
      kubectl apply -f -
    
    1
    2
    3

    7、重启 Alertmanager Pod 使配置生效

    kubectl rollout restart statefulset alertmanager-zpj-monitor-kube-prometheu-alertmanager -n monitoring
    
    1

    # 验证配置

    等待 Alertmanager Pod 重启后,可以通过以下命令验证配置是否已经应用:

    kubectl get secret alertmanager-zpj-monitor-kube-prometheu-alertmanager-generated -n monitoring -o json | jq -r '.data["alertmanager.yaml.gz"]' | base64 -d | gunzip
    
    1

    如果你使用 Prometheus Operator 的方式管理 AlertManager,可能需要确保没有其他资源在覆盖你的配置。如果配置依然不生效,建议检查 AlertManager 的日志:

    kubectl logs -l app.kubernetes.io/name=alertmanager -n monitoring
    
    1

    效果展示

    image-20250311163714076

    # 更新操作

    # 将配置保存为 alertmanager.yaml
    # 压缩配置
    gzip -c alertmanager.yaml > alertmanager.yaml.gz
    
    # 创建新的 Secret
    kubectl create secret generic alertmanager-new-config -n monitoring --from-file=alertmanager.yaml.gz --dry-run=client -o yaml | kubectl apply -f -
    
    # 提取新 Secret 的编码数据
    NEW_CONFIG=$(kubectl get secret alertmanager-new-config -n monitoring -o jsonpath='{.data.alertmanager\.yaml\.gz}')
    
    # 更新原始 Secret
    kubectl get secret alertmanager-zpj-monitor-kube-prometheu-alertmanager-generated -n monitoring -o json | \
      jq --arg new_config "$NEW_CONFIG" '.data["alertmanager.yaml.gz"]=$new_config' | \
      kubectl apply -f -
    
    # 重启 Alertmanager
    kubectl rollout restart statefulset alertmanager-zpj-monitor-kube-prometheu-alertmanager -n monitoring
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    微信 支付宝
    上次更新: 2025/03/11, 16:40:06

    ← k8s部署java项目 kubernetes部署elk日志系统→

    最近更新
    01
    shell脚本模块集合
    05-13
    02
    生活小技巧(认知版)
    04-29
    03
    生活小技巧(防骗版)
    04-29
    更多文章>
    Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式