从Kubernetes 1.8
开始,资源使用指标(如容器 CPU 和内存使用率)通过Metrics API
在 Kubernetes 中获取, Metrics Server
替代了Heapster
。Metrics Server 实现了Resource Metrics API
,Metrics Server 是集群范围资源使用数据的聚合器。Metrics Server 从每个节点上的 Kubelet 公开的Summary API
中采集指标信息
二进制安装
Metrics Server v0.3.2
版本/opt/kubernetes/ssl
目录下注意: "CN": "system:metrics-server" 一定是这个,因为后面授权时用到这个名称,否则会报禁止匿名访问
$ cat > metrics-server-csr.json <<EOF
{
"CN": "system:metrics-server",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "system"
}
]
}
EOF
cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem -ca-key=/opt/kubernetes/ssl/ca-key.pem -config=/opt/kubernetes/ssl/ca-config.json -profile=kubernetes metrics-server-csr.json | cfssljson -bare metrics-server
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file=/opt/kubernetes/ssl/metrics-server.pem \
--proxy-client-key-file=/opt/kubernetes/ssl/metrics-server-key.pem \
--runtime-config=api/all=true \
--requestheader-XXX、--proxy-client-XXX 是 kube-apiserver 的 aggregator layer 相关的配置参数,metrics-server & HPA 需要使用;
--requestheader-client-ca-file:用于签名 --proxy-client-cert-file 和 # --proxy-client-key-file 指定的证书;在启用了 metric aggregator 时使用;
如果 kube-apiserver 机器没有运行 kube-proxy,则还需要添加 --enable-aggregator-routing=true 参数
requestheader-client-ca-file 指定的 CA 证书,必须具有 client auth and server auth
# 添加如下配置参数:
--horizontal-pod-autoscaler-use-rest-clients=true
# 用于配置 HPA 控制器使用 REST 客户端获取 metrics 数据
$ systemctl restart kube-apiserver
$ systemctl restart kube-controller-manager
$ git clone https://github.com/kubernetes-incubator/metrics-server
$ cd metrics-server/deploy/1.8+
$ vim metrics-server-deployment.yaml
# 修改如下参数,镜像使用我个人dockerhub镜像
- name: metrics-server
image: yangpeng2468/metrics-server-amd64:v0.3.2
imagePullPolicy: IfNotPresent
command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
注释:
1、metrics默认使用hostname来通信的,而且coredns中已经添加了宿主机的/etc/resolv.conf,所以只需要添加一个内部的dns服务器或者在pod的deployment的yaml手动添加主机解析记录,再或者改变参数为InternalIP,直接用ip来连接
2、kubelet-insecure-tls: 跳过验证kubelet的ca证书,暂时开启。(不推荐用于生产环境)
$ cd metrics-server/deploy/1.8+
$ kubectl apply -f .
$ kubectl get pods -n kube-system | grep metrics
# 查看node监控
$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
test1 377m 18% 5915Mi 76%
test2 267m 13% 5479Mi 70%
注意:内存单位 Mi=1024*1024字节 M=1000*1000字节
CPU单位 1核=1000m 即250m=1/4核
# 查看所有pod监控
$ kubectl top pod --all-namespaces
欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native