metrics-server安裝
資源指標(biāo)管道
一彤恶、介紹
1瘫怜、舊版本的監(jiān)控方案
在k8s 1.12版本之前,k8s通常采用 Heapster + cAdvisor + InfluxDB 來(lái)監(jiān)控集群資源數(shù)據(jù)
Heapster:在k8s集群中獲取metrics和事件數(shù)據(jù),寫入InfluxDB
cAdvisor:對(duì)節(jié)點(diǎn)機(jī)器上的資源及容器進(jìn)行實(shí)時(shí)監(jiān)控和性能數(shù)據(jù)采集,包括CPU使用情況、內(nèi)存使用情況、網(wǎng)絡(luò)吞吐量及文件系統(tǒng)使用情況
時(shí)序數(shù)據(jù)庫(kù)毕源,提供數(shù)據(jù)的存儲(chǔ)该镣,存儲(chǔ)在指定的目錄下嫁审。
Heapster將每個(gè)Node上的cAdvisor的數(shù)據(jù)進(jìn)行匯總律适,然后導(dǎo)到InfluxDB辐烂。
Heapster的前提是使用cAdvisor采集每個(gè)node上主機(jī)和容器資源的使用情況,
再將所有node上的數(shù)據(jù)進(jìn)行聚合捂贿。
這樣不僅可以看到Kubernetes集群的資源情況纠修,
還可以分別查看每個(gè)node/namespace及每個(gè)node/namespace下pod的資源情況。
可以從cluster厂僧,node扣草,pod的各個(gè)層面提供詳細(xì)的資源使用情況。
2颜屠、新版本的監(jiān)控方案
從 v1.8 開(kāi)始德召,資源使用情況的監(jiān)控可以通過(guò) Metrics API的形式獲取,具體的組件為Metrics Server汽纤,用來(lái)替換之前的heapster上岗,heapster從1.11開(kāi)始逐漸被廢棄。
Metrics-Server是集群核心監(jiān)控?cái)?shù)據(jù)的聚合器蕴坪,從 Kubernetes1.8 開(kāi)始肴掷,它作為一個(gè) Deployment對(duì)象默認(rèn)部署在由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 來(lái)訪問(wèn) kubelet径玖,這樣可以避免節(jié)點(diǎn)名稱沒(méi)有 DNS 解析記錄時(shí)痴脾,通過(guò)節(jié)點(diǎn)名稱調(diào)用節(jié)點(diǎn) kubelet API 失敗的情況(未配置時(shí)默認(rèn)的情況)
--kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP #
# kubelet 的10250端口使用的是https協(xié)議,連接需要驗(yàn)證tls證書梳星。--kubelet-insecure-tls不驗(yàn)證客戶端證書
--kubelet-insecure-tls
部署metric-server
kubectl create -f .
驗(yàn)證是否成功
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"
之前在物理機(jī)上的集群赞赖、vmware虛機(jī)上的集群安裝該組件均沒(méi)有問(wèn)題滚朵,不想在openstack上的集群安裝時(shí),日志一直報(bào)錯(cuò)前域,無(wú)法正常使用
在網(wǎng)上查找該錯(cuò)誤辕近,偶然在github的issue下發(fā)現(xiàn)對(duì)于該問(wèn)題的解決方案
參考地址:https://github.com/kubernetes-sigs/metrics-server/issues/145
我們集群calico使用的mtu值為1440,官方對(duì)于openstack匿垄,對(duì)于不同網(wǎng)絡(luò)模式移宅,給了不同的參考值,這里更換為了1430之后椿疗,恢復(fù)正常漏峰。
推測(cè)可能是openstack網(wǎng)絡(luò)路由方面配置的包接受范圍小于1440,導(dǎo)致calico在該mtu值下届榄,發(fā)送的報(bào)文發(fā)生了截取浅乔,導(dǎo)致了pod運(yùn)行異常。