Kubernetes(v1.27.1)安装Prometheus最新版本

隔了这么久来更新一下,算是做个记录

集群为一个Master节点和两个Node节点,安装Prometheus之前需要在集群中安装kube-state-metrics组件

1.什么是kube-state-metrics

        kube-state-metrics通过监听API Server生成有关资源对象的状态指标,比如Deployment、Node、Pod,需要注意的是kube-state-metrics只是简单的提供一个metrics数据,并不会存储这些指标数据,所以我们可以使用Prometheus来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如Deployment、Pod、副本状态等;调度了多少个replicas?现在可用的有几个?多少个Pod是running/stopped/terminated状态?Pod重启了多少次?我有多少job在运行中。

1.2 安装kube-state-metrics组件

(1)创建sa,并对sa授权

[root@k8s-master1 prometheus]# cat kube-state-metrics-rbac.yaml 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-state-metrics
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kube-state-metrics
rules:
- apiGroups: [""]
  resources: ["nodes", "pods", "services", "resourcequotas", "replicationcontrollers", "limitranges", "persistentvolumeclaims", "persistentvolumes", "namespaces", "endpoints"]
  verbs: ["list", "watch"]
- apiGroups: ["extensions"]
  resources: ["daemonsets", "deployments", "replicasets"]
  verbs: ["list", "watch"]
- apiGroups: ["apps"]
  resources: ["statefulsets"]
  verbs: ["list", "watch"]
- apiGroups: ["batch"]
  resources: ["cronjobs", "jobs"]
  verbs: ["list", "watch"]
