Metrics-Server

Kubernetes从1.8版本开始,CPU、内存等资源的metrics信息可以通过 Metrics API来获取,用户可以直接获取这些metrics信息

环境

192.168.48.101 master01
192.168.48.201 node01
192.168.48.202 node02

Metrics API

  1. 通过Metrics API我们可以获取到指定node或者pod的当前资源使用情况,API本身不存储任何信息,所以我们不可能通过API来获取资源的历史使用情况。
  2. Metrics API的获取路径位于:/apis/metrics.k8s.io/
  3. 获取Metrics API的前提条件是metrics server要在K8S集群中成功部署
  4. 更多的metrics资料请参考:<https://github.com/kubernetes/metrics>

Metrics Install

由于官方已经弃用heapster,现metrics-server作为其替代方案,当前最新版本为v0.3.3

官方项目地址

https://github.com/kubernetes-incubator/metrics-server

下载项目

git clone https://github.com/kubernetes-incubator/metrics-server

yaml文件在/root/metrics-server/deploy/1.8+

[root@master01 ~]# cd metrics-server/deploy/1.8+/
[root@master01 1.8+]# ls
aggregated-metrics-reader.yaml  auth-delegator.yaml  auth-reader.yaml  metrics-apiservice.yaml  metrics-server-deployment.yaml  metrics-server-service.yaml  resource-reader.yaml

修改yaml文件,添加参数

vim metrics-server-deployment.yaml- name: metrics-serverimage: k8s.gcr.io/metrics-server-amd64:v0.3.3imagePullPolicy: IfNotPresentargs:- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP- --kubelet-insecure-tls

Metrics镜像

k8s.gcr.io/metrics-server-amd64:v0.3.3

镜像下载

链接: https://pan.baidu.com/s/12d-2XTzw1gwLR52erGQ9hg 提取码: yxan

导入Metrics镜像

docker load -i metrics-0.3.3.tar.gz

创建Metrics

[root@master01 ~]# cd metrics-server/deploy/1.8+/
[root@master01 1.8+]# kubectl apply -f .
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.extensions/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created[root@master01 1.8+]# kubectl get pod -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-fb8b8dccf-jfm2m                 1/1     Running   3          8d
coredns-fb8b8dccf-r8tqp                 1/1     Running   3          8d
etcd-master                             1/1     Running   2          8d
kube-apiserver-master                   1/1     Running   2          8d
kube-controller-manager-master          1/1     Running   2          8d
kube-flannel-ds-amd64-26xjf             1/1     Running   3          8d
kube-flannel-ds-amd64-82s7n             1/1     Running   3          8d
kube-flannel-ds-amd64-sd2j9             1/1     Running   3          8d
kube-proxy-792hk                        1/1     Running   2          8d
kube-proxy-88cgt                        1/1     Running   3          8d
kube-proxy-frgtq                        1/1     Running   2          8d
kube-scheduler-master                   1/1     Running   2          8d
kubernetes-dashboard-5f7b999d65-9v5f9   1/1     Running   0          46m
metrics-server-c9f69c698-c7zl9          1/1     Running   0          5s

验收

部署成功后,达到如下结果,则为正常:

[root@master01 ~]# kubectl top nodes
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
master   86m          4%     963Mi           25%
node01   26m          1%     522Mi           13%
node02   21m          1%     503Mi           13%       [root@master01 ~]# kubectl top pods --all-namespaces
NAMESPACE     NAME                                    CPU(cores)   MEMORY(bytes)
default       demo-deploy-8675c97685-vhncn            0m           2Mi
default       demo-deploy-8675c97685-w7md2            0m           2Mi
default       demo-pod                                0m           4Mi
kube-system   coredns-fb8b8dccf-jfm2m                 2m           13Mi
kube-system   coredns-fb8b8dccf-r8tqp                 2m           13Mi
kube-system   etcd-master                             13m          71Mi
kube-system   kube-apiserver-master                   18m          297Mi
kube-system   kube-controller-manager-master          9m           50Mi
kube-system   kube-flannel-ds-amd64-26xjf             2m           12Mi
kube-system   kube-flannel-ds-amd64-82s7n             2m           17Mi
kube-system   kube-flannel-ds-amd64-sd2j9             2m           18Mi
kube-system   kube-proxy-792hk                        1m           17Mi
kube-system   kube-proxy-88cgt                        1m           19Mi
kube-system   kube-proxy-frgtq                        1m           16Mi
kube-system   kube-scheduler-master                   1m           15Mi
kube-system   kubernetes-dashboard-5f7b999d65-9v5f9   1m           11Mi
kube-system   metrics-server-c9f69c698-c7zl9          1m           13Mi            

