在 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 DESCRIPTION
- https://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 Kubernetes
- https://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-charts
- helm repo update
复制代码
输出结果:
- "prometheus-community" has been added to your repositories
- Hang 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 repository
- Update Complete. ⎈Happy Helming!⎈
复制代码
现在,我们已经下载好最新版本的 Prometheus 了。
在 K8s 集群上安装 Prometheus Helm Chart
要在 K8s 集群上安装 Prometheus Helm Chart,请运行以下helm install命令:
- helm install prometheus prometheus-community/prometheus
复制代码
输出结果:
- NAME: my-prometheus
- LAST DEPLOYED: Thu Oct 12 20:06:57 2023
- NAMESPACE: monitoring
- STATUS: deployed
- REVISION: 1
- TEST SUITE: None
- NOTES:
- 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 AGE
- pod/my-prometheus-prometheus-node-exporter-d5l8m 1/1 Running 0 27m
- pod/my-prometheus-prometheus-node-exporter-kfbxb 1/1 Running 0 27m
- pod/my-prometheus-prometheus-pushgateway-86d6f795cb-mlb7d 1/1 Running 0 27m
- pod/my-prometheus-kube-state-metrics-6c4b65c7b9-wbh9r 1/1 Running 0 27m
- pod/my-prometheus-prometheus-node-exporter-2z7rp 1/1 Running 0 27m
- pod/my-prometheus-alertmanager-0 1/1 Running 0 27m
- pod/my-prometheus-server-795d8fc685-zcfct 2/2 Running 0 27m
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- service/my-prometheus-alertmanager-headless ClusterIP None <none> 9093/TCP 27m
- service/my-prometheus-server ClusterIP 10.43.186.10 <none> 80/TCP 27m
- service/my-prometheus-prometheus-pushgateway ClusterIP 10.43.154.83 <none> 9091/TCP 27m
- service/my-prometheus-alertmanager ClusterIP 10.43.217.41 <none> 9093/TCP 27m
- service/my-prometheus-kube-state-metrics ClusterIP 10.43.168.65 <none> 8080/TCP 27m
- service/my-prometheus-prometheus-node-exporter ClusterIP 10.43.195.241 <none> 9100/TCP 27m
- NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
- daemonset.apps/my-prometheus-prometheus-node-exporter 3 3 3 3 3 kubernetes.io/os=linux 27m
- NAME READY UP-TO-DATE AVAILABLE AGE
- deployment.apps/my-prometheus-prometheus-pushgateway 1/1 1 1 27m
- deployment.apps/my-prometheus-kube-state-metrics 1/1 1 1 27m
- deployment.apps/my-prometheus-server 1/1 1 1 27m
- NAME DESIRED CURRENT READY AGE
- replicaset.apps/my-prometheus-prometheus-pushgateway-86d6f795cb 1 1 1 27m
- replicaset.apps/my-prometheus-kube-state-metrics-6c4b65c7b9 1 1 1 27m
- replicaset.apps/my-prometheus-server-795d8fc685 1 1 1 27m
- NAME READY AGE
- statefulset.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) AGE
- my-prometheus-alertmanager-headless ClusterIP None <none> 9093/TCP 28m
- my-prometheus-server ClusterIP 10.43.186.10 <none> 80/TCP 28m
- my-prometheus-prometheus-pushgateway ClusterIP 10.43.154.83 <none> 9091/TCP 28m
- my-prometheus-alertmanager ClusterIP 10.43.217.41 <none> 9093/TCP 28m
- my-prometheus-kube-state-metrics ClusterIP 10.43.168.65 <none> 8080/TCP 28m
- my-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 来进行访问。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |