prometheus监控k8s集群信息(通过kubelet)

prometheus监控k8s集群信息(通过kubelet)

一、创建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、通过yaml文件创建

kubectl apply -f prometheus-sa.yaml
kubectl apply -f prometheus-cr.yaml
kubectl apply -f prometheus-crb.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_(.+)
#以下为通过apiserver来获取k8s集群的信息 # - job_name: 'k8s-apiservers' # kubernetes_sd_configs: # - role: endpoints # api_server: https://xxx.xxx.xxx.xxx:6443 # tls_config: # insecure_skip_verify: true # bearer_token_file: /usr/local/prometheus/cert/token # scheme: https # tls_config: # ca_file: /usr/local/prometheus/cert/ca.crt # insecure_skip_verify: true # bearer_token_file: /usr/local/prometheus/cert/token # relabel_configs: # - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] # action: keep # regex: default;kubernetes;https

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

 

  2、重新加载prometheus配置。

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

 

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

 

四、配置grafana

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

 

posted @ 2023-12-15 16:48  难止汗  阅读(333)  评论(0编辑  收藏  举报