Heapster

目前dashboard插件如果想在界面上显示资源使用率,它还依赖于heapster;另外,测试发现k8s 1.8版本的kubectl top也依赖heapster,因此建议补充安装heapster,无需安装influxdbgrafana

准备heapster.yaml

vim heapster.yaml---
apiVersion: v1
kind: ServiceAccount
metadata:name: heapsternamespace: kube-system
---apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: heapster
subjects:- kind: ServiceAccountname: heapsternamespace: kube-system
roleRef:kind: ClusterRolename: system:heapsterapiGroup: rbac.authorization.k8s.io
---apiVersion: apps/v1beta1
kind: Deployment
metadata:name: heapsternamespace: kube-system
spec:replicas: 1selector:matchLabels:k8s-app: heapstertemplate:metadata:labels:task: monitoringk8s-app: heapsterspec:serviceAccountName: heapstercontainers:- name: heapsterimage: k8s.gcr.io/heapster-amd64:v1.5.4imagePullPolicy: IfNotPresentcommand:- /heapster#- --source=kubernetes:https://kubernetes.default- --source=kubernetes.summary_api:''#- --sink=influxdb:http://monitoring-influxdb.kube-system.svc:8086livenessProbe:httpGet:path: /healthzport: 8082scheme: HTTPinitialDelaySeconds: 180timeoutSeconds: 5
---
apiVersion: v1
kind: Service
metadata:labels:task: monitoring# For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)# If you are NOT using this as an addon, you should comment out this line.#kubernetes.io/cluster-service: 'true'kubernetes.io/name: Heapstername: heapsternamespace: kube-system
spec:ports:- port: 80targetPort: 8082selector:k8s-app: heapster

heapster镜像

k8s.gcr.io/heapster-amd64:v1.5.4

镜像下载

链接:https://pan.baidu.com/s/1an-hA1hhsbbIGaLGgPYd-Q 提取码:n0dw

导入heapster镜像

 dockerl load -i heapster-1.5.4.tar.gz

创建heapster

[root@master01 ~]# kubectl apply -f heapster.yaml
serviceaccount/heapster created
clusterrolebinding.rbac.authorization.k8s.io/heapster created
deployment.apps/heapster created
service/heapster created[root@master01 ~]# kubectl get pod -n kube-system -o wide
NAME                                    READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
coredns-fb8b8dccf-jfm2m                 1/1     Running   5          8d    10.244.0.9       master01   <none>           <none>
coredns-fb8b8dccf-r8tqp                 1/1     Running   4          8d    10.244.0.10      master01   <none>           <none>
etcd-master01                             1/1     Running   3          8d    192.168.48.200   master01   <none>           <none>
heapster-587f9c9f8b-rfgsc               1/1     Running   0          76s   10.244.2.7       node02   <none>           <none>
kube-apiserver-master01                   1/1     Running   3          8d    192.168.48.200   master01   <none>           <none>
kube-controller-manager-master01          1/1     Running   3          8d    192.168.48.200   master01   <none>           <none>
kube-flannel-ds-amd64-26xjf             1/1     Running   4          8d    192.168.48.200   master01   <none>           <none>
kube-flannel-ds-amd64-82s7n             1/1     Running   3          8d    192.168.48.201   node01   <none>           <none>
kube-flannel-ds-amd64-sd2j9             1/1     Running   3          8d    192.168.48.202   node02   <none>           <none>
kube-proxy-792hk                        1/1     Running   3          8d    192.168.48.200   master01   <none>           <none>
kube-proxy-88cgt                        1/1     Running   3          8d    192.168.48.201   node01   <none>           <none>
kube-proxy-frgtq                        1/1     Running   2          8d    192.168.48.202   node02   <none>           <none>
kube-scheduler-master                   1/1     Running   3          8d    192.168.48.200   master01   <none>           <none>
kubernetes-dashboard-5f7b999d65-9v5f9   1/1     Running   0          84m   10.244.1.6       node01   <none>           <none>
metrics-server-c9f69c698-c7zl9          1/1     Running   0          38m   10.244.1.7       node01   <none>           <none>

