如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3
在本教程的前两部分,我们分别了解和学习了Prometheus 和 Grafana 的基本概念和使用的前提条件,以及使用 Helm 在 Kubernetes 上安装 Prometheus。
在今天的教程中,我们将为你介绍以下内容:
- 安装 Grafana;
- 集成 Prometheus 和 Grafana,Grafana 将使用 Prometheus 作为数据源;
- 使用 Grafana 创建用于监控和观察 Kubernetes 集群的控制面板。
安装 Grafana
安装时,我们遵循与安装 Prometheus 相同的步骤:
搜索 Grafana Helm Chart
要搜索 Prometheus Helm Chart,请运行以下命令:
helm search hub grafana
您还可以访问 ArtifactHub 存储库并搜索官方 Grafana Helm Chart,如下图所示:

要获取此 Grafana Helm Chart,请运行以下命令:
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
输出结果:

在 Kubernetes 集群上安装 Grafana Helm Chart
运行此 helm install 命令:
helm install grafana grafana/grafana
输出结果:

现在,我们已经在 Kubernetes 集群上安装了 Grafana。我们可以通过端口 80 访问 Grafana 服务器。下一步是访问并启动 Grafan 应用程序。您将使用 Grafana 的 Kubernetes 服务访问该应用程序。要获取 Grafana 的所有 Kubernetes 服务,请运行以下命令:
kubectl get service
输出结果:

我们将使用 grafana Kubernetes 服务来访问 Grafana 应用程序。grafana Kubernetes 服务也是 ClusterIP 类型。您只能从 Kubernetes 集群内部访问它。我们需要公开这个 Kubernetes 服务,以便在 Kubernetes 集群外部访问它。
公开 grafana Kubernetes 服务
kubectl expose service grafana --type=NodePort --target-port=3000 --name=grafana-ext
此命令会将 ClusterIP 类型转换为 NodePort 类型。这样grafana 可以通过端口 3000 在 Kubernetes 集群外部访问。现在我们已经公开了grafana Kubernetes 服务。让我们使用以下命令访问 grafana 应用程序:
minikube service grafana-ext
该命令生成以下 URL:

URL 可能需要一些时间才能可用。您需要在浏览器上重试几次,直到使用此 URL 访问 Grafana Kubernetes 应用程序。您还需要保持终端打开并运行命令,以便继续访问服务。

上图显示的是 Grafana 登录页面。要获取 admin 的密码,请在新终端上运行以下命令。
kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
注意:您需要打开一个新终端来运行此过程,以便 Grafana 保持运行。
登录 Grafana
要登录 Grafana,请输入 admin 作为用户名和生成的密码。它将启动 Welcome to Grafana 主页,如下所示:

要将 Prometheus 添加为数据源,请按照以下步骤操作:
- 在欢迎页面上,单击
Add your first data source:

- 选择
Prometheus作为数据源:

- 然后,添加运行 Prometheus 应用程序的 URL。这是我们之前运行
minikube service prometheus-server-ext时显示的第一个 URL(集群内部)。

- 点击 "Save & test "保存更改。
这样,您就完成了在 Kubernetes 上将 Prometheus 和 Grafana 与 Helm 集成的工作。
最后一步,是创建 Grafana 控制面板。这将帮助我们可视化 Kubernetes 集群指标。
Grafana 控制面板
如前所述,您可以选择从头开始创建控制面板。您还可以导入 Grafana 已经提供模板。在本节中,我们将导入一个 Grafana Dashborad。
要导入 Grafana 控制面板,请按照以下步骤操作:
- 从 Grafana 公共控制面板库中获取 Grafana 控制面板 ID

- 在此网页上,搜索 Kubernetes:

- 滚动直到找到 Kubernetes 集群监控(通过 Prometheus)控制面板:

- 选择控制面板并复制控制面板 ID:

- 回到Grafana,点击左上角Home:

- 在菜单上,单击
Dashboards:

- 单击
New:

屏幕上会显示三个选项: New Dashboard , New Folder 和Import 。
- 单击
Import:

- 添加 Grafana ID:添加已复制的 Grafana ID,然后单击
Load。Grafana ID 是 315。

- 选择 Promethues 数据源并单击
Import:


- 它将启动如下所示的控制面板:


