前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用Prometheus和Grafana监控Kubernetes集群?

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

作者头像
深度学习与Python
发布2020-08-20 10:46:37
8900
发布2020-08-20 10:46:37
举报
文章被收录于专栏:深度学习与python

作者 | Kubernetes Advocate

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

Prometheus 栈包括:

  • Prometheus
  • Alertmanager
  • kube-state-metrics
  • node-exporter
  • Grafana

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

代码语言:javascript
复制
Capacity planning
Cluster health
Deployments
k8s cluster rsrc use
k8s node rsrc use
k8s resources cluster
k8s resources namespace
k8s resources pod
kube DNS
kubelet
Nodes
Pods
Statefulset
Kubernetes all-nodes
Kubernetes cluster-all
Kubernetes pods-cluster
Kubernetes 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
  • Prometheus configuration error alerts

安装

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

代码语言:javascript
复制
git clone URL to GIT REPO

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

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

第三步:安装 Prometheus-Grafana 栈:

代码语言:javascript
复制
kubectl apply -f prometheus_grafana_manifest.yaml

第四步:为 Grafana 创建 ingress:

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

代码语言:javascript
复制
kubectl apply -f grafana-ingress.yaml

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

Grafana Credentials(凭据)

Grafana 的默认凭据为:

  • Username:Cloud
  • Password:Cloud

Grafana 登陆页面:

Grafana Nodes 仪表板

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

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

代码语言:javascript
复制
echo “myuser” | base64
bXl1c2VyCg==
echo “HgTf0n9L@wrd” | base64 HgTf0n9L@wrd
GHJKLYuiGFDYH=

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

代码语言:javascript
复制
apiVersion: v1
kind: Secret
metadata:
name: grafana
namespace: prometheus
labels:
app.kubernetes.io/name: prometheus
app.kubernetes.io/component: grafana
type: Opaque
data:
admin-user: jdvchksojs)==
admin-password: GHJKLYuiGFDYH=

运行命令:

代码语言:javascript
复制
kubectl apply -f 2-grafana-credentials-secret.yaml

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

获取 Grafana 凭据

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

代码语言:javascript
复制
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

代码语言:javascript
复制
global:
resolve_timeout: 5m
receivers:
- 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 :

代码语言:javascript
复制
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 :

代码语言:javascript
复制
global:
resolve_timeout: 5m
receivers:
- 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 文件中更新配置,并应用配置。

代码语言:javascript
复制
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-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 InfoQ 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档