结果发现dashboard并没有生成图形

查看日志

[root@master01 ~]# kubectl logs -n kube-system heapster-587f9c9f8b-rfgsc
I0408 13:00:46.262981       1 heapster.go:78] /heapster --source=kubernetes.summary_api:''
I0408 13:00:46.263011       1 heapster.go:79] Heapster version v1.5.4
I0408 13:00:46.263200       1 configs.go:61] Using Kubernetes client with master "https://10.96.0.1:443" and version v1
I0408 13:00:46.263210       1 configs.go:62] Using kubelet port 10255
I0408 13:00:46.263834       1 heapster.go:202] Starting with Metric Sink
I0408 13:00:46.270800       1 heapster.go:112] Starting heapster on port 8082
E0408 13:01:05.003469       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.200:10255: Get http://192.168.48.200:10255/stats/summary/: dial tcp 192.168.48.200:10255: getsockopt: connection refused
E0408 13:01:05.007752       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.202:10255: Get http://192.168.48.202:10255/stats/summary/: dial tcp 192.168.48.202:10255: getsockopt: connection refused
E0408 13:01:05.022308       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.201:10255: Get http://192.168.48.201:10255/stats/summary/: dial tcp 192.168.48.201:10255: getsockopt: connection refused
W0408 13:01:25.000727       1 manager.go:152] Failed to get all responses in time (got 0/3)
E0408 13:02:05.013965       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.202:10255: Get http://192.168.48.202:10255/stats/summary/: dial tcp 192.168.48.202:10255: getsockopt: connection refused
E0408 13:02:05.016730       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.200:10255: Get http://192.168.48.200:10255/stats/summary/: dial tcp 192.168.48.200:10255: getsockopt: connection refused
E0408 13:02:05.017933       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.201:10255: Get http://192.168.48.201:10255/stats/summary/: dial tcp 192.168.48.201:10255: getsockopt: connection refused
W0408 13:02:25.001764       1 manager.go:152] Failed to get all responses in time (got 0/3)
E0408 13:03:05.008722       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.202:10255: Get http://192.168.48.202:10255/stats/summary/: dial tcp 192.168.48.202:10255: getsockopt: connection refused
E0408 13:03:05.019129       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.201:10255: Get http://192.168.48.201:10255/stats/summary/: dial tcp 192.168.48.201:10255: getsockopt: connection refused
E0408 13:03:05.019318       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.200:10255: Get http://192.168.48.200:10255/stats/summary/: dial tcp 192.168.48.200:10255: getsockopt: connection refused
W0408 13:03:25.001723       1 manager.go:152] Failed to get all responses in time (got 0/3)
E0408 13:04:05.004438       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.200:10255: Get http://192.168.48.200:10255/stats/summary/: dial tcp 192.168.48.200:10255: getsockopt: connection refused
E0408 13:04:05.004837       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.201:10255: Get http://192.168.48.201:10255/stats/summary/: dial tcp 192.168.48.201:10255: getsockopt: connection refused
E0408 13:04:05.017424       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.202:10255: Get http://192.168.48.202:10255/stats/summary/: dial tcp 192.168.48.202:10255: getsockopt: connection refused
W0408 13:04:25.001505       1 manager.go:152] Failed to get all responses in time (got 0/3)
E0408 13:05:05.004518       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.201:10255: Get http://192.168.48.201:10255/stats/summary/: dial tcp 192.168.48.201:10255: getsockopt: connection refused
E0408 13:05:05.006935       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.202:10255: Get http://192.168.48.202:10255/stats/summary/: dial tcp 192.168.48.202:10255: getsockopt: connection refused
E0408 13:05:05.007187       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.200:10255: Get http://192.168.48.200:10255/stats/summary/: dial tcp 192.168.48.200:10255: getsockopt: connection refused
W0408 13:05:25.001816       1 manager.go:152] Failed to get all responses in time (got 0/3)
E0408 13:06:05.009242       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.202:10255: Get http://192.168.48.202:10255/stats/summary/: dial tcp 192.168.48.202:10255: getsockopt: connection refused
E0408 13:06:05.019315       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.201:10255: Get http://192.168.48.201:10255/stats/summary/: dial tcp 192.168.48.201:10255: getsockopt: connection refused
E0408 13:06:05.024390       1 manager.go:101] Error in scraping containers from kubelet_summary:192.168.48.200:10255: Get http://192.168.48.200:10255/stats/summary/: dial tcp 192.168.48.200:10255: getsockopt: connection refused