- apiGroups: ["autoscaling"]
  resources: ["horizontalpodautoscalers"]
  verbs: ["list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kube-state-metrics
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kube-state-metrics
subjects:
- kind: ServiceAccount
  name: kube-state-metrics
  namespace: kube-system
  
[root@k8s-master1 prometheus]# kubectl apply -f kube-state-metrics-rbac.yaml
serviceaccount/kube-state-metrics created
clusterrole.rbac.authorization.k8s.io/kube-state-metrics created
clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created

(2)安装kube-state-metrics组件

[root@k8s-master1 prometheus]# cat kube-state-metrics-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-state-metrics
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kube-state-metrics
  template:
    metadata:
      labels:
        app: kube-state-metrics
    spec:
      serviceAccountName: kube-state-metrics
      containers:
      - name: kube-state-metrics
        image: quay.io/coreos/kube-state-metrics:v1.9.0
        ports:
        - containerPort: 8080
        
[root@k8s-master1 prometheus]# kubectl apply -f kube-state-metrics-deploy.yaml
deployment.apps/kube-state-metrics created

[root@k8s-master1 prometheus]# kubectl get pods -n kube-system -l app=kube-state-metrics
NAME                                  READY   STATUS    RESTARTS   AGE
kube-state-metrics-58d4957bc5-tcbq5   1/1     Running   0          28s

(3)创建service

[root@k8s-master1 prometheus]# cat kube-state-metrics-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  name: kube-state-metrics
  namespace: kube-system
  labels:
    app: kube-state-metrics
spec:
  ports:
  - name: kube-state-metrics
    port: 8080
    protocol: TCP
  selector:
    app: kube-state-metrics
    
[root@k8s-master1 prometheus]# kubectl apply -f kube-state-metrics-svc.yaml
service/kube-state-metrics created

[root@k8s-master1 prometheus]# kubectl get svc -n kube-system 
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns             ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   3d12h
kube-state-metrics   ClusterIP   10.110.15.75     <none>        8080/TCP                 12s
monitoring-grafana   NodePort    10.105.174.145   <none>        80:31715/TCP             11h

2.关于 Prometheus

Prometheus 是一个开源的监控框架。它为 Kubernetes 容器编排平台提供了开箱即用的监控功能。

以下是 Prometheus 中重要的一些概念:

  • 指标收集: Prometheus 使用拉取模型,通过 HTTP来实现检索指标。而对于那些 Prometheus 无法抓取指标的用例,可以选择使用 Pushgateway 将指标推送到 Prometheus 。例如,从 kubernetes jobs & Cronjobs 中收集自定义指标。
  • 指标端点:如果想要使用 Prometheus 来实现监控,那么系统就应该在/metrics端点上公开指标。Prometheus 会使用该端点来定期提取指标。
  • PromQL:在 Prometheus 中附带有一种非常灵活的查询语言——PromQL,它可用于查询 Prometheus 仪表板中的指标。此外,Prometheus UI 和 Grafana 还使用 PromQL 查询来实现指标可视化
  • Prometheus Exporters: Exporters 是一个将来自第三方应用程序的现有指标转换为 Prometheus 指标格式的库。目前已经有许多官方和社区的 Prometheus Exporters。例如Prometheus node exporter。它以 Prometheus 的格式,公开了所有 Linux 系统级的指标。
  • TSDB(时序数据库):Prometheus 使用 TSDB 存储着所有数据。默认情况下,所有数据都存储在本地。但是,也可以选择为 Prometheus TSDB 集成远程存储。

Prometheus 架构:

2.1 在 Kubernetes 上设置 Prometheus 监控

假设已有一个 kubernetes 集群,并且使用 kubectl setup 进行运行。

官方的 docker hub 帐户提供了最新版本 Prometheus 的 docker 镜像 ,下面我们使用该镜像来进行相应设置。

2.2 连接到 Kubernetes 集群

连接到 Kubernetes 集群并确保具有创建集群角色的管理员权限。

仅适用于 GKE:如果使用的是 Google Cloud GKE,那么需要运行以下命令,从而获得 Prometheus 设置创建集群角色的权限。
ACCOUNT=$(gcloud info --format='value(config.account)')
kubectl create clusterrolebinding owner-cluster-admin-binding \
    --clusterrole cluster-admin \
    --user $ACCOUNT

2.3 Prometheus Kubernetes 清单文件

本文中提到的所有配置文件都被托管在 Github 上,可以使用以下命令克隆存储库。

git clone https://github.com/bibinwilson/kubernetes-prometheus

接下来让我们开始进行设置。

2.4 创建命名空间和集群角色

首先,我们将为所有的监控组件创建一个 Kubernetes 命名空间。

如果不创建专用的命名空间,那么所有的 Prometheus kubernetes 部署对象都会部署在默认的命名空间上。

执行以下命令创建一个名为 monitoring 的新命名空间:

kubectl create namespace monitoring

Prometheus 使用 Kubernetes API 从 Nodes、Pods、Deployments 等等中读取所有可用的指标。​​因此,我们需要创建一个包含 read access 所需 API 组的 RBAC 策略,并将该策略绑定到monitoring 命名空间。

步骤 1:创建一个名为 clusterRole.yaml的文件,并复制以下 RBAC 角色。

在下面给出的角色中,可以看到,我们已经往 nodes, services endpoints, pods 和 ingresses 中添加了 getlist以及 watch权限。角色绑定被绑定到监控命名空间。如果有任何要从其他对象中检索指标的用例,则需要将其添加到此集群角色中。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  - nodes/proxy
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups:
  - extensions
  resources:
  - ingresses
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: default
  namespace: monitoring

步骤 2:使用下面的命令创建角色。

kubectl create -f clusterRole.yaml

2.5 创建 Config Map 以外部化 Prometheus 配置

Prometheus 的所有配置都是prometheus.yaml文件的一部分,而 Alertmanager 的所有警报规则都配置在prometheus.rules.

  1. prometheus.yaml:这是主要的 Prometheus 配置,包含所有抓取配置、服务发现详细信息、存储位置、数据保留配置等
  2. prometheus.rules:此文件包含所有 Prometheus 警报规则

通过将 Prometheus 配置外部化到 Kubernetes 的 config map,那么就无需当需要添加或删除配置时,再来构建 Prometheus 镜像。这里需要更新配置映射并重新启动 Prometheus pod 以应用新配置。

带有所有Prometheus 抓取配置和警报规则的 config map 被挂载到 Prometheus 容器的prometheus.yaml 和 prometheus.rules 文件中,这些文件位于 /etc/prometheus

第 1 步:创建一个名为conf ig -map.yaml的文件,并在下面的链接中复制文件内容

Prometheus Config File

第 2 步:执行以下命令在 Kubernetes 中创建 config map 。

kubectl create -f config-map.yaml

它在容器内创建两个文件。

注意:在 Prometheus 的术语中,从端点集合收集指标的配置称为 job.

prometheus.yaml包含了用以发现动态运行在 Kubernetes集群的 pods 和 services 的所有配置。

Prometheus 抓取配置中有以下scrape jobs

  1. kubernetes-apiservers:它从 API 服务器获取所有指标。
  2. kubernetes-nodes:它收集所有 Kubernetes 节点指标。
  3. kubernetes-pods:如果 pod 元数据用prometheus.io/scrape prometheus.io/port来注释,那么所有的 pod 都得以发现。
  4. kubernetes-cadvisor:收集所有 cAdvisor 指标。
  5. kubernetes-service-endpoints:如果服务元数据使用 prometheus.io/scrape 和 prometheus.io/port 注释来进行注释,那么所有服务端点都将被报废。它可以用于黑盒监控。

prometheus.rules 包含用于向 Alertmanager 发送警报的所有警报规则。

2.6 创建 Prometheus 部署

步骤1:创建一个名为prometheus-deployment.yaml的文件,并将以下内容复制到文件中。在此配置中,我们将 Prometheus 的 config map 作为文件安装在/etc/prometheu中。

注意:这里没有为 Prometheus 存储使用任何持久存储卷,因为它是一个基本设置。在为生产用例设置 Prometheus 时,需要确保将持久存储添加到部署中。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-deployment
  namespace: monitoring
  labels:
    app: prometheus-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus-server
  template:
    metadata:
      labels:
        app: prometheus-server
    spec:
      containers:
        - name: prometheus
          image: prom/prometheus
          args:
            - "--storage.tsdb.retention.time=12h"
            - "--config.file=/etc/prometheus/prometheus.yml"
            - "--storage.tsdb.path=/prometheus/"
          ports:
            - containerPort: 9090
          resources:
            requests:
              cpu: 500m
              memory: 500M
            limits:
              cpu: 1
              memory: 1Gi
          volumeMounts:
            - name: prometheus-config-volume
              mountPath: /etc/prometheus/
            - name: prometheus-storage-volume
              mountPath: /prometheus/
      volumes:
        - name: prometheus-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-server-conf
  
        - name: prometheus-storage-volume
        

第 2 步:使用上述文件在监控命名空间上创建部署。

kubectl create  -f prometheus-deployment.yaml 

第 3 步:使用以下命令检查创建的部署。

kubectl get deployments --namespace=monitoring

2.7 连接到 Prometheus 仪表板

将 Prometheus 公开为服务 [NodePort & LoadBalancer]

要通过IPDNS名称访问 Prometheus 仪表板,就需要将其公开为 Kubernetes 服务。

步骤1:创建一个名为prometheus-service.yaml的文件,并复制以下内容。我们将在 port 30000 上的所有 kubernetes 节点 IP 上公开 Prometheus 。

注意:如果是在 AWS、Azure 或 Google Cloud 上,则可以使用 Loadbalancer 类型,这将创建一个负载均衡器并自动将其指向 Kubernetes 服务端点。
apiVersion: v1
kind: Service
metadata:
  name: prometheus-service
  namespace: monitoring
  annotations:
      prometheus.io/scrape: 'true'
      prometheus.io/port:   '9090'
spec:
  selector: 
    app: prometheus-server
  type: NodePort  
  ports:
    - port: 8080
      targetPort: 9090 
      nodePort: 30000

上述 YAML 服务的 annotations 确保服务端点由 prometheus 废弃。

prometheus.io/port应始终是上述 YAML 服务的目标端口

第 2 步:使用以下命令创建服务。

kubectl create -f prometheus-service.yaml --namespace=monitoring

第 3 步:创建后,就可以使用端口 30000 上的任何 Kubernetes 节点 IP 访问 Prometheus 仪表板。如果是在云上,就需要确保有正确的防火墙规则来从工作站访问端口 30000。

3.设置 Grafana

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在 CentOS 上安装新版本Prometheus,可以按照以下步骤进行操作: 1. 打开终端,以 root 用户身份登录服务器。 2. 下载 Prometheus 的最新版本压缩包。您可以在 Prometheus 的官方网站(https://prometheus.io/download/)上找到最新版本的下载链接。选择适合您服务器架构的压缩包,比如选择 Linux/amd64 架构的版本。 3. 在终端中使用 wget 命令下载压缩包。例如,使用以下命令下载 Prometheus v2.30.0 版本: ``` wget https://github.com/prometheus/prometheus/releases/download/v2.30.0/prometheus-2.30.0.linux-amd64.tar.gz ``` 4. 解压下载的压缩包。使用以下命令解压: ``` tar -xvf prometheus-2.30.0.linux-amd64.tar.gz ``` 5. 进入解压后的目录: ``` cd prometheus-2.30.0.linux-amd64 ``` 6. 您可以选择将 Prometheus 的二进制文件复制到系统的某个目录中,以便全局访问。例如,将 Prometheus 复制到 /usr/local/bin 目录中: ``` cp prometheus /usr/local/bin/ cp promtool /usr/local/bin/ ``` 7. 创建一个配置文件 prometheus.yml。您可以使用示例配置文件作为起点,并根据您的需求进行自定义: ``` cp -r examples/simple.yml /etc/prometheus/prometheus.yml ``` 8. 为 Prometheus 创建一个系统服务。创建一个名为 prometheus.service 的文件,内容如下: ``` [Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries [Install] WantedBy=default.target ``` 9. 将 prometheus.service 文件移动到 /etc/systemd/system 目录中: ``` mv prometheus.service /etc/systemd/system/ ``` 10. 启动 Prometheus 服务: ``` systemctl start prometheus ``` 11. 设置 Prometheus 服务开机自启动: ``` systemctl enable prometheus ``` 现在,您已经成功安装并启动了最新版本Prometheus。您可以通过访问服务器的 IP 地址或域名加上默认的端口号(9090)来访问 Prometheus 的 Web 界面。例如,http://your-server-ip:9090。 希望这对您有所帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值