一、安装方式介绍

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

Prometheus高可用安装-1

我这里是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
...
...

Prometheus高可用安装-2

查看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。

Prometheus高可用安装-3

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

Prometheus高可用安装-4-1

Prometheus高可用安装-4-2

7.将 Prometheus 的 Service 改成 NodePort 类型

[root@k8s-master01 manifests]# kubectl edit svc prometheus-k8s -n monitoring
...
...
  type: NodePort
...
...

Prometheus高可用安装-5

查看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 为例,默认没有账号密码。

Prometheus高可用安装-6