原因10255端口没开,所有节点都要开启10255端口,添加readOnlyPort: 10255

vim /var/lib/kubelet/config.yaml
.....
port: 10250
readOnlyPort: 10255
registryBurst: 10
registryPullQPS: 5
resolvConf: /etc/resolv.conf

重启kubelet

[root@master01 ~]# systemctl daemon-reload
[root@master01 ~]# systemctl restart kubelet.service
[root@master01 ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:45028         0.0.0.0:*               LISTEN      58103/kubelet
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      58103/kubelet
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      43472/kube-proxy
tcp        0      0 192.168.48.200:2379     0.0.0.0:*               LISTEN      43426/etcd
tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN      43426/etcd
tcp        0      0 192.168.48.200:2380     0.0.0.0:*               LISTEN      43426/etcd
tcp        0      0 127.0.0.1:10257         0.0.0.0:*               LISTEN      43368/kube-controll
tcp        0      0 127.0.0.1:10259         0.0.0.0:*               LISTEN      43343/kube-schedule
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      951/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1034/master
tcp6       0      0 :::30080                :::*                    LISTEN      43472/kube-proxy
tcp6       0      0 :::10250                :::*                    LISTEN      58103/kubelet
tcp6       0      0 :::10251                :::*                    LISTEN      43343/kube-schedule
tcp6       0      0 :::6443                 :::*                    LISTEN      43325/kube-apiserve
tcp6       0      0 :::10252                :::*                    LISTEN      43368/kube-controll
tcp6       0      0 :::10255                :::*                    LISTEN      58103/kubelet
tcp6       0      0 :::10256                :::*                    LISTEN      43472/kube-proxy
tcp6       0      0 :::30001                :::*                    LISTEN      43472/kube-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      951/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1034/master
[root@master ~]# 

重启heapster

[root@master ~]# kubectl delete -f heapster.yaml
serviceaccount "heapster" deleted
clusterrolebinding.rbac.authorization.k8s.io "heapster" deleted
deployment.apps "heapster" deleted
service "heapster" deleted[root@master ~]# kubectl apply -f heapster.yaml
serviceaccount/heapster created
clusterrolebinding.rbac.authorization.k8s.io/heapster created
deployment.apps/heapster created
service/heapster created

验收

经过一段时间收集,图形界面已出

一起来学k8s 07.安装metrics-server和heapster相关推荐

  1. k8s搭建监控:安装metrics server和dashboard

    安装metrics server 参考:https://github.com/kubernetes-sigs/metrics-server kubectl  create -f components. ...

  2. Kubernetes — 安装 Metrics Server

    目录 文章目录 目录 Kubernetes Metrics Server 启用 API Aggregator 安装 Metrics Server Kubernetes Metrics Server K ...

  3. 安装 Metrics server

    安装 Metrics server Metrics Server 是 Kubernetes 内置自动缩放管道的可扩展.高效的容器资源指标来源. Metrics Server 从 Kubelets 收集 ...

  4. 【K8S 七】Metrics Server部署中的问题

    目录 填坑过程 问题一:启动metrics server报证书错误:x509: cannot validate certificate for x.x.x.x because it doesn't c ...

  5. 一起来学k8s 06.安装dashboard

    Dashboard Install Kubernetes Dashboard就是k8s集群的web界面,集合了所有命令行可以操作的所有命令.界面如下所示 环境 192.168.48.101 maste ...

  6. Easypack: Ansible方式部署工具中增加Metrics Server支持

    在Easypack中提供了多套Kubernetes快速部署的工具,基于Bash脚本和Ansible的,Ansible的方式也有基于K3S和普通的Kubernetes的两种.这篇文章介绍一下普通Kube ...

  7. Metrics Server安装以及报错解决

    在查看kubernetes的测试环境中,使用top命令查看Pod的CPU.内存使用过程中,遇到以下问题: $ kubectl top po W0818 03:22:46.090578 26207 to ...

  8. k8s 1.14部署metrics server显示running但是报ServiceUnavailable错误

    k8s 1.14部署metrics server显示running但是报ServiceUnavailable错误 查看metrics server日志: [root@master metrics-se ...

  9. Kubernetes基于Metrics Server的HPA

    Kubernetes基于Metrics Server的HPA [TOC] 1. 环境说明和相关介绍 我的kubernetes环境: kubeadm安装的kubernetes1.11 Horizonta ...

最新文章

  1. python文件读取方法read(size)的含义是_在Python中可使用read([size])来读取文件中的数据,如果参数size省略,则读取文件中的()。...
  2. 《智能家居产品 从设计到运营》——第2章 技术搭台——与智能家居相关的技术...
  3. 网络2011年:网络安全
  4. 每日一算法 ---- 打印九九乘法表
  5. listdir在python3_Python3 os.listdir() 方法
  6. 【声传播】——角谱理论、模式理论及三维傅里叶变换
  7. 一辆特斯拉Model S在比利时充电时起火 充电桩也被烧焦
  8. linux服务器centos空间满的检查及解决方法
  9. Android 开发工程师自述:毕业两年后,我明白的那些事!
  10. 苹果电脑推出MacOSMojave10.14.5支持隔空投放2
  11. Android webview监听网页对话框点击事件
  12. SpringMVC工作原理图
  13. Android 系统(44)---多语言
  14. AI 金融行业案例清单
  15. 大一c语言挂科分数烟台大学,知乎烟大 | 在烟大挂科是一种什么体验
  16. 现货K线图知识之五:北坡炮兵并排跑
  17. 赛灵思 Xilinx Versal 自适应计算加速平台嵌入式设计教程
  18. 常见的图片比例有哪些?App中不同图片比例适用场景
  19. matlab 坐标轴刻度朝外_Matlab 绘图 坐标轴 刻度
  20. 昔日移动GPU王者,从数据中心、汽车等市场全面杀回来——专访Imagination技术创新副总裁Kristof Beets...

热门文章

  1. windows 粘贴功能不可用
  2. resnet50网络结构_识别准确率从76.5%到82.4%的ResNet50系列图像分类模型养成之路
  3. 阿里云付哲:边缘云技术创新 让“云”无处不在
  4. 华洛希立式三角钢琴/HAROCHE给大家一些关于小朋友学琴的建议
  5. Hadoop——shell脚本
  6. 系统平台电商精选化运营与如何选品
  7. 【小方重新学Java】初识Java
  8. 两年前端蚂蚁字节滴滴面试经历总结
  9. 一屋不扫,何以扫天下=====记JAVA基础之解惑篇
  10. Mac电脑看图快捷键