metrics server 用以监控k8s集群中每一个 pod 与 node 的 CPU/Memory 使用状况。另外,正由于它可以监控 CPU/Memory 它也被用做弹性扩容。html
先上两篇官方文档做为参考,强烈建议阅读第二篇前端
这里有一张从第二篇文章中抽出来的监控架构图node
能够直接使用官方写好的配置文件进行部署: kubernetes-incubator/metrics-serverlinux
这里也有一个镜像须要在代理节点下载并使用 rsync 移动到 work node:
k8s.gcr.io/metrics-server-amd64:v0.3.6
。详细方法参照 [](kubectl create -f deploy/1.8+/) 若是采用代理节点下载并移动的方案进行部署,则须要设置 image 的imagePullPolicy: IfNotPresent
git
如下是关于 metrics server 的安装步骤github
$ git clone git@github.com:kubernetes-incubator/metrics-server.git
# 切换至 v0.3.6 版本
$ cd metrics-server && git checkout v0.3.6
# 建立资源,注意在此以前拉取镜像须要设置代理,或者在代理机上准备好并复制过来
# 再要注意,若是使用代理节点下载而且复制的方案进行部署,须要删除 metrics-server-deployment.yaml 中关于 imagePullPolicy 的一行
$ sed -i '/imagePullPolicy: Always/d' deploy/1.8+/metrics-server-deployment.yaml
# 添加两个参数
$ sed -i '/image: k8s.gcr.io/a \ args: [ "--kubelet-insecure-tls", "--kubelet-preferred-address-types=InternalIP"]' deploy/1.8+/metrics-server-deployment.yaml
$ kubectl apply -f deploy/1.8+/
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
# 获取全部 pod,查看 metrc-server 此时处于运行状态
$ kubectl get pods --all-namespaces | grep metrics
kube-system metrics-server-7fbb854b45-zsc5s 1/1 Running 0 64s
复制代码
部署成功后,能够使用 kubectl top nodes
面试
$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
shanyue 114m 5% 2327Mi 63%
shuifeng 32m 1% 2379Mi 15%
复制代码
部署过程有可能出现错误 error: metrics not available yet
,能够参考该 Issueshell
此时能够添加两个参数 --kubelet-insecure-tls
和 --kubelet-preferred-address-types=InternalIP
来避免问题前端工程化
spec:
selector:
matchLabels:
k8s-app: metrics-server
template:
metadata:
name: metrics-server
labels:
k8s-app: metrics-server
spec:
serviceAccountName: metrics-server
volumes:
- name: tmp-dir
emptyDir: {}
containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.6
# 添加两个参数避免此类问题
args: [ "--kubelet-insecure-tls", "--kubelet-preferred-address-types=InternalIP"]
volumeMounts:
- name: tmp-dir
mountPath: /tmp
复制代码
能够直接使用 sed
命令直接修改文件,关于 sed 能够参考 sed 命令详解api
# -i 表明直接替换文件
# a 表明下一行插入 (i 表明上一行插入)
$ sed -i '/image: k8s.gcr.io/a \ args: [ "--kubelet-insecure-tls", "--kubelet-preferred-address-types=InternalIP"]' deploy/1.8+/metrics-server-deployment.yaml
复制代码
我是山月,你能够添加我微信 shanyue94 与我交流