k8s metrics-server 轻量化监控

metrics-server 是用来取代heapster,负责从kubelet中采集数据, 并通过Metrics API在Kubernetes Apiserver中暴露它们。

metrics-server 采集node 和pod 的cpu/mem,数据存在容器本地,不做持久化。这些数据的使用场景有 kubectl top 和scheduler 调度、hpa 弹性伸缩,以及原生的dashboard 监控数据展示。

metrics-server 和prometheus 没有半毛钱关系。 也没有任何数据或者接口互相依赖关系。

prometheus 能力更强,也更重,拥有更多的监控指标以及自定义监控指标,可以配合grafana 面板更好的展示数据,配合alertmanager 实现告警。介绍见之前内容
https://github.com/cai11745/k8s-ocp-yaml/blob/master/prometheus/2019-10-22-prometheus-1-install-and-metricsIngress.md

metrics-server 指标少,但是更轻量,适用于简单场景的容器与节点数据监控。

安装 metrics-server

官网 https://github.com/kubernetes-sigs/metrics-server

修改下镜像地址,默认的k8s.grc.io 国内拉取不到,换成阿里云
registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6

[root@master ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml        
[root@master ~]# vim components.yaml 
# 修改image
# registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6   
[root@master ~]# kubectl apply -f components.yaml 

使用kubectl top 查看pod 和node 的资源使用情况,获取不到数据

[root@master ~]# kubectl top node        
error: metrics not available yet
[root@master ~]# kubectl top pod
W0414 13:34:35.193688   13720 top_pod.go:266] Metrics not available for pod default/centos-758b7556f5-542wl, age: 299h19m20.193680607s
error: Metrics not available for pod default/centos-758b7556f5-542wl, age: 299h19m20.193680607s

查看metrics-server pod 日志

[root@master ~]# kubectl -n kube-system logs metrics-server-58c885686f-nlp25 
...
E0414 05:34:32.752194       1 reststorage.go:135] unable to fetch node metrics for node "node1": no metrics known for node
E0414 05:34:32.752208       1 reststorage.go:135] unable to fetch node metrics for node "master": no metrics known for node
E0414 05:34:35.186237       1 reststorage.go:160] unable to fetch pod metrics for pod default/tomtest-86f7667d85-hxnzl: no metrics known for pod
E0414 05:34:35.186247       1 reststorage.go:160] unable to fetch pod metrics for pod default/centos-758b7556f5-542wl: no metrics known for pod

提示 无法解析节点的主机名,是metrics-server 这个容器不能通过CoreDNS 解析各Node的主机名,metrics-server 连节点时默认是连接节点的主机名,需要加个参数,让它连接节点的IP,而不是使用主机名:
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP

修改yaml 文件,增加这两行

        image: k8s.gcr.io/metrics-server-amd64:v0.3.6
        imagePullPolicy: IfNotPresent
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP

导入文件,过一会就正常了

[root@master ~]# kubectl apply -f components.yaml 

[root@master ~]# kubectl top node                     
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   101m         5%     971Mi           17%       
node1    72m          1%     914Mi           3%        
[root@master ~]# kubectl top pod --all-namespaces
NAMESPACE       NAME                                       CPU(cores)   MEMORY(bytes)   
ingress-nginx   nginx-ingress-controller-c8848f54b-z2fwd   4m           181Mi           
kube-system     calico-kube-controllers-77c4b7448-n92dt    1m           14Mi            
kube-system     calico-node-nqltv                          12m          53Mi            
kube-system     calico-node-rf9gh                          10m          49Mi            
kube-system     coredns-6955765f44-579bp                   2m           13Mi            
kube-system     coredns-6955765f44-7h4vh                   1m           13Mi            
kube-system     etcd-master                                12m          108Mi           
kube-system     kube-apiserver-master                      19m          336Mi           
kube-system     kube-controller-manager-master             5m           42Mi            
kube-system     kube-proxy-24k9w                           1m           22Mi            
kube-system     kube-proxy-w48qf                           1m           17Mi            
kube-system     kube-scheduler-master                      2m           18Mi            
kube-system     metrics-server-6ffdb54684-lg77c            1m           14Mi  

接口测试

metrics-server 将node 和pod 的监控数据通过k8s 标准api 暴露出来。

All endpoints are GET endpoints, rooted at /apis/metrics/v1alpha1/. There won't be support for the other REST methods.

The list of supported endpoints:

/nodes - all node metrics; type []NodeMetrics
/nodes/{node} - metrics for a specified node; type NodeMetrics
/namespaces/{namespace}/pods - all pod metrics within namespace with support for all-namespaces; type []PodMetrics
/namespaces/{namespace}/pods/{pod} - metrics for a specified pod; type PodMetrics
The following query parameters are supported:

labelSelector - restrict the list of returned objects by labels (list endpoints only)

通过kubectl proxy 命令暴露api 端口,默认8080,非加密端口。如果端口被用了就加上-p 参数指定一个端口

kubectl proxy -p 8002

# 再开一个终端,测试访问
[root@master ~]# kubectl api-resources |grep metrics                        
nodes                                          metrics.k8s.io                 false        NodeMetrics
pods                                           metrics.k8s.io                 true         PodMetrics

[root@master ~]# curl 127.0.0.1:8002/ |grep metrics
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4963    0  4963    0     0  4822k      0 --:--:-- --:--:-- --:--:-- 4846k
    "/apis/metrics.k8s.io",
    "/apis/metrics.k8s.io/v1beta1",
    "/metrics",

# 获取所有node    
[root@master ~]# curl 127.0.0.1:8002/apis/metrics.k8s.io/v1beta1/nodes

# 某个pod
[root@master ~]# curl 127.0.0.1:8002/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-apiserver-master
{
  "kind": "PodMetrics",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "name": "kube-apiserver-master",
    "namespace": "kube-system",
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-apiserver-master",
    "creationTimestamp": "2020-04-14T15:25:04Z"
  },
  "timestamp": "2020-04-14T15:24:10Z",
  "window": "30s",
  "containers": [
    {
      "name": "kube-apiserver",
      "usage": {
        "cpu": "19383740n",
        "memory": "344704Ki"
      }
    }
  ]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容