k8s資源指標API及metrics-server資源監控


簡述:

在k8s早期版本中,對資源的監控使用的是heapster的資源監控工具。

但是從 Kubernetes 1.8 開始,Kubernetes 通過 Metrics API 獲取資源使用指標,例如容器 CPU 和內存使用情況。

這些度量指標可以由用戶直接訪問,例如通過使用kubectl top 命令,或者使用集群中的控制器。

Metrics API: 通過 Metrics API,您可以獲得 node 或 pod 當前的資源使用情況(但是不存儲)。

metres-server比 heapster 優勢在於: 訪問不需要 apiserver 的代理機制,提供認證和授權等; 很多集群內組件依賴它(HPA,scheduler,kubectl top),因此它應該在集群中默認運行;

k8s從1.11版開始,將集群的監控體系、數據的獲取機制轉移向metrics-server

在集群中,若要獲取集群內部的資源使用信息,需要通過metrics-server來實現。

 

而若要使用metrics-server,就必須創建一個適用於metrics-server的API的資源指標。

 

因為,集群中自帶的API無法直接識別第三方的資源指標。

 

所以這里就要用到自定義的資源指標API功能

 

 

 

在k8s中,資源指標分兩種:

 

  1.k8s自帶的資源指標,也就是說集群內部的資源指標

 

  2.自定義資源指標,允許用戶自定義資源指標來實現用戶想要實現的功能

 

我們可以通過命令:kubectl api-versions來查看集群中已存在的資源指標API

 

重點說明一下:

metres-server在GitHub項目地址有兩個用的比較多的:

  官方穩定版的:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server

  這個不知道是不是官方的,不過使用者也很多:https://github.com/kubernetes-incubator/metrics-server/tree/master/deploy

  首先說一下,其實兩種方式的我都部署過,但是官方的最新版的metrics-server:v0.3.3和addon-resizer:1.8.5這兩個組件,在默認使用資源清單部署時,試了無數次,鏡像下載下來了,但死活Running不起來。

  找了好多文檔,看了好多博客,就是起不來,可能是技術還沒有到位。為了避免踩坑,這里建議使用早點的release-1.11版本,在:

  https://github.com/kubernetes/kubernetes/tree/release-1.11/cluster/addons/metrics-server這個版本中修改一下資源清單就可以Running起來

  第二個kubernetes-incubator沒什么太大問題。

一、使用官方資源清單部署:(release-1.11版)

  1.下載資源清單:

   使用for循環快速下載資源清單:

1 for file in auth-delegator.yaml auth-reader.yaml metrics-apiservice.yaml metrics-server-deployment.yaml metrics-server-service.yaml resource-reader.yaml ;do wget https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.11/cluster/addons/metrics-server/$file;done

   2.修改資源清單參數:這里使用的鏡像為metrics-server:v0.2.1和addon-resizer:1.8.3

 1 vim metrics-server-deployment.yaml  2 ......  3  containers:  4 - name: metrics-server  5 image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.2.1 #修改鏡像倉庫地址  6  command:  7 - /metrics-server  8 # - --source=kubernetes.summary_api:'' #注釋這行  9 - --source=kubernetes.summary_api:https://kubernetes.default?kubeletHttps=true&kubeletPort=10250&insecure=true  #添加這行表示不驗證客戶端證書 10  ports: 11 - containerPort: 443 12  name: https 13 ......
 1 vim resource-reader.yaml  2 ......  3 rules:  4 - apiGroups:  5 - ""  6  resources:  7 - pods  8 - nodes  9 - nodes/stats #添加這行,否則無法獲取其他節點數據。 10 - namespaces 11 ......

  3.部署資源清單:

  切換到下載好資源清單的目錄下

1 kubectl apply -f ./

  4.驗證:

    查看集群中是否構建metrics-server的API

1 kubectl api-versions 2 ...... 3 metrics.k8s.io/v1beta1 4 ......

   查看metrics-server的pod是否Running

