写点什么

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

作者:SEAL安全
  • 2024-01-10
    澳大利亚
  • 本文字数:6826 字

    阅读完需:约 22 分钟

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

在 Part 1 中,我们一起了解了什么是 Prometheus 和 Grafana,以及使用这些工具的前提条件和优势。在本部分,将继续带您学习如何安装 Helm 以及如何使用 Prometheus Helm Charts。


开始使用 Helm 和 Helm Chart


ArtifactHub 为 Helm Chart 提供了公共和私有资源库。我们将使用这些 Helm Chart 来设置 Kubernetes 集群中的 pod 和服务。


Helm 社区为各种 Kubernetes 应用程序创建、管理和维护 Helm Chart,这些资源会时常更新。Helm Chart 可重复使用,安装简单。想要使用 Helm 在 Kubernetes 上集成 Prometheus 和 Grafana,让我们从安装 Helm 开始。


安装 Helm


安装 Helm 之前,必须使用以下命令启动 Minikube Kubernetes:


minikube start --driver=docker
复制代码


下图显示 Minikube 正在运行。Kubectl 工具现已配置为使用 Minikube。



接下来,使用以下命令(根据你使用的操作系统使用对应的命令)安装 Helm:


在 Linux 上安装 Helm


sudo apt-get install helm
复制代码


在 Windows 上安装 Helm


choco install Kubernetes-helm
复制代码


在 macOS 系统上安装 Helm


brew install helm
复制代码


提示:如果遇到问题,可以查看 Helm 官方文档指南 https://helm.sh/docs/intro/install/


下图显示了 Helm 在 Windows 机器上的安装情况:



Helm 命令


要获取所有 Helm 命令,请运行此命令:


helm
复制代码


命令输出结果:


The Kubernetes package manager
Common actions for Helm:
- helm search: search for charts- helm pull: download a chart to your local directory to view- helm install: upload the chart to Kubernetes- helm list: list releases of charts
Usage: helm [command]
Available Commands: completion generate autocompletion scripts for the specified shell create create a new chart with the given name dependency manage a chart's dependencies env helm client environment information get download extended information of a named release help Help about any command history fetch release history install install a chart lint examine a chart for possible issues list list releases package package a chart directory into a chart archive plugin install, list, or uninstall Helm plugins pull download a chart from a repository and (optionally) unpack it in local directory push push a chart to remote registry login to or logout from a registry repo add, list, remove, update, and index chart repositories rollback roll back a release to a previous revision search search for a keyword in charts show show information of a chart status display the status of the named release template locally render templates test run tests for a release uninstall uninstall a release upgrade upgrade a release verify verify that a chart at the given path has been signed and is valid version print the client version information
Use "helm [command] --help" for more information about a command.
复制代码


最常用的 Helm 命令有


  • helm search:在 ArtifactHub 资源库中搜索 Helm Chart。

  • helm pull:从 ArtifactHub 资源库中提取并下载 Helm Chart。

  • helm install:上传 Helm Chart 并将其部署到 Kubernetes 集群。

  • helm list:列出 Kubernetes 集群中部署的所有 Helm Chart。


Prometheus Helm Charts


首先,我们将搜索 Prometheus Helm Charts。要搜索 Prometheus Helm,请运行以下命令:


helm search hub prometheus
复制代码


该命令列出以下 Prometheus Helm Chart:


URL                                                       CHART VERSION         APP VERSION                                           DESCRIPTIONhttps://artifacthub.io/packages/helm/prometheus...        25.1.0                v2.47.0                                               Prometheus is a monitoring system and time seri...https://artifacthub.io/packages/helm/truecharts...        13.0.7                2.47.1                                                kube-prometheus-stack collects Kubernetes manif...https://artifacthub.io/packages/helm/saurabh6-p...        0.2.0                 1.1                                                   This is a Helm Chart for Prometheus Setup.https://artifacthub.io/packages/helm/prometheus...        13.0.0                2.22.1                                                Prometheus is a monitoring system and time seri...https://artifacthub.io/packages/helm/wenerme/pr...        25.1.0                v2.47.0                                               Prometheus is a monitoring system and time seri...https://artifacthub.io/packages/helm/wener/prom...        25.1.0                v2.47.0                                               Prometheus is a monitoring system and time seri...https://artifacthub.io/packages/helm/romanow-he...        1.3.5                 2.40.0                                                Prometheus collects and stores its metrics as t...https://artifacthub.io/packages/helm/mach1el-ch...        1.0.1                 v2.47.0                                               Prometheus Helm chart for Kuberneteshttps://artifacthub.io/packages/helm/cloudposse...        0.2.1                                                                       Prometheus instance created by the CoreOS Prome...
复制代码


