首页 > 其他分享 >如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3

如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3

时间:2024-01-22 10:45:23浏览次数:45  
标签:Kubernetes prometheus grafana Prometheus Part 集群 Grafana

在本教程的前两部分,我们分别了解和学习了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,如下图所示:

 

image.png

 

要获取此 Grafana Helm Chart,请运行以下命令:

 

helm repo add grafana https://grafana.github.io/helm-charts 
helm repo update

 

输出结果:

 

image.png

 

在 Kubernetes 集群上安装 Grafana Helm Chart

运行此 helm install 命令:

 

helm install grafana grafana/grafana

 

输出结果:

 

image.png

 

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

 

kubectl get service

 

输出结果:

 

image.png

 

我们将使用 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:

 

image.png

 

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

 

image.png

 

上图显示的是 Grafana 登录页面。要获取 admin 的密码,请在新终端上运行以下命令。

 

kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

 

注意:您需要打开一个新终端来运行此过程,以便 Grafana 保持运行。

 

登录 Grafana

要登录 Grafana,请输入 admin 作为用户名和生成的密码。它将启动 Welcome to Grafana 主页,如下所示:

 

image.png

 

要将 Prometheus 添加为数据源,请按照以下步骤操作:

 

  1. 在欢迎页面上,单击 Add your first data source :

 

image.png

 

  1. 选择 Prometheus 作为数据源:

 

image.png

 

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

 

image.png

 

  1. 点击 "Save & test "保存更改。

 

这样,您就完成了在 Kubernetes 上将 Prometheus 和 Grafana 与 Helm 集成的工作。

 

最后一步,是创建 Grafana 控制面板。这将帮助我们可视化 Kubernetes 集群指标。

 

Grafana 控制面板

如前所述,您可以选择从头开始创建控制面板。您还可以导入 Grafana 已经提供模板。在本节中,我们将导入一个 Grafana Dashborad。

 

要导入 Grafana 控制面板,请按照以下步骤操作:

 

  • 从 Grafana 公共控制面板库中获取 Grafana 控制面板 ID

 

image.png

 

  • 在此网页上,搜索 Kubernetes:

 

image.png

 

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

 

image.png

 

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

 

image.png

 

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

 

image.png

 

  • 在菜单上,单击 Dashboards :

 

image.png

 

  • 单击 New :

 

image.png

 

屏幕上会显示三个选项: New Dashboard , New FolderImport

 

  • 单击 Import

 

image.png

 

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

 

image.png

 

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

 

image.png

image.png

 

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

 

image.png

image.png

 

您可以使用此控制面板来监视和观察 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 集群和微服务性能,监控至关重要。

标签:Kubernetes,prometheus,grafana,Prometheus,Part,集群,Grafana
From: https://www.cnblogs.com/sealio/p/17979484

相关文章

  • 【Leetcode1949. 坚定的友谊】使用MySQL在无向图中寻找{"CompleteTripartite", {1, 1,
    目录题目地址思路代码MySQL代码逐行翻译为Pandas代码等效Cypher查询(未验证)题目地址https://leetcode.cn/problems/strong-friendship/思路就是在无向图中寻找这个pattern:(*Mathematica*)GraphData[{"CompleteTripartite",{1,1,3}}]SQL写还是比较麻烦。更加复杂的查询还是......
  • 当 OpenTelemetry 遇上阿里云 Prometheus
    作者:逸陵背景在云原生可观测蓬勃发展的当下,想必大家对OpenTelemetry&Prometheus并不是太陌生。OpenTelemetry是CNCF(CloudNativeComputingFoundation)旗下的开源项目,它的目标是在云原生时代成为应用性能监控领域的事实标准,它提供了一套统一的API和SDK,用于生成、收集和处......
  • (坚持每天写算法)算法复习与学习part1基础算法part1-11——差分
    差分和前缀和是有联系的。首先给定一个原数组a:a[1],a[2],a[3],,,,,,a[n];然后我们构造一个数组b:b[1],b[2],b[3],,,,,,b[i];使得a[i]=b[1]+b[2]+b[3]+,,,,,,+b[i]也就是说,a数组是b数组的前缀和数组,反过来我们把b数组叫做a数组的差分数......
  • (坚持每天写算法)算法复习和学习part1基础算法part1-9高精度乘法
    这一道题的思路和之前都是一样的,仍然是按照算式进行模拟的,这里就直接贴代码了:#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<algorithm>usingnamespacestd;//总结:vector,size,string,size,vector[i],string[i];vector&......
  • (坚持每天都写算法)算法复习与学习part1基础算法1.8高精度乘法
    这道知识点有点特殊,我当初在学的时候是只学了高精度*高精度,然后其他的我还没有想法,今天就来学学。有大概6天没有写新博客,主要是实习面试和期末考,实习面试没有过关,姐姐朋友推荐我先去刷一下面试题,叫我重温一下之前的知识,然后去参考一下开源项目,我决定边复习边写博客,就这样......
  • dremio + grafana/tempo opentelemetry监控集成
    昨天我写过一个基于signoz的dremioopentelemetry集成,实际上grafana/tempo也是一个很不错的选择,主要是部署简单,以下是一个简单测试环境准备docker-compose文件version:"3"services:tempo:image:grafana/tempo:latestcommand:["-config......
  • CF1679E Typical Party in Dorm
    TypicalPartyinDormLuoguCF1679E题面描述给定一个长度为\(n(n\le1000)\),仅由前\(17\)个英文小写字母和问号组成的字符串\(s\)。多次询问,每次给出一个由前\(17\)个英文小写字母组成的字符集\(A\),你可以将\(s\)中的问号任意替换成\(A\)中的字母,求你能得到多少......
  • docker 部署prometheus监控+Grafana
    yum-yinstallyum-utilsdevice-mapper-persistent-datalvm2安装docker或者使用containerd自行安装,使用containerd把docker命令换成对应的containerd的命令[root@Docker~]#dockerpullprom/prometheus[root@Docker~]#dockerrun--nameprometheus-d-p9090:9090--......
  • AWS-SAA C03 题库 —— PART03 81-130
    81.AsolutionsarchitectisdesigningthecloudarchitectureforanewapplicationbeingdeployedonAWS.Theprocessshouldruninparallelwhileaddingandremovingapplicationnodesasneededbasedonthenumberofjobstobeprocessed.Theprocessor......
  • 大师学SwiftUI第6章 - 声明式用户界面 Part 4
    步进器视图Stepper视图创建一个带递增和递减按钮的控件。该结构体提供了多个初始化方法,包含不同的配置参数组合。以下是最常用的一部分。Stepper(String,value:Binding,in:Range,step:Float,onEditingChanged:Closure):此初始化方法创建一个Stepper视图。第一个参数定义标签......