一,安装metrics-server
metrics-server 通过 kube-apiserver 发现所有节点,然后调用 kubelet APIs(通过 https 接口)获得各节点(Node)和 Pod 的 CPU、Memory 等资源使用情况。
从 Kubernetes 1.12 开始,kubernetes 的安装脚本移除了 Heapster,从 1.13 开始完全移除了对 Heapster 的支持,Heapster 不再被维护。
替代方案如下:
- 用于支持自动扩缩容的 CPU/memory HPA metrics:metrics-server;
- 通用的监控方案:使用第三方可以获取 Prometheus 格式监控指标的监控系统,如 Prometheus Operator;
- 事件传输:使用第三方工具来传输、归档 kubernetes events;
Kubernetes Dashboard 还不支持 metrics-server(PR:#3504),如果使用 metrics-server 替代 Heapster,将无法在 dashboard 中以图形展示 Pod 的内存和 CPU 情况,需要通过 Prometheus、Grafana 等监控方案来弥补
二,更改配置
#进入package目录
cd /opt/kubernetes/package/
#从github克隆metrics-server源码
git clone https://github.com/kubernetes-incubator/metrics-server.git
#进入metrics-server目录
cd /opt/kubernetes/package/metrics-server/deploy/1.8+/
#更换拉取的镜像地址
sed -i 's#k8s.gcr.io/metrics-server-amd64:v0.3.3#lanvv/metrics-server-amd64:v0.3.3#' metrics-server-deployment.yaml
#增加metrics-server启动参数
sed -i '32a \
args: \
- --kubelet-insecure-tls \
- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP \
- --metric-resolution=30s' metrics-server-deployment.yaml
- --metric-resolution=30s:从 kubelet 采集数据的周期;
- kubelet-insecure-tls: 跳过验证kubelet的ca证书,暂时开启。(不推荐用于生产环境);
- --kubelet-preferred-address-types:优先使用 InternalIP 来访问 kubelet,这样可以避免节点名称没有 DNS 解析记录时,通过节点名称调用节点 kubelet API 失败的情况(未配置时默认的情况);
三,启动 metrics-server服务
#进入metrics-server目录
cd /opt/kubernetes/package/metrics-server/deploy/1.8+/
#创建metrics-server服务
kubectl create -f .
四,查看运行情况
kubectl -n kube-system get pods -l k8s-app=metrics-server
#输出:
NAME READY STATUS RESTARTS AGE
metrics-server-56c5f96cb4-k6twj 1/1 Running 0 50m
kubectl get svc -n kube-system metrics-server
#输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
metrics-server ClusterIP 10.1.55.3 <none> 443/TCP 60m
五,使用 kubectl top 命令查看集群节点资源使用情况
kubectl top nodes
#输出:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
172.27.128.11 127m 6% 1775Mi 46%
172.27.128.12 73m 3% 1289Mi 33%
172.27.128.13 79m 3% 1295Mi 33%
kubectl top pods
#输出:
NAME CPU(cores) MEMORY(bytes)
dnsutils-ds-6dqqw 0m 0Mi
dnsutils-ds-bpxjz 0m 0Mi
dnsutils-ds-g56w8 0m 0Mi
my-nginx-5dd67b97fb-8rfl8 0m 2Mi
my-nginx-5dd67b97fb-js9h7 0m 2Mi
nginx-ds-4g4kx 0m 2Mi
nginx-ds-4zmhg 0m 2Mi
nginx-ds-gq8fc 0m 2Mi