metrics-server安装
资源指标管道
一、介绍
1、旧版本的监控方案
在k8s 1.12版本之前,k8s通常采用 Heapster + cAdvisor + InfluxDB 来监控集群资源数据
Heapster:在k8s集群中获取metrics和事件数据,写入InfluxDB
cAdvisor:对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况
时序数据库,提供数据的存储,存储在指定的目录下。
Heapster将每个Node上的cAdvisor的数据进行汇总,然后导到InfluxDB。
Heapster的前提是使用cAdvisor采集每个node上主机和容器资源的使用情况,
再将所有node上的数据进行聚合。
这样不仅可以看到Kubernetes集群的资源情况,
还可以分别查看每个node/namespace及每个node/namespace下pod的资源情况。
可以从cluster,node,pod的各个层面提供详细的资源使用情况。
2、新版本的监控方案
从 v1.8 开始,资源使用情况的监控可以通过 Metrics API的形式获取,具体的组件为Metrics Server,用来替换之前的heapster,heapster从1.11开始逐渐被废弃。
Metrics-Server是集群核心监控数据的聚合器,从 Kubernetes1.8 开始,它作为一个 Deployment对象默认部署在由kube-up.sh脚本创建的集群中
二、安装步骤
1、下载Metrics-Server相关部署资源
# clone代码
git clone https://github.com/kubernetes-sigs/metrics-server.git
2、修改部署文件
切换到下面目录
cd metrics-server/deploy/kubernetes/
修改metrics-server-deployment.yaml文件如下图所示:

修改如下:
将镜像源 k8s.gcr.io 修改为 registry.cn-hangzhou.aliyuncs.com/google_containers
将镜像卡去策略 imagePullPolicy: Always 修改为 imagePullPolicy: IfNotPresent
将args下添加以下参数
# 从 kubelet 采集数据的周期;
--metric-resolution=30s
# 优先使用 InternalIP 来访问 kubelet,这样可以避免节点名称没有 DNS 解析记录时,通过节点名称调用节点 kubelet API 失败的情况(未配置时默认的情况)
--kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP #
# kubelet 的10250端口使用的是https协议,连接需要验证tls证书。--kubelet-insecure-tls不验证客户端证书
--kubelet-insecure-tls
部署metric-server
kubectl create -f .
验证是否成功
kubectl top nodes
在1.16版本的集群中安装该组件, deployment参考示例
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: metrics-server
namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: metrics-server
namespace: kube-system
labels:
k8s-app: metrics-server
spec:
selector:
matchLabels:
k8s-app: metrics-server
template:
metadata:
name: metrics-server
labels:
k8s-app: metrics-server
spec:
serviceAccountName: metrics-server
volumes:
# mount in tmp so we can safely use from-scratch images and/or read-only containers
- name: tmp-dir
emptyDir: {}
containers:
- name: metrics-server
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
args:
- --cert-dir=/tmp
- --secure-port=4443
- --metric-resolution=30s
- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
- --kubelet-insecure-tls
ports:
- name: main-port
containerPort: 4443
protocol: TCP
securityContext:
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
imagePullPolicy: IfNotPresent
volumeMounts:
- name: tmp-dir
mountPath: /tmp
nodeSelector:
beta.kubernetes.io/os: linux
kubernetes.io/arch: "amd64"
之前在物理机上的集群、vmware虚机上的集群安装该组件均没有问题,不想在openstack上的集群安装时,日志一直报错,无法正常使用

在网上查找该错误,偶然在github的issue下发现对于该问题的解决方案
参考地址:https://github.com/kubernetes-sigs/metrics-server/issues/145

我们集群calico使用的mtu值为1440,官方对于openstack,对于不同网络模式,给了不同的参考值,这里更换为了1430之后,恢复正常。
推测可能是openstack网络路由方面配置的包接受范围小于1440,导致calico在该mtu值下,发送的报文发生了截取,导致了pod运行异常。
网友评论