prometheus监控k8s1.24以上版本pod实时数据指标

8s组件本身提供组件自身运行的监控指标以及容器相关的监控指标。通过cAdvisor 是一个开源的分析容器资源使用率和性能特性的代理工具,集成到 Kubelet中,当Kubelet启动时会同时启动cAdvisor,且一个cAdvisor只监控一个Node节点的信息。cAdvisor 自动查找所有在其所在节点上的容器,自动采集 CPU、内存、文件系统和网络使用的统计信息。cAdvisor 通过它所在节点机的 Root 容器,采集并分析该节点机的全面使用情况。

当然kubelet也会输出一些监控指标数据,因此pod的监控数据有kubelet和cadvisor,监控url分别为

https://NodeIP:10250/metrics
https://NodeIP:10250/metrics/cadvisor

prometheus监控k8s集群信息

一、创建prometheus访问k8s权限账户(在k8s集群中操作)。

  1、在k8s集群中创建服务账户  

​
vim prometheus-sa.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus-sa
  namespace: monitor

  2、创建集群角色 

vim prometheus-cr.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  namespace: monitor
  name: prometheus-cr
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - services
  - endpoints
  - pods
  - nodes/proxy
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - "extensions"
  resources:
    - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  - nodes/metrics
  verbs:
  - get
- nonResourceURLs:
  - /metrics
  verbs:
  - get

3、绑定服务账户和集群角色  

vim prometheus-crb.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus-crb
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus-cr
subjects:
- kind: ServiceAccount
  name: prometheus-sa
  namespace: monitor

4.创建secret

k8s1.24之后默认不会为serveiceaccounts创建secret 

vim  prometheus-token.yaml
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: prometheus-token
  namespace: monitor
  annotations:
    kubernetes.io/service-account.name: "prometheus-sa"

  4、通过yaml文件创建

kubectl apply -f prometheus-sa.yaml
kubectl apply -f prometheus-cr.yaml
kubectl apply -f prometheus-crb.yaml
kubectl apply -f prometheus-token.yaml

二、获取prometheus-sa服务账户token信息。

  1、获取查询secrets名称。

kubectl describe sa prometheus-sa -nmonitor

  其中Tokens的值就是secrets的信息。

  2、查看secrets信息,获取token。

kubectl describe secrets prometheus-sa-token-6dprr -nmonitor

  其中token项的值就是prometheus需要用到的token信息,复制到prometheus服务器的一个文件中,这里保存文件为/usr/local/prometheus/cert/token。

三、配置prometheus。

  因为是部署在集群外部的prometheus,需要通过访问apiserver去自动发现kubelet的地址,通过kubelet中集成的/metrics/cadvisor接口来获取信息。

  1、在prometheus配置文件中,新增一个job  

vim /usr/local/prometheus/prometheus.yml

- job_name: 'k8s-kubelet'
    scheme: https
    scrape_interval: 10s
    scrape_timeout: 10s
    tls_config:
      insecure_skip_verify: true                         #跳过证书认证
    bearer_token_file: /usr/local/prometheus/cert/token  #token文件地址
    metrics_path: /metrics/cadvisor                                  
    kubernetes_sd_configs:                               #k8s自发现
    - api_server: https://xxx.xxx.xxx.xxx:6443           #apiserver地址
      role: node                                         #根据node自发现
      tls_config:
        insecure_skip_verify: true                         
      bearer_token_file: /usr/local/prometheus/cert/token
    relabel_configs:                                     # 配置重新设置抓取 kubelet 指标时的目标路径和标签                 
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: metrics/cadvisor
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)

 

  通过kubelet可以获取POD的一些基本的资源使用情况,而apiserver获取的是集群的一些信息,不是特殊情况下使用很少,所以这里只做简单配置。

  2、重新加载prometheus配置。

curl -X POST http://localhost:9090/-/reload

  3、页面查看监控监控状态。

四、配置grafana

  根据需求配置自己想要的信息图像展

Prometheus是一款可以用于监测和告警的开源软件,可以用来监视从Kubernetes(K8s)集群发出的指标。外部Prometheus监控K8s 1.24版本可以通过以下步骤实现: 首先,需要在K8s集群中部署Prometheus Operator。这个操作符会创建一个Prometheus实例,同时会创建ServiceMonitor和PrometheusRule对象,用来自动发现需要监控的资源(Service、Pod、Endpoint等)并配置Prometheus收集这些资源的指标。 然后,在Prometheus的配置文件中指定要监测的K8s集群地址。可以通过kubelet的metrics和API Server的监控端点来收集K8s集群的指标。可以用以下类似的配置: ``` scrape_configs: - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - target_label: __address__ replacement: kubernetes.default.svc:443 - source_labels: [__meta_kubernetes_node_name] target_label: __metrics_path__ replacement: /api/v1/nodes/${1}/proxy/metrics ``` 这个配置会通过kubelet endpoint获取K8s节点的指标信息,并使用`labelmap`将`__meta_kubernetes_node_label_*`标签映射到标准标签上。同时,将`__address__`和`__metrics_path__`设置为指定的节点地址和metrics端口。 最后,在Prometheus实例中添加要监视的规则和警报,可以在PrometheusRule对象中定义这些规则。可以根据需要制定警报规则和处理逻辑,若超过某些阈值则触发报警。可以用以下类似的配置: ``` groups: - name: kubernetes.rules rules: - alert: PodDown expr: absent(kube_pod_info{job="kubelet"}) > 0 for: 5m labels: severity: critical annotations: summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} down" ``` 这个配置可以定义一个警报规则,即如果某个kubelet无法获取Pod指标信息,则视为该Pod已关闭,若该警报持续5分钟以上,则视为触发了警报。可以将其严重程度标记为`critical`,并在`annotations`中制定触发警报时的摘要信息。 以上是外部Prometheus监控K8s 1.24版本实现的部分步骤,具体实现还需要根据具体的情况进行细节调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值