如何用Prometheus和Grafana监控Kubernetes集群?

2020 年 8 月 16 日

如何用Prometheus和Grafana监控Kubernetes集群?

Prometheus 是一款免费软件,用于监控事件和警报工具。它可以帮助在时间戳系列数据库中记录实时指标,使用 Http 模型进行 n 次查询和实时报警。我们可以使用 Prometheus 来监控整个 Kubernetes 集群。



Prometheus 栈包括:


  • Prometheus

  • Alertmanager

  • kube-state-metrics

  • node-exporter

  • Grafana


我们还可以在其中包括警报和仪表板。


Capacity planningCluster healthDeploymentsk8s cluster rsrc usek8s node rsrc usek8s resources clusterk8s resources namespacek8s resources podkube DNSkubeletNodesPodsStatefulsetKubernetes all-nodesKubernetes cluster-allKubernetes pods-clusterKubernetes resources-requests
复制代码


警报


  • Component Down(API Server、Kubelet、Node exporter、Alertmanager 以及 Prometheus 等等)

  • Pod alerts (Crashloopbackoff、Pending,尚未就绪)

  • Workload controller alerts(Replicas Mismatch、DaemonSet NotScheduled、DaemonSet MisScheduled、Job Failed 和 Long-running Jobs)

  • Resources alerts(Cpu overcommit、Memory overcommit、Quota exceeded)

  • Persistent Volume alerts

  • Kube API error 和 Client alerts

  • Prometh

  • eus configuration error alerts


安装


第一步:从 GitHub 克隆 Prometheus-grafana 仓库:


