使用cAdvisor监控节点中的容器资源
前言
Kubernetes中监控节点中的容器资源使用情况是通过cAdvisor实现的,这在1.12开始发生了变化,1.12之前kubelet集成了cAdvisor,启动kubelet默认打开4194端口就可以使用cAdvisor。
但是1.12之后这个功能废弃了,kubelet不再集成cAdvisor,需要手动部署。本文K8s版本是1.13,我们使用Daemonset重新部署了cAdvisor服务。
部署cAdvisor
部署方法挺简单的,可以参考cadvisor的github
这个页面有现成的yaml文件,我们只需要cluserrole.yaml、cluserrolebinding.yaml、serviceaccount.yaml、daemonset.yaml几个,daemonset.yaml里面的namespace我改成现有的monitor。
很快就建好daemonset
1 | NAME READY STATUS RESTARTS AGE |
Prometheus配置
如果是从低版本K8s升级过来的,需要在Prometheus中把之前的cadvisor配置段清掉,改成下面的配置
1 | - job_name: 'k8s-pods' |
这段配置意思是通过k8s api访问各个节点的cadvisor,__meta_kubernetes_node_name代表节点hostname,替换下面的/api/v1/nodes/${1}/proxy/metrics/cadvisor里就可以访问cadvisor。
例如:https://kubernetes.default.svc:443/api/v1/nodes/k8s-node1/proxy/metrics/cadvisor
prometheus的配置真的可以很灵活,具体参考它的文档
grafana
因为cadvisor改了,prometheus中获取到的指标也可能变,如果发现grafana中的图表显示出问题就要找一下原因了。
可以到Prometheus的后台用语句实际查一下,一般是条件匹配问题。
或者直接找个新的模板。比如我发现container_cpu_usage_seconds_total中的pod_name就变成了container_label_io_kubernetes_pod_name,这时候要手动改一下,或者找找看有没有新一点点的dashboard下载