kubeadm1.14.1 安裝Metrics Server

Metrics API

介紹Metrics-Server以前,必需要提一下Metrics API的概念node

Metrics API相比於以前的監控採集方式(hepaster)是一種新的思路,官方但願核心指標的監控應該是穩定的,版本可控的,且能夠直接被用戶訪問(例如經過使用 kubectl top 命令),或由集羣中的控制器使用(如HPA),和其餘的Kubernetes APIs同樣。git

官方廢棄heapster項目,就是爲了將核心資源監控做爲一等公民對待,即像pod、service那樣直接經過api-server或者client直接訪問,再也不是安裝一個hepater來匯聚且由heapster單獨管理。github

假設每一個pod和node咱們收集10個指標,從k8s的1.6開始,支持5000節點,每一個節點30個pod,假設採集粒度爲1分鐘一次,則:api

10 x 5000 x 30 / 60 = 25000 平均每分鐘2萬多個採集指標

由於k8s的api-server將全部的數據持久化到了etcd中,顯然k8s自己不能處理這種頻率的採集,並且這種監控數據變化快且都是臨時數據,所以須要有一個組件單獨處理他們,k8s版本只存放部分在內存中,因而metric-server的概念誕生了。bash

其實hepaster已經有暴露了api,可是用戶和Kubernetes的其餘組件必須經過master proxy的方式才能訪問到,且heapster的接口不像api-server同樣,有完整的鑑權以及client集成。這個api如今還在alpha階段(18年8月),但願能到GA階段。類api-server風格的寫法:generic apiserver架構

有了Metrics Server組件,也採集到了該有的數據,也暴露了api,但由於api要統一,如何將請求到api-server的/apis/metrics請求轉發給Metrics Server呢,解決方案就是:kube-aggregator,在k8s的1.7中已經完成,以前Metrics Server一直沒有面世,就是耽誤在了kube-aggregator這一步。app

kube-aggregator(聚合api)主要提供:ide

  • Provide an API for registering API servers.spa

  • Summarize discovery information from all the servers.設計

  • Proxy client requests to individual servers.

詳細設計文檔:參考連接

metric api的使用:

  • Metrics API 只能夠查詢當前的度量數據,並不保存歷史數據

  • Metrics API URI 爲 /apis/metrics.k8s.io/,在 k8s.io/metrics 維護

  • 必須部署 metrics-server 才能使用該 API,metrics-server 經過調用 Kubelet Summary API 獲取數據

如:

http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes
​
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes/<node-name>
​
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/namespace/<namespace-name>/pods/<pod-name>

Metrics-Server

Metrics server定時從Kubelet的Summary API(相似/ap1/v1/nodes/nodename/stats/summary)採集指標信息,這些聚合過的數據將存儲在內存中,且以metric-api的形式暴露出去。

Metrics server複用了api-server的庫來實現本身的功能,好比鑑權、版本等,爲了實現將數據存放在內存中嗎,去掉了默認的etcd存儲,引入了內存存儲(即實現Storage interface)。由於存放在內存中,所以監控數據是沒有持久化的,能夠經過第三方存儲來拓展,這個和heapster是一致的。

 

Metrics server出現後,新的​Kubernetes 監控架構將變成上圖的樣子

  • 核心流程(黑色部分):這是 Kubernetes正常工做所須要的核心度量,從 Kubelet、cAdvisor 等獲取度量數據,再由metrics-server提供給 Dashboard、HPA 控制器等使用。

  • 監控流程(藍色部分):基於核心度量構建的監控流程,好比 Prometheus 能夠從 metrics-server 獲取核心度量,從其餘數據源(如 Node Exporter 等)獲取非核心度量,再基於它們構建監控告警系統。

官方地址:https://github.com/kubernetes-incubator/metrics-server

部署

mkdir metrics;cd metics
git clone https://github.com/kubernetes-incubator/metrics-server.git
cd metrics-server/deploy/1.8+/

 修改metrics-server-deployment.yaml,紅色部分。

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: extensions/v1beta1
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: k8s.gcr.io/metrics-server-amd64:v0.3.3
        command:
        - /metrics-server
        - --metric-resolution=30s
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
        - --kubelet-insecure-tls
        imagePullPolicy: Always
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp

 建立

[root@cn-hongkong 1.8+]# kubectl apply -f .
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader unchanged
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator unchanged
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader unchanged
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io unchanged
serviceaccount/metrics-server unchanged
deployment.extensions/metrics-server configured

 等待一會就能夠看下集羣的資源使用狀況了!

相關文章
相關標籤/搜索