git clone URL to GIT REPO
复制代码



    第二步:创建一个 manifest 文件:


    cd Prometheus-grafanaawk ‘FNR==1 {print “ — -”}{print}’ manifests/* > “prometheus_grafana_manifest.yaml”
    复制代码


    第三步:安装 Prometheus-Grafana 栈:


    kubectl apply -f prometheus_grafana_manifest.yaml
    复制代码


    第四步:为 Grafana 创建 ingress:


    如果集群中有一个 ingress 控制器,请更新 grafana-ingress.yaml 文件中的域和 ingress 类,并创建 ingress 资源。


    kubectl apply -f grafana-ingress.yaml
    复制代码


    如果没有 ingress 控制器,仍然可以使用负载平衡服务或节点端口服务,或使用 Kube-proxy 访问 grafana


    Grafana Credentials(凭据)


    Grafana 的默认凭据为:


    • Username:Cloud

    • Password:Cloud


    Grafana 登陆页面:



    Grafana Nodes 仪表板



    你可以根据自己的兴趣设置自己的用户名和密码。


    在更新凭据机密文件中的值之前,必须以 base64 格式对用户名和密码进行编码。


    echo “myuser” | base64bXl1c2VyCg==echo “HgTf0n9L@wrd” | base64 HgTf0n9L@wrdGHJKLYuiGFDYH=
    复制代码


    现在,我们将使用 manifests 目录下的 2-grafana-cerdentials-secret.yaml 中用 base64 编码的用户名和密码来“更新 admin-user 和 admin-password 的值”。


    apiVersion: v1kind: Secretmetadata:  name: grafana  namespace: prometheus  labels:    app.kubernetes.io/name: prometheus    app.kubernetes.io/component: grafanatype: Opaquedata:  admin-user: jdvchksojs)==  admin-password: GHJKLYuiGFDYH=
    复制代码


    运行命令:


    kubectl apply -f 2-grafana-credentials-secret.yaml
    复制代码


    如果 Grafana 已经安装并正在运行,则必须删除现有的 Pod。我们将看到一个新的 Pod,具有最新配置和更新配置。


    获取 Grafana 凭据


    你可以通过解码值从 secret 中获得凭据:


    echo "Username: $(kubectl get secret grafana --namespace prometheus \                 --output=jsonpath='{.data.admin-user}' | base64 --decode)"echo "Password: $(kubectl get secret grafana --namespace prometheus \                 --output=jsonpath='{.data.admin-password}' | base64 --decode)"
    复制代码


    我们还可以看到,在 Prometheus 中,无需身份验证即可登录到 Web 界面。


    Prometheus Web 界面:



    配置 Alertmanager(警报管理器) 在安装栈时,必须提供警报接收器的详细信息。



    否则,你将永远不会收到有关集群状态变更和资源利用率的通知。


    我们可以根据需要更改配置。


    Alert Manager 配置了一个以 YAML 格式编写的配置文件,该文件定义了规则、通知路由和接收器。


    下面是 Email、Slack 和 Webhook 接收器的配置示例:


    Email


    global:  resolve_timeout: 5mreceivers:  - name: email_config    email_configs:      - to: "< to_address >"        from: "< from_address >"        smarthost: "< smtp_host:port >"        auth_username: "< smtp_username >"        auth_password: "< smtp_password >"route:  group_by:    - job  receiver: email_config  group_interval: 5m  group_wait: 30s  repeat_interval: 30m
    复制代码


    Slack :


    global:  resolve_timeout: 5m  slack_api_url: "< slack_webhook_url >"receivers:  - name: "slack-notifications"    slack_configs:      - channel: "#alerts"route:  group_by:    - job  receiver: "slack-notifications"  group_interval: 5m  group_wait: 30s  repeat_interval: 30m
    复制代码


    Web-hook :


    global:  resolve_timeout: 5mreceivers:  - name: webhook    webhook_configs:      - url: "< webhook_url >"route:  group_by:    - job  repeat_interval: 30m  group_interval: 5m  group_wait: 30s  receiver: webhook
    复制代码


    如上所述,在 mainifests 目录下的 1-alermanager-configmap.yaml 文件中更新配置,并应用配置。


    kubectl apply -f 1-alertmanager-configmap.yaml
    复制代码


    更新 coonfigmap 后,重启正在运行的 alertmanager pod。将使用更新后的配置创建一个新的 pod。


    原文链接:


    https://medium.com/faun/how-to-monitor-kubernetes-cluster-with-prometheus-and-grafana-8ec7e060896f


    2020 年 8 月 16 日 18:261761

    评论

    发布
    暂无评论
    发现更多内容

    ARTS(2020-05-25/2020-05-31)

    天行者

    正确阅读

    一款霸榜 GitHub 的开源 Linux 资源监视器!

    JackTian

    GitHub Linux 开源项目 bashtop 资源监视器

    Go: 使用GODEBUG改善Goroutine的使用

    陈思敏捷

    go golang debug 协程

    直面一个复杂世界

    史方远

    读书笔记 个人成长 随笔杂谈

    RocketMQ - 如何实现事务消息

    Java收录阁

    RocketMQ

    钢铁侠马斯克之仰望星空

    池建强

    创业 马斯克 Space X

    1 ARTS 2020-05-31

    3.141516

    LeetCode

    B端产品经理养成记(1):业务场景

    涛哥

    产品经理 需求 产品开发

    转行程序员浅谈进程间的socket通信

    WB

    Linux socket 转行程序员

    ARTS打卡第一周5.25-5.31

    我笔盒呢

    工厂模式(四)泛型工厂之MyBatis Mapper代理

    LSJ

    Java 设计模式 泛型 工厂注册中心

    Linux命令-df

    一周思进

    工作那么久,你还具备学习能力么?

    夜来妖

    学习 程序员成长

    程序猿邂逅相亲妹,默默无语两行泪

    码农神说

    程序员 相亲

    Kafka系列9:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(上)

    z小赵

    大数据 kafka 实时计算

    除了直接看余额,谁更有钱还能怎么比(二)

    石君

    去中心 零知识证明

    YARN的架构设计和工作原理(通俗易懂)

    Shockang

    hadoop YARN

    ARTS Week2

    丽子

    B端产品经理养成记(2):用户故事

    涛哥

    产品经理 需求 产品开发

    做PO难,难于上青天

    刘华Kenneth

    敏捷 产品经理 决策 PO

    关于 Windows 10 2020 年 5 月更新

    FeiLong

    draw.io-取代visio的流程图绘制工具

    Rice嵌入式开发技术分享

    chrome vscode 写文章神器 draw.io

    浅说Docker基础知识与核心原理

    岿然独存5

    go Docker 软件

    你想活出怎样的人生

    Janenesome

    读书笔记 思考

    N皇后问题

    孙苏勇

    算法 DFS 深度优先搜索

    【5月】本月读书学到了什么

    Neco.W

    创业 读书感悟 阅读量

    RocketMQ - 高可用设计

    Java收录阁

    RocketMQ

    不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...

    JackTian

    GitHub 学习 程序员 编码 开源项目

    架构之路

    强哥

    极客大学架构师训练营

    戒掉手机吧

    鼎玉谷

    人生 手机 时间 浪费 控制

    使用Kotlin语言初始化数组

    mengxn

    数组 kotlin 初始化

    如何用Prometheus和Grafana监控Kubernetes集群?-InfoQ