對比
node-exporter用于采集服務(wù)器層面的運(yùn)行指標(biāo),包括機(jī)器的loadavg、filesystem、meminfo等基礎(chǔ)監(jiān)控,類似于傳統(tǒng)主機(jī)監(jiān)控維度的zabbix-agent。
metric-server/heapster是從api-server中獲取CPU、內(nèi)存使用率這種監(jiān)控指標(biāo),并把他們發(fā)送給存儲后端,如InfluxDB或云廠商,他當(dāng)前的核心作用是:為HPA等組件提供決策指標(biāo)支持。
kube-state-metrics關(guān)注于獲取Kubernetes各種資源的最新狀態(tài),如Deployment或者DaemonSet。
例如:
我調(diào)度了多少個(gè)Replicas?現(xiàn)在可用的有幾個(gè)?
多少個(gè)Pod是running/stopped/terminated狀態(tài)?
Pod重啟了多少次?
我有多少job在運(yùn)行中?
這些指標(biāo)都由kube-state-metrics提供。
之所以沒有把kube-state-metrics納入到metric-server的能力中,是因?yàn)樗麄兊年P(guān)注點(diǎn)本質(zhì)上是不一樣的。
metric-server僅僅是獲取、格式化現(xiàn)有數(shù)據(jù),寫入特定的存儲,實(shí)質(zhì)上是一個(gè)監(jiān)控系統(tǒng)。
kube-state-metrics是將Kubernetes的運(yùn)行狀況在內(nèi)存中做了個(gè)快照,并且獲取新的指標(biāo),但他沒有能力導(dǎo)出這些指標(biāo)。
部署metric-server
下載metric-server部署的yaml文件到本地。
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
拉取metric-server的鏡像到本地:
# docker pull zhaoqinchang/metrics-server:0.3.7 0.3.7: Pulling from zhaoqinchang/metrics-server 9ff2acc3204b: Pull complete 9d14b55ff9a0: Pull complete Digest:
sha256:c0efe772bb9e5c289db6cc4bc2002c268507d0226f2a3815f7213e00261c38e9 Status: Downloaded newer image for zhaoqinchang/metrics-server:0.3.7 docker.io/zhaoqinchang/metrics-server:0.3.7
修改components.yaml文件為如下內(nèi)容:
# cat components.yaml --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:aggregated-metrics-reader labels: rbac.authorization.k8s.io/aggregate-to-view: “true” rbac.authorization.k8s.io/aggregate-to-edit:
“true” rbac.authorization.k8s.io/aggregate-to-admin: “true” rules: - apiGroups: [“metrics.k8s.io”] resources: [“pods”, “nodes”] verbs: [“get”, “l(fā)ist”, “watch”] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: metrics-serverauth-delegator roleRef:
apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegator subjects: - kind:
ServiceAccount name: metrics-server namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind:
RoleBinding metadata: name: metrics-server-auth-reader namespace: kube-system roleRef: apiGroup:
rbac.authorization.k8s.io kind: Role name: extension-apiserver-authentication-reader subjects: - kind:
ServiceAccount name: metrics-server namespace: kube-system --- apiVersion:
apiregistration.k8s.io/v1beta1 kind: APIService metadata: name: v1beta1.metrics.k8s.io spec: service: name: metrics-server namespace: kube-system group: metrics.k8s.io version:
v1beta1 insecureSkipTLSVerify: true groupPriorityMinimum: 100 versionPriority: 100 --- 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: zhaoqinchang/metrics-server:0.3.7 #修改鏡像為剛剛拉取下來的鏡像
imagePullPolicy: IfNotPresent args:
- --cert-dir=/tmp - --secure-port=4443 command: #添加以下三行command命令 - /metrics-server - --kubelet-preferred-address-types=InternalIP - --kubelet-insecure-tls ports: - name: main-port containerPort: 4443 protocol:
TCP securityContext: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 1000 volumeMounts: - name: tmp-dir mountPath:
/tmp nodeSelector: kubernetes.io/os: linux --- apiVersion: v1 kind: Service metadata: name: metrics-server namespace: kube-system labels: kubernetes.io/name:
“Metrics-server” kubernetes.io/cluster-service: “true” spec: selector: k8s-app: metrics-server ports:
- port: 443 protocol: TCP targetPort: main-port --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:metrics-server rules: - apiGroups: - “” resources: - pods - nodes - nodes/stats - namespaces - configmaps verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:metrics-server roleRef:
apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:metrics-server subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system部署metric-server:
# kubectl apply -f components.yaml clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrolebinding.rbac.authorization.k8s.io/metrics-serverauth-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.apps/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
查看metric.k8s.io是否出現(xiàn)在Kubernetes集群的API群組列表中:
# kubectl api-versions | grep metrics metrics.k8s.io/v1beta1
使用
kubectl top命令可顯示節(jié)點(diǎn)和Pod對象的資源使用信息,它依賴于集群中的資源指標(biāo)API來收集各項(xiàng)指標(biāo)數(shù)據(jù)。它包含有Node和Pod兩個(gè)子命令,可分別顯示Node對象和Pod對象的相關(guān)資源占用率。
列出Node資源占用率命令的語法格式為“kubectl top node [-l label | NAME]”,例如下面顯示所有節(jié)點(diǎn)的資源占用狀況的結(jié)果中顯示了各節(jié)點(diǎn)累計(jì)CPU資源占用時(shí)長及百分比,以及內(nèi)容空間占用量及占用比例。必要時(shí),也可以在命令直接給出要查看的特定節(jié)點(diǎn)的標(biāo)識,以及使用標(biāo)簽選擇器進(jìn)行節(jié)點(diǎn)過濾。
[root@master metric]# kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% master 282m 14% 1902Mi 51% node-02 70m 3% 1371Mi 37% node-03 121m 1% 892Mi 11%
而名稱空間級別的Pod對象資源占用率的使用方法會略有不同,使用時(shí),一般應(yīng)該跟定名稱空間及使用標(biāo)簽選擇器過濾出目標(biāo)Pod對象。例如,下面顯示kube-system名稱空間下的Pod資源使用狀況:
[root@master metric]# kubectl top pods -n kube-system NAME CPU(cores) MEMORY(bytes) etcd-master 32m 300Mi kube-apiserver-master 86m 342Mi kube-controller-manager-master 30m 48Mi kube-flannel-ds-l5ghn 5m
10Mi kube-flannel-ds-rqlm2 4m 12Mi kube-flannel-ds-v92r9 4m 14Mi kube-proxy-7vjcv 18m 15Mi kube-proxy-xrz8f 13m 21Mi kube-proxy-zpwn6 1m 14Mi kube-scheduler-master 7m 17Mi metrics-server-5549c7694f-7vb66 2m 14Mi
kubectl top命令為用戶提供簡潔、快速獲取Node對象及Pod對象系統(tǒng)資源占用狀況的接口,是集群運(yùn)行和維護(hù)的常用命令之一。
原文鏈接:https://juejin.cn/post/6996862439560052773
責(zé)任編輯:haq
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9335瀏覽量
86133 -
監(jiān)控系統(tǒng)
+關(guān)注
關(guān)注
21文章
3947瀏覽量
177263
發(fā)布評論請先 登錄
相關(guān)推薦
使用 Flexus 云服務(wù)器 X 實(shí)例部署 Kubernetes 圖形化管理平臺
![使用 Flexus 云<b class='flag-5'>服務(wù)器</b> X 實(shí)例部署 <b class='flag-5'>Kubernetes</b> 圖形化管理平臺](https://file1.elecfans.com//web3/M00/04/9F/wKgZPGd2io-AJt67AAFCdu5cZ2o190.png)
基于華為云 Flexus X 實(shí)例部署 Uptime-Kuma 服務(wù)器監(jiān)控面板
![基于華為云 Flexus X 實(shí)例部署 Uptime-Kuma <b class='flag-5'>服務(wù)器</b><b class='flag-5'>監(jiān)控</b>面板](https://file1.elecfans.com//web3/M00/06/4B/wKgZPGeJtW-ABb9NAADIGvNDSBU269.png)
Flexus 云服務(wù)器 X 實(shí)例實(shí)踐:部署 ServerBee 監(jiān)控工具
![Flexus 云<b class='flag-5'>服務(wù)器</b> X 實(shí)例實(shí)踐:部署 ServerBee <b class='flag-5'>監(jiān)控</b>工具](https://file1.elecfans.com//web3/M00/05/DF/wKgZO2eE7reATZn3AAEJcgSbShg759.png)
Flexus 云服務(wù)器 X 實(shí)例實(shí)踐:安裝 Ward 服務(wù)器監(jiān)控工具
![Flexus 云<b class='flag-5'>服務(wù)器</b> X 實(shí)例實(shí)踐:安裝 Ward <b class='flag-5'>服務(wù)器</b><b class='flag-5'>監(jiān)控</b>工具](https://file1.elecfans.com//web3/M00/05/C7/wKgZPGeExf-AZumDAAEJcgSbShg923.png)
理解云服務(wù)器網(wǎng)絡(luò)指標(biāo):關(guān)鍵性能指標(biāo)
使用zabbix監(jiān)控云服務(wù)器的方法
Kubernetes集群搭建容器云需要幾臺服務(wù)器?
獨(dú)立服務(wù)器與云服務(wù)器的區(qū)別
如何在阿里ECS服務(wù)器上架設(shè)自己的OpenVPN服務(wù)器?
如何獲取DNS服務(wù)器IP?
云服務(wù)器和虛擬服務(wù)器的區(qū)別是什么
K8S學(xué)習(xí)教程一:使用PetaExpress云服務(wù)器安裝Minikube 集群
![K8S學(xué)習(xí)教程一:使用PetaExpress云<b class='flag-5'>服務(wù)器</b>安裝Minikube 集群](https://file1.elecfans.com//web2/M00/F7/7C/wKgaomaCXYOAaEQJAADJFRRhprM070.png)
評論