在第 1 部分中,我们了解了 Prometheus 和 Grafana 是什么,以及使用这些工具的先决条件和好处。 在本节中,你将继续学习如何安装 Helm 以及如何使用 Prometheus Helm 图表。
Artifacthub 为 Helm Chart 提供公共和私有存储库。 我们将使用这些 helm 图表在 kubernetes 集群中设置 Pod 和服务。
Helm 社区为各种 Kubernetes 应用程序创建、管理和维护 Helm 图表,并且这些资源会经常更新。 Helm Chart 可重复使用且易于安装。 要使用 Helm 在 Kubernetes 上集成 Prometheus 和 Grafana,让我们从安装 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 文档指南
下图显示了在 Windows 计算机上安装 Helm 的过程
若要获取所有 helm 命令,请运行以下命令:
helm命令输出:
the kubernetes package managercommon 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 chartsusage: helm [command]**ailable 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 informationuse "helm [command] -help" for more information about a command.最常用的 helm 命令是。
Helm 搜索:在 ArtifactHub 存储库中搜索 Helm 图表。
helm pull:从 ArtifactHub 存储库中提取和 helm 图表。
Helm 安装:上传 Helm Chart 并将其部署到 Kubernetes 集群。
Helm List:列出 Kubernetes 集群中部署的所有 Helm Chart。
首先,我们将搜索 Prometheus Helm 图表。 要搜索 Prometheus Helm,请运行以下命令:
helm search hub prometheus该命令列出了以下 Prometheus Helm 图表:
url chart version app version description v2.47.0 prometheus is a monitoring system and time seri...2.47.1 kube-prometheus-stack collects kubernetes manif...1.1 this is a helm chart for prometheus setup. 2.22.1 prometheus is a monitoring system and time seri...v2.47.0 prometheus is a monitoring system and time seri...v2.47.0 prometheus is a monitoring system and time seri...2.40.0 prometheus collects and stores its metrics as t...v2.47.0 prometheus helm chart for kubernetes prometheus instance created by the coreos prome...您也可以前往 ArtifactHub 存储库(并搜索官方的 Prometheus Helm 图表,如下图所示:
列表中的第一个是官方的 Prometheus Helm 图表。 若要获取此 helm 图表,请运行以下命令:
helm repo add prometheus-community repo update输出:
"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,请执行以下命令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.localget 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="") kubectl --namespace monitoring port-forward $pod_name 9090the prometheus alertmanager can be accessed via port 9093 on the following dns name from within your cluster:my-prometheus-alertmanager.monitoring.svc.cluster.localget 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="") 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.localget 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="") kubectl --namespace monitoring port-forward $pod_name 9091for more information on running prometheus, visit:现在我们已经在 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 27mname type cluster-ip external-ip port(s) ageservice/my-prometheus-alertmanager-headless clusterip none 9093/tcp 27mservice/my-prometheus-server clusterip 10.43.186.10 80/tcp 27mservice/my-prometheus-prometheus-pushgateway clusterip 10.43.154.83 9091/tcp 27mservice/my-prometheus-alertmanager clusterip 10.43.217.41 9093/tcp 27mservice/my-prometheus-kube-state-metrics clusterip 10.43.168.65 8080/tcp 27mservice/my-prometheus-prometheus-node-exporter clusterip 10.43.195.241 9100/tcp 27mname desired current ready up-to-date **ailable node selector agedaemonset.apps/my-prometheus-prometheus-node-exporter 3 3 3 3 3 kubernetes.io/os=linux 27mname ready up-to-date **ailable 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 27mname 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 27mname 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 9093/tcp 28mmy-prometheus-server clusterip 10.43.186.10 80/tcp 28mmy-prometheus-prometheus-pushgateway clusterip 10.43.154.83 9091/tcp 28mmy-prometheus-alertmanager clusterip 10.43.217.41 9093/tcp 28mmy-prometheus-kube-state-metrics clusterip 10.43.168.65 8080/tcp 28mmy-prometheus-prometheus-node-exporter clusterip 10.43.195.241 9100/tcp 28m输出列出了 Prometheus 的以下 K8S 服务
prometheus-alertmanager
prometheus-alertmanager-headless
prometheus-kube-state-metrics
prometheus-prometheus-node-exporter
prometheus-prometheus-pushgateway
prometheus-server
我们将使用prometheus-server
Kubernetes 服务来访问 Prometheus 应用程序。 prometheus-server
的类型为 clusterip。 您只能在 Kubernetes 集群中访问它。 因此,我们需要公开这个 kubernetes 服务,以便可以在 kubernetes 集群之外访问它。 公共prometheus-server
Kubernetes 服务将生成一个 URL。 我们可以在浏览器上加载 URL 并访问正在运行的应用程序。
公开prometheus-server
Kubernetes 服务,运行以下命令:
kubectl expose service prometheus-server --type=nodeport --target-port=9090 --name=prometheus-server-ext该命令将
clusterip
键入为nodeport
类型。 这样,prometheus-server
它可以通过端口 9090 在 Kubernetes 集群外部访问。
现在,我们在那里prometheus-server
kubernetes service。接下来,使用以下命令访问 Prometheus 应用程序:
minikube service prometheus-server-ext该命令生成以下 URL:
URL 可能需要等待一段时间才能使用。 您需要在浏览器上执行多次重试,直到使用此 URL 访问 Prometheus Kubernetes 应用程序。 您还需要保持终端打开并运行命令,以便继续访问该服务。
至此,我们已经使用 Helm 在 Kubernetes 上成功安装了 Prometheus。 Prometheus 已经在集群内运行,我们可以使用浏览器或 URL 访问它。