在 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
提示:如果遇到问题,可以查看 Helm 官方文档指南 https://helm.sh/docs/intro/install/。
下图显示了 Helm 在 Windows 机器上的安装情况:
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命令:
输出结果:
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 服务,请运行以下命令:
输出结果:
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 来进行访问。
评论