Kubernetes Metrics API(Metrics Server)

監控資源指標管道 Metrics API(Metrics Server)node

  • 資源指標管道:
    從 Kubernetes 1.8開始,資源使用指標,例如容器 CPU 和內存使用率,可經過 Metrics API 在 Kubernetes 中得到。這些指標能夠直接被用戶訪問,好比使用kubectl top命令行,或者這些指標由集羣中的控制器使用,例如,Horizontal Pod Autoscaler,使用這些指標來作決策;
  • Metrics API:
    經過 Metrics API,您能夠得到指定節點或 pod 當前使用的資源量。此 API 不存儲指標值,所以想要獲取某個指定節點10分鐘前的資源使用量是不可能的;
  • Metrics API 倉庫:
    API源碼GitHub倉庫地址:
  • Metrics Server:
    Metrics Server是一種API Server。其提供了核心的Metrics API,經過在主 API server 中註冊的 Metrics Server Kubernetes 聚合器來採集指標信息,就像k8s組件kube-apiserver提供了不少API羣組同樣,但它不是k8s組成部分,而是運行在k8s之上的單個Pod;
    爲了讓用戶無縫的使用Metrics Server當中的API,還須要把這類自定義的API經過聚合器聚合到核心API組裏,而後能夠把此API看成是核心API的一部分而且經過kubectl api-versions可直接查看;
    Metrics Server 收集指標數據的方式是從各節點上kubelet提供的Summary API 即10250端口收集數據,收集Node和Pod核心資源指標數據,主要是內存和cpu方面的使用狀況,並將收集的信息存儲在內存中;
  • 您須要部署它,不然在集羣中將不可用
    Metrics API 須要在集羣中部署 Metrics Server。不然它將不可用;

在Kubernetes集羣中部署 Metrics API(Metrics Server)git

  • k8s新一代架構
    核心指標流水線:kubelet、metrics-server、api-server提供的api組成,統計cpu累計使用率、內存實時使用率、Pod資源佔用率及容器的磁盤佔用率;
    監控流水線:用於從系統收集各類指標數據並提供終端用戶、存儲系統及HPA,它們包含核心指標及許多非核心指標。非核心指標自己不能被k8s所解析;
  • 部署手冊參考
    我部署metrics-server參考的官方站點
  • 從官方站點下載部署metrics server所需的yaml文件
    使用for循環下載
[root@node1 metrics]# ll
total 24
-rw-r--r-- 1 root root  398 Feb 28 03:30 auth-delegator.yaml
-rw-r--r-- 1 root root  419 Feb 28 03:30 auth-reader.yaml
-rw-r--r-- 1 root root  388 Feb 28 03:30 metrics-apiservice.yaml
-rw-r--r-- 1 root root 3252 Feb 28 03:30 metrics-server-deployment.yaml
-rw-r--r-- 1 root root  336 Feb 28 03:30 metrics-server-service.yaml
-rw-r--r-- 1 root root  795 Feb 28 03:30 resource-reader.yaml
[root@node1 metrics]#
  • 修改metrics-server-deployment.yaml文件
    修改容器當中的自定義變量資源限制,否則沒法running;
command: //此處修改
    - /metrics-server
    - --metric-resolution=30s
    # These are needed for GKE, which doesn't support secure communication yet.
    # Remove these lines for non-GKE clusters, and when GKE supports token-based auth.
    - --kubelet-port=10250
    #- --deprecated-kubelet-completely-insecure=true
    - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
command: //此處修改
    - /pod_nanny
    - --config-dir=/etc/config
    - --cpu=5m
    - --extra-cpu=0.5m
    - --memory=80Mi
    - --extra-memory=8Mi
    - --threshold=5
    - --deployment=metrics-server-v0.3.6
    - --container=metrics-server
    - --poll-period=300000
    - --estimator=exponential
    # Specifies the smallest cluster (defined in number of nodes)
    # resources will be scaled to.
    #- --minClusterSize={{ metrics_server_min_cluster_size }}
  • 修改resource-reader.yaml文件
    添加nodes/stats
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  - namespaces
  - nodes/stats
  • 提早下載鏡像文件,在各個node節點上
    參考腳本
[root@node2 ~]# cat pull-metrics.sh 
#!/bin/bash
#
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.7

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 k8s.gcr.io/metrics-server-amd64:v0.3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.7 k8s.gcr.io/addon-resizer:1.8.7

docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.7
[root@node2 ~]#
  • Metrics Server 應用構建
    不可重複構建
[root@node1 metrics]# kubectl apply -f ./
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
configmap/metrics-server-config created
deployment.apps/metrics-server-v0.3.6 created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
[root@node1 metrics]# 
[root@node1 ~]# kubectl get pods -n kube-system
NAME                                                         READY   STATUS    RESTARTS   AGE
metrics-server-v0.3.6-cf56dfd4-mj7p2        2/2        Running           0            22s
  • 測試等待結果
    有的時候需等待一會,才能刷出數據來
[root@node1 ~]# kubectl top nodes
NAME    CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
node1   137m         6%     1043Mi          69%       
node2   21m          2%     333Mi           20%       
node3   23m          2%     343Mi           28%
  • 經過接口訪問節點資源信息路徑

查看node資源指標github

[root@node1 metrics]# kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq  | less

查看pods資源指標docker

[root@node1 metrics]# kubectl get --raw "/apis/metrics.k8s.io/v1beta1/pods" | jq  | less

其它方式在Kubernetes 上部署Metrics Server的方法api

此方法要比以上部署要容易許多,可參考之bash

github kubernetes-sigs架構

相關文章
相關標籤/搜索