8s组件本身提供组件自身运行的监控指标以及容器相关的监控指标。通过cAdvisor 是一个开源的分析容器资源使用率和性能特性的代理工具,集成到 Kubelet中,当Kubelet启动时会同时启动cAdvisor,且一个cAdvisor只监控一个Node节点的信息。cAdvisor 自动查找所有在其所在节点上的容器,自动采集 CPU、内存、文件系统和网络使用的统计信息。cAdvisor 通过它所在节点机的 Root 容器,采集并分析该节点机的全面使用情况。
当然kubelet也会输出一些监控指标数据,因此pod的监控数据有kubelet和cadvisor,监控url分别为
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
根据需求配置自己想要的信息图像展