1 kubectl get pods -n kube-system 2 ...... 3 NAME READY STATUS RESTARTS AGE 4 metrics-server-v0.2.1-55c4957fd4-9z65b 2/2 Running 0 8h

     查看kubectl top 命令是否可用:

 1 [root@K8s-master ~]# kubectl top pods  2 NAME CPU(cores) MEMORY(bytes)  3 myapp-deploy-9dc49d6f8-56s7k 0m 2Mi  4 myapp-deploy-9dc49d6f8-gsw8c 0m 3Mi  5 myapp-deploy-9dc49d6f8-z6mxv 0m 3Mi  6 [root@K8s-master ~]# kubectl top nodes  7 NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%  8 k8s-master 290m 3% 1027Mi 59%  9 k8s-node1 46m 4% 463Mi 52% 10 k8s-node2 47m 4% 459Mi 52%

  5.疑問:

  即使pod可以Running起來,即使有metrics-server的API,即使可以使用kubectl top命令,但是addon-resizer:1.8.3容器中的日志依然有報錯:

1 [root@K8s-master ~]# kubectl logs kube-state-metrics-8578649b5-gj29z -n kube-system -c addon-resizer 2 ERROR: logging before flag.Parse: I0605 10:34:09.624889 1 pod_nanny.go:65] Invoked by [/pod_nanny --container=kube-state-metrics --cpu=100m --extra-cpu=1m --memory=100Mi --extra-memory=2Mi --threshold=5 --deployment=kube-state-metrics] 3 ERROR: logging before flag.Parse: I0605 10:34:09.624969 1 pod_nanny.go:81] Watching namespace: kube-system, pod: kube-state-metrics-8578649b5-gj29z, container: kube-state-metrics. 4 ERROR: logging before flag.Parse: I0605 10:34:09.624972 1 pod_nanny.go:82] storage: MISSING, extra_storage: 0Gi 5 ERROR: logging before flag.Parse: I0605 10:34:09.625799 1 pod_nanny.go:171] Failed to read data from config file "MISSING/NannyConfiguration": open MISSING/NannyConfiguration: no such file or directory, using default parameters 6 ERROR: logging before flag.Parse: I0605 10:34:09.625829 1 pod_nanny.go:109] cpu: 100m, extra_cpu: 1m, memory: 100Mi, extra_memory: 2Mi 7 ERROR: logging before flag.Parse: I0605 10:34:09.625838 1 pod_nanny.go:138] Resources: [{Base:{i:{value:100 scale:-3} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value:1 scale:-3} d:{Dec:<nil>} s:1m Format:DecimalSI} Name:cpu} {Base:{i:{value:104857600 scale:0} d:{Dec:<nil>} s:100Mi Format:BinarySI} ExtraPerNode:{i:{value:2097152 scale:0} d:{Dec:<nil>} s:2Mi Format:BinarySI} Name:memory}]

期望有大佬可以給出解釋

 

二、使用kubernetes-incubator的資源清單部署 

  1.下載資源清單(我這里直接克隆整個項目):   

1 git clone https://github.com/kubernetes-incubator/metrics-server.git

   2.進入目錄,修改資源清單:

 1 cd metrics-server/deploy/1.8+/  2 vim metrics-server-deployment.yaml  3 ......  4  containers:  5 - name: metrics-server  6 image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.3 #修改鏡像倉庫地址  7  imagePullPolicy: IfNotPresent  8  command: #添加這行  9 - /metrics-server #添加這行 10 - --kubelet-preferred-address-types=InternalIP #添加這行 11  - --kubelet-insecure-tls #添加這行表示不驗證客戶端證書 12  volumeMounts: 13 - name: tmp-dir 14 mountPath: /tmp
 1 vim resource-reader.yaml  2 ......  3 rules:  4 - apiGroups:  5 - ""  6  resources:  7 - pods  8 - nodes  9 - namespaces 10 - nodes/stats #檢查是否存在此項,若不存在,則添加 11 ......

  3.部署:

1 kubectl apply -f ./

       4.驗證:

  同上面的驗證方式一樣,這里不在敘述

    使用這種方式部署成功后,查看容器日志,未發現報錯:

1 kubectl logs metrics-server-5cf4b94d8b-pllxh -n kube-system 2 I0605 15:13:00.513687 1 serving.go:312] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key) 3 I0605 15:13:01.126262 1 secure_serving.go:116] Serving securely on [::]:443

至此,metrics-server資源監控插件部署完成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM