title: 【從題目中學習k8s】-【Day26】K8s叢集的資源監控 1
description: 以無比的恆毅力堅持30天鍊成鐵人--連續30天,一天發表一篇IT技術文章

【從題目中學習k8s】-【Day26】K8s叢集的資源監控 1

tags: DevOps CICD K8s Docker

做了連續16天的題目,不知道大家有沒有覺得筋疲力盡了呢? (筆者舉手)
前面幾天的介紹內容其實還沒有完全涵蓋全部的 Kubernetes,但是基本內容都已經涵蓋了,讀者們應該可以建置一些小的微服務應用程式囉~ 接下來這幾天,筆者想介紹一些經常和 K8s搭配使用的工具,這些工具可以幫助 K8s 完成某些特定工作,像是叢集的資源監控或是安全偵測等等議題。但是要使用這些工具,需要先了解一下 K8s 的資源監控運作機制,所以今天就當作是個前導介紹,那我們開始吧~

K8s集群監控

K8s本身就具備一些基本的伺服器監控工具,例如:

K8s Dashboard :插件工具,展示每個 K8s 集群上的資源利用情況,也是實現資源和環境管理與交互的主要工具。 Pod liveness probe :Container健康狀態診斷工具。 Kubelet :每個 Node 上都運行著 Kubelet ,監控Container的運行情況。 Kubelet 也是 Control Plane 與各個 Node 通信的渠道。

kubelet default 監聽的port是10250,所以我們可以在Control Plane或Node上直接訪問

curl https://127.0.0.1:10250/metrics/cadvisor -k
  • 需使用 https metrics/cAdvisor 是 kubelet Pod 相關的監控指標,它還有一個 metrics,是 kubelet 自身的監控指標
  • -k 表示不驗證 kubelet 證書,因整個K8s集群都是使用自簽署證書,因此沒必要驗證 Kube-state-metrics:輪詢Kubernetes API,並將Kubernetes的結構化信息轉換為metrics

    除了上述基本監控工具外,還有一些功能更完善,監控更及時的Monitor,下面列舉幾個:

    Heapster (Matric-Server的原版) kube-state-metrics Matric-Server Prometheus Elastic Stack DataDog Dynatrace

    筆者挑了一個當中很方便也簡單的 Matric-Server 監控工具來介紹~

    Metric-Server介紹&安裝

    一個 K8s cluster可以有一個 Metric-Server 監控資源,包括監控NodePod 資訊。但須注意的是,Metric-Serverin memory 的 monitor,他不會將監控的資料儲存到Disk或掛載的Volume,所以無法獲得過去的監控資料。下面介紹如何安裝:

    直接將Github上的open spurce pull到本地端並創建其中物件

    $ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
    

    該YAML會於kube-system namespace創建一個Deployment

    $ kubectl get deploy -n kube-system
    NAME             READY   UP-TO-DATE   AVAILABLE   AGE
    coredns          2/2     2            2           5d20h
    metrics-server   1/1     1            1           2d11h
    

    kubectl top no <node-name>查看 Node 監控資訊,會發現有error,這個error可能是因為Node名稱找不到,或是CA認證沒過 (通常是這兩種原因),這時只要在metrics-server Deployment 加上一些對應的參數就可以了

    $ kubectl edit deploy metrics-server -n kube-system
          containers:
          - name: metrics-server
            image: k8s.gcr.io/metrics-server-amd64:v0.3.5
            ## 加入下面這些command
            command:
            - /metrics-server
            - metrics-resolution=30s
            - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
            - --kubelet-insecure-tls
    

    再用kubectl top no <node-name>命令,就可以正常監控Node資訊囉~

    $ kubectl top no        
    NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
    g8master   188m         4%     1827Mi          23%       
    g8node1    83m          4%     2201Mi          57%       
    g8node2    72m          3%     1607Mi          41% 
    

    Monitor 如何監控

    我們都知道在Node中是透過kubelet來管理Node的運作,kubelet需要透過 apiserver 接收Control Plane下達的命令在 Node中運行Pod。而kubelet中其實還包含一個subcomponent,稱為 cAdvisor 或是 Container Advisor ,cAdvisor 負責從 Pod 中擷取performance metrics,並將收集到的數據以metrics-api的形式,透過Summary API expose給Metric-Server。

    今天介紹 K8s 中基本的叢集監控方式,明天再來介紹個更強大的監控工具 -- Prometheus。今天就到這囉~ 謝謝大家~

    kubernetes-sigs/metrics-server
    Resource metrics pipeline
    Kubernetes监控:Metrics Server部署方法

    Thank you!

    You can find me on

  • george4908090@gmail.com
  •