阿里云双十一优惠活动,点击链接进行购买: 一年仅需89元即可以购买服务器~。我个人服务器为2核4G配置,也更加推荐购买 2核4G三年799元 配置的服务器。
你可以跟着我的笔记 当我有一台服务器时,我做了什么 来开始维护服务器并搭建应用,将引导你使用 docker 和 k8s 搭建一个自己的服务器开发集群。

metrics server 用以监控k8s集群中每个 pod 与 node 的 CPU/Memory 使用情况。另外,正因为它能够监控 CPU/Memory 它也被用作弹性扩容。

集群监控情况

# 参考

先上两篇官方文档作为参考,强烈建议阅读第二篇

  1. Resource metrics pipeline (opens new window)
  2. Kubernetes monitoring architecture (opens new window)

这里有一张从第二篇文章中抽出来的监控架构图

monitoring architecture

# 部署

可以直接使用官方写好的配置文件进行部署: kubernetes-incubator/metrics-server (opens new window)

这里也有一个镜像需要在代理节点下载并使用 rsync 移动到 work node:k8s.gcr.io/metrics-server-amd64:v0.3.6。详细方法参照 [](kubectl create -f deploy/1.8+/) 如果采用代理节点下载并移动的方案进行部署,则需要设置 image 的 imagePullPolicy: IfNotPresent

以下是关于 metrics server 的安装步骤

$ 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

部署过程有可能出现错误 error: metrics not available yet,可以参考该 Issue (opens new window)

此时可以添加两个参数 --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 命令详解 (opens new window)

# -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
Last Updated: 9/13/2019, 1:58:09 PM