metrics-server安裝
資源指標管道
一、介紹
1、舊版本的監(jiān)控方案
在k8s 1.12版本之前,k8s通常采用 Heapster + cAdvisor + InfluxDB 來監(jiān)控集群資源數(shù)據(jù)
Heapster:在k8s集群中獲取metrics和事件數(shù)據(jù),寫入InfluxDB
cAdvisor:對節(jié)點機器上的資源及容器進行實時監(jiān)控和性能數(shù)據(jù)采集,包括CPU使用情況、內(nèi)存使用情況、網(wǎng)絡吞吐量及文件系統(tǒng)使用情況
時序數(shù)據(jù)庫,提供數(shù)據(jù)的存儲,存儲在指定的目錄下。
Heapster將每個Node上的cAdvisor的數(shù)據(jù)進行匯總,然后導到InfluxDB。
Heapster的前提是使用cAdvisor采集每個node上主機和容器資源的使用情況,
再將所有node上的數(shù)據(jù)進行聚合。
這樣不僅可以看到Kubernetes集群的資源情況,
還可以分別查看每個node/namespace及每個node/namespace下pod的資源情況。
可以從cluster,node,pod的各個層面提供詳細的資源使用情況。
2、新版本的監(jiān)控方案
從 v1.8 開始,資源使用情況的監(jiān)控可以通過 Metrics API的形式獲取,具體的組件為Metrics Server,用來替換之前的heapster,heapster從1.11開始逐漸被廢棄。
Metrics-Server是集群核心監(jiān)控數(shù)據(jù)的聚合器,從 Kubernetes1.8 開始,它作為一個 Deployment對象默認部署在由kube-up.sh腳本創(chuàng)建的集群中
二、安裝步驟
1、下載Metrics-Server相關(guān)部署資源
# 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下添加以下參數(shù)
# 從 kubelet 采集數(shù)據(jù)的周期;
--metric-resolution=30s
# 優(yōu)先使用 InternalIP 來訪問 kubelet,這樣可以避免節(jié)點名稱沒有 DNS 解析記錄時,通過節(jié)點名稱調(diào)用節(jié)點 kubelet API 失敗的情況(未配置時默認的情況)
--kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP #
# kubelet 的10250端口使用的是https協(xié)議,連接需要驗證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上的集群安裝時,日志一直報錯,無法正常使用

在網(wǎng)上查找該錯誤,偶然在github的issue下發(fā)現(xiàn)對于該問題的解決方案
參考地址:https://github.com/kubernetes-sigs/metrics-server/issues/145

我們集群calico使用的mtu值為1440,官方對于openstack,對于不同網(wǎng)絡模式,給了不同的參考值,這里更換為了1430之后,恢復正常。
推測可能是openstack網(wǎng)絡路由方面配置的包接受范圍小于1440,導致calico在該mtu值下,發(fā)送的報文發(fā)生了截取,導致了pod運行異常。