在本教程的前两部分,我们分别了解和学习了Prometheus 和 Grafana 的基本概念和使用的前提条件,以及使用 Helm 在 Kubernetes 上安装 Prometheus。
在今天的教程中,我们将为你介绍以下内容:
安装时,我们遵循与安装 Prometheus 相同的步骤:
要搜索 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
输出结果:
运行此 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 集群外部访问它。
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,请输入 admin
作为用户名和生成的密码。它将启动 Welcome to Grafana
主页,如下所示:
要将 Prometheus 添加为数据源,请按照以下步骤操作:
Add your first data source
:
Prometheus
作为数据源:
minikube service prometheus-server-ext
时显示的第一个 URL(集群内部)。
这样,您就完成了在 Kubernetes 上将 Prometheus 和 Grafana 与 Helm 集成的工作。
最后一步,是创建 Grafana 控制面板。这将帮助我们可视化 Kubernetes 集群指标。
如前所述,您可以选择从头开始创建控制面板。您还可以导入 Grafana 已经提供模板。在本节中,我们将导入一个 Grafana Dashborad。
要导入 Grafana 控制面板,请按照以下步骤操作:
Dashboards
:
New
:
屏幕上会显示三个选项: New Dashboard
, New Folder
和Import
。
Import
:
Load
。Grafana ID 是 315。
Import
:
您可以使用此控制面板来监视和观察 Kubernetes 集群指标。它显示以下 Kubernetes 集群指标:
将 Prometheus 和 Grafana 部署到 Azure Kubernetes 服务 (AKS) 等基于云的生产集群时,需要执行以下操作。
持久卷资源用于管理集群中的持久和永久存储。管理员提供一个持久卷以明确存储数据。它可以将数据存储在:
无论 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
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 创建持久卷:
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 和 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 应用程序,以允许外部访问。
创建 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
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 集群和微服务性能,监控至关重要。