一、安装方式介绍¶
Prometheus 可以以多种方式进行安装和部署,适应不同的需求和环境。以下是一些常见的 Prometheus 安装方式(更多信息请参考Prometheus官网):
-
二进制文件安装: 这是最简单和最直接的安装方式。你可以从 Prometheus 官方网站下载预编译的二进制文件,并解压缩到所需的目录中。然后通过命令行运行 Prometheus Server,即可启动 Prometheus。
-
Docker 容器: 如果你使用 Docker,可以通过 Docker Hub 上的 Prometheus 镜像来运行 Prometheus。运行 Prometheus 容器可以快速启动一个独立的 Prometheus 实例,并使用宿主机或 Docker 网络中的其他容器进行数据采集。
-
Helm 安装: 使用 Helm Chart 可以方便地在 Kubernetes 中部署 Prometheus。Helm 是 Kubernetes 的包管理工具,提供了预定义的配置选项,使得 Prometheus 的安装和配置变得简单和灵活。
-
操作系统包管理器: 某些操作系统(如 Linux 发行版)提供 Prometheus 的预打包软件包。你可以使用操作系统的包管理器(如 APT、YUM、brew 等)来安装 Prometheus,这样会自动处理依赖关系和更新。
-
Kubernetes Operator: Prometheus Operator 是一个用于 Kubernetes 的自定义控制器,它可以自动管理 Prometheus 和 Grafana 的部署和配置。通过 Prometheus Operator,可以将 Prometheus 和 Grafana 资源视为 Kubernetes 资源,从而更加方便地在 Kubernetes 中管理。
-
云平台集成: 一些云平台(如 Google Cloud Platform、Amazon Web Services 等)提供了 Prometheus 的托管服务或集成支持。
- kube-prometheus stack:kube-prometheus stack是一组针对Kubernetes集群进行监控和告警的工具集合。它使用Kubernetes原生方式搭建,为Kubernetes集群和其中运行的应用程序提供全面的监控和可观察性。
这里我们主要介绍如何在k8s集群中安装Prometheus,而将Prometheus安装到Kubernetes集群也有很多方式,比如Helm、Operator等。Prometheus官方开源了一个kube-prometheus项目,该项目不仅仅是用来安装Prometheus的,也包含很多其他的组件,如下所示:
- Prometheus Operator
- 高可用的Prometheus
- 高可用的Alertmanager
- 主机监控Node Exporter
- Prometheus Adapter
- 容器监控kube-state-metrics
- 图形化展示Grafana
二、开始安装¶
下面主要介绍kube-prometheus stack方式进行安装
打开kube-prometheus项目官网,根据自己环境版本下载kube-prometheus stack

我这里是1.23.17版本,选择release-0.11即可。另外,机器配置要求至少4C4G
[root@k8s-master01 prometheus-operator]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready <none> 130d v1.23.17
k8s-master02 Ready <none> 130d v1.23.17
k8s-master03 Ready <none> 130d v1.23.17
k8s-node01 Ready <none> 130d v1.23.17
k8s-node02 Ready <none> 130d v1.23.17
下面开始正式安装:
1.下载安装包
$ git clone https://github.com/prometheus-operator/kube-prometheus.git
注意:需要替换国外镜像为国内镜像
如果嫌替换麻烦,可以执行以下命令直接下载替换完镜像的文件
$ git clone https://gitee.com/jeckjohn/kube-prometheus.git
2.安装 Prometheus Operator
[root@k8s-master01 ~]# cd /root/kube-prometheus/manifests
[root@k8s-master01 manifests]# kubectl create -f setup/
注意:新版安装时,monitoring命名空间是没有pod,直接继续执行就行
3.安装 Prometheus Stack
[root@k8s-master01 manifests]# kubectl create -f .
安装过程中出现以下报错内容忽略即可
Error from server (AlreadyExists): error when creating "prometheusAdapter-apiService.yaml": apiservices.apiregistration.k8s.io "v1beta1.metrics.k8s.io" already exists
Error from server (AlreadyExists): error when creating "prometheusAdapter-clusterRoleAggregatedMetricsReader.yaml": clusterroles.rbac.authorization.k8s.io "system:aggregated-metrics-reader" already exists
4.查看 Prometheus 容器状态
[root@k8s-master01 manifests]# kubectl get po -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 49m
alertmanager-main-1 2/2 Running 0 49m
alertmanager-main-2 2/2 Running 0 49m
blackbox-exporter-5dfb5455bb-4m6w2 3/3 Running 0 65m
grafana-667fdf56fc-qwvvf 1/1 Running 0 65m
kube-state-metrics-59cb7cb489-8t98x 3/3 Running 0 65m
node-exporter-6bs7t 2/2 Running 0 65m
node-exporter-8nqwg 2/2 Running 0 65m
node-exporter-d9gjv 2/2 Running 0 65m
node-exporter-l8m9p 2/2 Running 0 65m
node-exporter-wqdt2 2/2 Running 0 65m
prometheus-adapter-9444699f8-sstm6 1/1 Running 0 58m
prometheus-adapter-9444699f8-vtw6r 1/1 Running 0 58m
prometheus-k8s-0 2/2 Running 0 49m
prometheus-k8s-1 2/2 Running 0 49m
prometheus-operator-7747d44f67-t8q5c 2/2 Running 0 65m
5.将 Grafana 的 Service 改成 NodePort 类型
[root@k8s-master01 manifests]# kubectl edit svc grafana -n monitoring
...
...
type: NodePort
...
...

查看grafana对外服务端口号为30428
[root@k8s-master01 manifests]# kubectl get svc grafana -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana NodePort 10.0.14.56 <none> 3000:30428/TCP 63m
6.通过任意一个安装了 kube-proxy 服务的节点 IP+30428端口即可访问到 Grafana,这里以192.168.1.31:30428为例,账号和密码都为admin。

依次点击【Home】-【Dashboards】-【Default】-【Node Exporter/Nodes】,查看节点相关指标


7.将 Prometheus 的 Service 改成 NodePort 类型
[root@k8s-master01 manifests]# kubectl edit svc prometheus-k8s -n monitoring
...
...
type: NodePort
...
...

查看prometheus-k8s对外服务端口号为30186
[root@k8s-master01 manifests]# kubectl get svc prometheus-k8s -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-k8s NodePort 10.0.110.215 <none> 9090:30186/TCP,8080:31400/TCP 80m
8.通过任意一个安装了 kube-proxy 服务的节点 IP+30186 端口即可访问到 Prometheus,这里以 192.168.1.31:30186 为例,默认没有账号密码。