您还可以前往 ArtifactHub 存储库(https://artifacthub.io/)并搜索官方 Prometheus Helm Chart,如下图所示:



列表中的第一个是官方的 Prometheus Helm Chart。要获取此 Helm Chart,请运行以下命令:


helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm repo updat
复制代码


输出结果:


"prometheus-community" has been added to your repositoriesHang tight while we grab the latest from your chart repositories......Successfully got an update from the "grafana" chart repository...Successfully got an update from the "prometheus-community" chart repository...Successfully got an update from the "bitnami" chart repositoryUpdate Complete. ⎈Happy Helming!⎈
复制代码


现在,我们已经下载好最新版本的 Prometheus 了。


在 K8s 集群上安装 Prometheus Helm Chart


要在 K8s 集群上安装 Prometheus Helm Chart,请运行以下helm install命令:


helm install prometheus prometheus-community/prometheus
复制代码


输出结果:


NAME: my-prometheusLAST DEPLOYED: Thu Oct 12 20:06:57 2023NAMESPACE: monitoringSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:my-prometheus-server.monitoring.svc.cluster.local

Get the Prometheus server URL by running these commands in the same shell: export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=prometheus,app.kubernetes.io/instance=my-prometheus" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace monitoring port-forward $POD_NAME 9090

The Prometheus alertmanager can be accessed via port 9093 on the following DNS name from within your cluster:my-prometheus-alertmanager.monitoring.svc.cluster.local

Get the Alertmanager URL by running these commands in the same shell: export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=alertmanager,app.kubernetes.io/instance=my-prometheus" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace monitoring port-forward $POD_NAME 9093####################################################################################### WARNING: Pod Security Policy has been disabled by default since ########### it deprecated after k8s 1.25+. use ########### (index .Values "prometheus-node-exporter" "rbac" ########### . "pspEnabled") with (index .Values ########### "prometheus-node-exporter" "rbac" "pspAnnotations") ########### in case you still need it. ######################################################################################

The Prometheus PushGateway can be accessed via port 9091 on the following DNS name from within your cluster:my-prometheus-prometheus-pushgateway.monitoring.svc.cluster.local

Get the PushGateway URL by running these commands in the same shell: export POD_NAME=$(kubectl get pods --namespace monitoring -l "app=prometheus-pushgateway,component=pushgateway" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace monitoring port-forward $POD_NAME 9091
For more information on running Prometheus, visit:https://prometheus.io/
复制代码


现在我们已经在 Kubernetes 集群上安装了 Prometheus。我们可以通过 80 端口访问 Prometheus 服务器。下一步是查看部署的 Kubernetes 资源,也就是 Helm Chart 在 Kubernetes 集群中创建的 Pod 和服务。


要查看已部署的 Kubernetes 资源,请运行以下kubectl命令:


kubectl get all
复制代码


输出结果:


NAME                                                        READY   STATUS    RESTARTS   AGEpod/my-prometheus-prometheus-node-exporter-d5l8m            1/1     Running   0          27mpod/my-prometheus-prometheus-node-exporter-kfbxb            1/1     Running   0          27mpod/my-prometheus-prometheus-pushgateway-86d6f795cb-mlb7d   1/1     Running   0          27mpod/my-prometheus-kube-state-metrics-6c4b65c7b9-wbh9r       1/1     Running   0          27mpod/my-prometheus-prometheus-node-exporter-2z7rp            1/1     Running   0          27mpod/my-prometheus-alertmanager-0                            1/1     Running   0          27mpod/my-prometheus-server-795d8fc685-zcfct                   2/2     Running   0          27m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/my-prometheus-alertmanager-headless ClusterIP None <none> 9093/TCP 27mservice/my-prometheus-server ClusterIP 10.43.186.10 <none> 80/TCP 27mservice/my-prometheus-prometheus-pushgateway ClusterIP 10.43.154.83 <none> 9091/TCP 27mservice/my-prometheus-alertmanager ClusterIP 10.43.217.41 <none> 9093/TCP 27mservice/my-prometheus-kube-state-metrics ClusterIP 10.43.168.65 <none> 8080/TCP 27mservice/my-prometheus-prometheus-node-exporter ClusterIP 10.43.195.241 <none> 9100/TCP 27m
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEdaemonset.apps/my-prometheus-prometheus-node-exporter 3 3 3 3 3 kubernetes.io/os=linux 27m
NAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/my-prometheus-prometheus-pushgateway 1/1 1 1 27mdeployment.apps/my-prometheus-kube-state-metrics 1/1 1 1 27mdeployment.apps/my-prometheus-server 1/1 1 1 27m
NAME DESIRED CURRENT READY AGEreplicaset.apps/my-prometheus-prometheus-pushgateway-86d6f795cb 1 1 1 27mreplicaset.apps/my-prometheus-kube-state-metrics-6c4b65c7b9 1 1 1 27mreplicaset.apps/my-prometheus-server-795d8fc685 1 1 1 27m
NAME READY AGEstatefulset.apps/my-prometheus-alertmanager 1/1 27m
复制代码


安装 Helm Chart 会创建以下 Kubernetes 资源:


  • Pod:托管集群内已部署的 Prometheus Kubernetes 应用程序。

  • Replica Sets:Kubernetes 集群内同一应用程序实例的集合。它提高了应用程序的可靠性。

  • Deployments:这是创建应用程序 Pod 的蓝图。

  • Services:这是公开 Kubernetes 集群内运行的 Pod。我们用它来访问已部署的 Kubernetes 应用程序。


下一步是访问并启动 Prometheus Kubernetes 应用程序。这里将使用 Prometheus 的 Kubernetes 服务访问该应用程序。要获取 Prometheus 的所有 Kubernetes 服务,请运行以下命令:


kubectl get service
复制代码


输出结果:



NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEmy-prometheus-alertmanager-headless ClusterIP None <none> 9093/TCP 28mmy-prometheus-server ClusterIP 10.43.186.10 <none> 80/TCP 28mmy-prometheus-prometheus-pushgateway ClusterIP 10.43.154.83 <none> 9091/TCP 28mmy-prometheus-alertmanager ClusterIP 10.43.217.41 <none> 9093/TCP 28mmy-prometheus-kube-state-metrics ClusterIP 10.43.168.65 <none> 8080/TCP 28mmy-prometheus-prometheus-node-exporter ClusterIP 10.43.195.241 <none> 9100/TCP 28m
复制代码


输出结果列出了 Prometheus 的下列 K8s service:


  • prometheus-alertmanager

  • prometheus-alertmanager-headless

  • prometheus-kube-state-metrics

  • prometheus-prometheus-node-exporter

  • prometheus-prometheus-pushgateway

  • prometheus-server


我们将使用 prometheus-server Kubernetes service 来访问 Prometheus 应用程序。prometheus-server 是 ClusterIP 类型。您只能在 Kubernetes 集群内访问它。因此我们需要公开这个 Kubernetes service,以便在 Kubernetes 集群外部访问它。公开prometheus-server Kubernetes service 将生成一个 URL。我们可以在浏览器上加载 URL 并访问正在运行的应用程序。


公开 prometheus-server Kubernetes service


要公开prometheus-server Kubernetes service,请运行以下命令:


kubectl expose service prometheus-server --type=NodePort --target-port=9090 --name=prometheus-server-ext
复制代码


该命令会将ClusterIP类型转换为NodePort类型。这样, prometheus-server就能在 Kubernetes 集群之外通过 9090 端口访问。


现在,我们公开了prometheus-server Kubernetes service。接下来使用以下命令访问 Prometheus 应用程序:


minikube service prometheus-server-ext
复制代码


该命令生成以下 URL:



URL 可能需要稍等一会儿才可用。您需要在浏览器上进行多次重试,直到使用此 URL 访问 Prometheus Kubernetes 应用程序。您还需要保持终端打开并运行命令,以便继续访问服务。



到这里,我们已经成功使用 Helm 在 Kubernetes 上安装了 Prometheus。Prometheus 已经在集群内部运行,我们可以使用浏览器或 URL 来进行访问。

发布于: 13 分钟前阅读数: 5
用户头像

SEAL安全

关注

开发者友好的企业级解决方案 2020-11-05 加入

公众号:Seal软件 Seal-io

评论

发布
暂无评论
如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2_Kubernetes_SEAL安全_InfoQ写作社区