民工心事 发表于 2024-4-13 22:46:02

如何使用 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,如下图所示:
 
https://s2.51cto.com/images/blog/front/202401/473e6bf298b85ccfb26156c649d822e548c3b1.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
要获取此 Grafana Helm Chart,请运行以下命令:
 
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update 
输出结果:
 
https://s2.51cto.com/images/blog/front/202401/81a0cf706c43bc9e0b23166693ebd5a29bd3c4.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
在 Kubernetes 集群上安装 Grafana Helm Chart

运行此 helm install 命令:
 
helm install grafana grafana/grafana 
输出结果:
 
https://s2.51cto.com/images/blog/front/202401/f1c1e45860c95e6095d0481c0023d971be8d38.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
现在,我们已经在 Kubernetes 集群上安装了 Grafana。我们可以通过端口 80 访问 Grafana 服务器。下一步是访问并启动 Grafan 应用程序。您将使用 Grafana 的 Kubernetes 服务访问该应用程序。要获取 Grafana 的所有 Kubernetes 服务,请运行以下命令:
 
kubectl get service 
输出结果:
 
https://s2.51cto.com/images/blog/front/202401/e5b479066d6df80ab6b225eb28666b01d3727a.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
我们将使用 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:
 
https://s2.51cto.com/images/blog/front/202401/177dc0c224dc403f2b0599245a2726610a7399.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
URL 可能需要一些时间才能可用。您需要在浏览器上重试几次,直到使用此 URL 访问 Grafana Kubernetes 应用程序。您还需要保持终端打开并运行命令,以便继续访问服务。
 
https://s2.51cto.com/images/blog/front/202401/02acac9299d1cc6543a975ae98c0810cb00357.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
上图显示的是 Grafana 登录页面。要获取 admin 的密码,请在新终端上运行以下命令。
 
kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo 
注意:您需要打开一个新终端来运行此过程,以便 Grafana 保持运行。
 
登录 Grafana

要登录 Grafana,请输入 admin 作为用户名和生成的密码。它将启动 Welcome to Grafana 主页,如下所示:
 
https://s2.51cto.com/images/blog/front/202401/49de2a725a1046c20ad506d73b70e5999a51a9.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
要将 Prometheus 添加为数据源,请按照以下步骤操作:
 

[*]在欢迎页面上,单击 Add your first data source :
 
https://s2.51cto.com/images/blog/front/202401/040ca8a82eeea5d5f09358a71cd270212ae459.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]选择 Prometheus 作为数据源:
 
https://s2.51cto.com/images/blog/front/202401/55b9e9a204f91faaed72570e2e747080f45dd9.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]然后,添加运行 Prometheus 应用程序的 URL。这是我们之前运行 minikube service prometheus-server-ext 时显示的第一个 URL(集群内部)。
 
https://s2.51cto.com/images/blog/front/202401/96b76759807e2a220b6510b9a9e2e76111001b.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]点击 "Save & test "保存更改。
 
这样,您就完成了在 Kubernetes 上将 Prometheus 和 Grafana 与 Helm 集成的工作。
 
最后一步,是创建 Grafana 控制面板。这将帮助我们可视化 Kubernetes 集群指标。
 
Grafana 控制面板

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

[*]从 Grafana 公共控制面板库中获取 Grafana 控制面板 ID
 
https://s2.51cto.com/images/blog/front/202401/168bf8343dd2aecad5a5327bd477d51cd1cce9.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]在此网页上,搜索 Kubernetes:
 
https://s2.51cto.com/images/blog/front/202401/28f6d3b41252b9dd1084070091f598e17dda4d.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]滚动直到找到 Kubernetes 集群监控(通过 Prometheus)控制面板:
 
https://s2.51cto.com/images/blog/front/202401/410ed70593d62efa0d8410071cf6d06d8a719a.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]选择控制面板并复制控制面板 ID:
 
https://s2.51cto.com/images/blog/front/202401/48f998c96c46287225b967a034815ec0c62614.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]回到Grafana,点击左上角Home:
 
https://s2.51cto.com/images/blog/front/202401/d7eee1d981df23b7607313e6c646b6bea973f1.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]在菜单上,单击 Dashboards :
 
https://s2.51cto.com/images/blog/front/202401/33017ed612f0a37511d05043cbaf57ad079de5.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]单击 New :
 
https://s2.51cto.com/images/blog/front/202401/d8af2716494e1217c47224c5d2ee577b052314.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
屏幕上会显示三个选项: New Dashboard , New Folder 和Import 。
 

[*]单击 Import:
 
https://s2.51cto.com/images/blog/front/202401/d1a23a743d75c838a416827769e40473b99a59.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]添加 Grafana ID:添加已复制的 Grafana ID,然后单击 Load。Grafana ID 是 315。
 
https://s2.51cto.com/images/blog/front/202401/31745ac85325500f5f469430e8ba50499541ab.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]选择 Promethues 数据源并单击 Import :
 
https://s2.51cto.com/images/blog/front/202401/c3370c8842f904d7603498cb954410a78aa0d2.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
https://s2.51cto.com/images/blog/front/202401/07f1339717849b8d26f813d904fbf219ac9b47.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 

[*]它将启动如下所示的控制面板:
 
https://s2.51cto.com/images/blog/front/202401/92b764247bd3a7a2243539ae33a177146c50de.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
https://s2.51cto.com/images/blog/front/202401/01dce9320605805e353295d9fae186eb847b4d.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=
 
您可以使用此控制面板来监视和观察 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 集群和微服务性能,监控至关重要。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3