您可以使用此控制面板来监视和观察 Kubernetes 集群指标。它显示以下 Kubernetes 集群指标:
- 网络 I/O 压力
- 集群 CPU 使用率
- 集群内存使用情况
- 集群文件系统使用情况
- Pod CPU 使用率
附加步骤
将 Prometheus 和 Grafana 部署到 Azure Kubernetes 服务 (AKS) 等基于云的生产集群时,需要执行以下操作。
为 Prometheus 创建持久卷
持久卷资源用于管理集群中的持久和永久存储。管理员提供一个持久卷以明确存储数据。它可以将数据存储在:
- 本地计算机
- 网络共享
- 云供应商提供的 block 存储卷
无论 Kubernetes 应用程序、pod、应用程序容器甚至 kubernetes 集群本身的生命周期/状态如何,持久卷数据都会持续保存。下面的示例代码展示了如何创建持久卷以保留应用程序数据:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvc-prometheus-migration-prometheus-0
spec:
accessModes:
- ReadWriteOnce
azureDisk:
cachingMode: None
diskName: pvc-prometheus-migration-prometheus-0
diskURI: /subscriptions/f5125d82-2622-4c50-8d25-3f7ba3e9ac4b/resourceGroups/sample-migration-resource-group/providers/Microsoft.Compute/disks/pvc-prometheus-migration-prometheus-0
fsType: ""
kind: Managed
readOnly: false
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Delete
storageClassName: prometheus
volumeMode: Filesystem
您将创建一个新的 .yaml 文件并添加上面的代码,此代码将在服务重新启动之间保留您的数据。
要将持久卷添加到集群,请运行以下命令:
kubectl apply -f prometheus-persistent-volume.yaml
用于 Prometheus 的 PVC
PVC(Persistent Volume Claim)表示 pod 为获得实际块存储而提出的数据存储请求。PVC 消耗 Persistent Volume 数据资源。
PVC 可以请求特定的数据大小和访问模式。下面的示例代码显示了如何创建持久卷请求以访问持久卷:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app.kubernetes.io/name: prometheus
prometheus: prometheus-migration-prometheus
name: prometheus-prometheus-migration-prometheus-db-prometheus-prometheus-migration-prometheus-0
namespace: monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: prometheus
volumeMode: Filesystem
volumeName: pvc-prometheus-migration-prometheus-0
要将 PVC 添加到群集,请运行此命令:
kubectl apply -f prometheus-persistent-volume-claim.yaml
为 Grafana 创建持久卷和 PVC
以下示例代码将为 Grafana 创建持久卷:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-grafana-storage
namespace: monitoring
labels:
type: nfs
spec:
storageClassName: managed-nfs
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server: (your Production prometheus)
path: "/mnt/nfs/grafana-storage"
要将 PVC 添加到集群,请运行以下命令:
kubectl apply -f grafana-persistent-volume-claim.yaml
配置 Prometheus RBAC 权限
在将 Prometheus 和 Grafana 部署到生产环境之前,您将使用 ClusterRole 配置 RBAC 权限。然后,使用 ClusterRoleBinding 对象将此 ClusterRole 绑定到 ServiceAccount。
配置 Prometheus RBAC 权限的示例 yaml 代码
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/metrics
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- configmaps
verbs: ["get"]
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus
namespace: default
要将 RBAC 权限添加到集群,请运行以下命令:
kubectl apply -f rbac-permissions.yaml
创建 Prometheus Kubernetes 服务
Prometheus Kubernetes 服务将公开正在运行的 Prometheus 应用程序,以允许外部访问。
创建 Prometheus Kubernetes 服务的 YAML 示例:
apiVersion: v1
kind: Service
metadata:
name: prometheus
labels:
app: prometheus
spec:
ports:
- name: web
port: 9090
targetPort: 80
selector:
app.kubernetes.io/name: prometheus
sessionAffinity: ClientIP
要将 Prometheus 服务添加到集群,请运行以下命令:
kubectl apply -f prometheus-service.yaml
创建 Grafana Kubernetes 服务
Prometheus Kubernetes 服务将公开正在运行的 Grafana 应用程序,以允许外部访问 Grafana 控制面板。
用于创建 Grafana Kubernetes 服务的示例 YAML:
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: monitoring
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '3000'
spec:
selector:
app: grafana
type: NodePort
ports:
- port: 3000
targetPort: 80
nodePort: 32000
要将 Grafana 服务添加到集群,请运行以下命令:
kubectl apply -f grafana-service.yaml
完成这些附加步骤后,您就可以在生产中运行 Prometheus 和 Grafana 了。
总结
在本期教程中,我们带您一起学习了如何使用 Helm 在 Kubernetes 上集成 Prometheus 和 Grafana。此外,还详细介绍了如何在 Grafana 上创建一个简单的控制面板,以便跟踪 Kubernetes 集群上的资源和性能指标。为了更好地跟踪 Kubernetes 集群和微服务性能,监控至关重要。
如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3的更多相关文章
- helm在k8s上部署Elasticsearch和Kibana
前提 在win上安装docker desktop,没有网络限制,而且,打开kubernetes之后,很快就安装启动好了. 在win上安装scoop,有网络限制,需要访问github raw的文件内容, ...
- 【集群监控】Docker上部署Prometheus+Alertmanager+Grafana实现集群监控
Docker部署 下载 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.re ...
- 部署 Prometheus 和 Grafana 到 k8s
在 k8s 中部署 Prometheus 和 Grafana Intro 上次我们主要分享了 asp.net core 集成 prometheus,以及简单的 prometheus 使用,在实际在 k ...
- 有状态软件如何在 k8s 上快速扩容甚至自动扩容
概述 在传统的虚机/物理机环境里, 如果我们想要对一个有状态应用扩容, 我们需要做哪些步骤? 申请虚机/物理机 安装依赖 下载安装包 按规范配置主机名, hosts 配置网络: 包括域名, DNS, ...
- asp.net core 集成 Prometheus
asp.net core 集成 prometheus Intro Prometheus 是一个开源的现代化,云原生的系统监控框架,并且可以轻松的集成 PushGateway, AlertManager ...
- 手把手教你玩转 Gitea|使用 Helm 在 K3s 上安装 Gitea
前言 在前面的文章中,演示了如何用 Docker 镜像和 Windows 二进制包来安装运行 Gitea.今天是玩转 Gitea 系列的使用 Helm 在 K3s 上安装 Gitea. 关于 Gite ...
- 在k8s上安装Jenkins及常见问题
持续集成和部署是DevOps的重要组成部分,Jenkins是一款非常流行的持续集成和部署工具,最近试验了一下Jenkins,发现它是我一段时间以来用过的工具中最复杂的.一个可能的原因是它需要与各种其它 ...
- 在k8s上部署日志系统elfk
日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...
- gitlab在k8s上运行的一些优化
由 林坤创建,最终由 林坤修改于七月02,2020 gitlab组件图 gitlab在k8s上占用资源 kubectl top pods -n default | grep git* gitlab-g ...
- 优化:在k8s上部署的gitlab
gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...
随机推荐
- IIS下使用SSL证书
IIS下使用SSL证书 本文介绍windowsServer下SSL证书配置及IIS站点配置 1. 生成SSL证书 在阿里云申请免费SSL证书 登录阿里云管理控制台,打开SSL证书管理 选择免费证 ...
- Android辅助功能
1:AccessibilityService 新建service public class AccessibilityService extends android.accessibilityserv ...
- springboot--ActiveMQ--消息队列
ActiveMQ远程消息队列 一.我们创建springboot项目工程 二.创建完毕我们简单介绍 activeMQ 1.概述 消息中间件可以理解成就是一个服务软件,保存信息的容器,比如生活中的快递云柜 ...
- 建议收藏备查!MySQL 常见错误代码说明
先给大家看几个实例的错误分析与解决方案. 1.ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data ...
- zabbix-server 报错记录
数据库磁盘满导至zabbix挂了 登陆zabbix页面提示错误信息,查看系统磁盘: /目录已满,导致mariadb数据库无法正常运行,如果有介质将会一直收取: 解决方法:扩容/目录,达到理想值,重启m ...
- Java 并发编程(三)锁与 AQS
本文 JDK 对应的版本为 JDK 13 由于传统的 synchronized 关键字提供的内置锁存在的一些缺点,自 JDK 1.5 开始提供了 Lock 接口来提供内置锁不具备的功能.显式锁的出现不 ...
- Git 的底层原理
前言 基于 Git 的使用,已经在前文有过相关的介绍,使用 Git 用作日常的开发基本上是足够的.现在,本文将详细介绍一些有关 Git 的实现原理. 底层命令与上层命令 一般情况下,正常使用的 ...
- 39. 干货系列从零用Rust编写负载均衡及代理,正则及格式替换
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- 40. 干货系列从零用Rust编写负载均衡及代理,websocket的实现
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- C# / VB.NET 获取PDF文档的数字签名信息
文档中的数字签名具有不可否认性,可有效防伪防篡改.对文档中已有的数字签名信息,可通过一定方法获取,下面通过程序代码介绍如何来实现.程序中,使用了Spire.PDF.dll,版本:6.11.6,可自行在 ...