iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 26
0
DevOps

從題目中學習k8s系列 第 26

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


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集群都是使用自簽署證書,因此沒必要驗證
  • cAdvisor:開源的單節點Agent,負責監控容器資源使用情況與性能,採集機器上所有Container的Memory、網絡使用情況、文件系統和CPU等數據。

cAdvisor雖然好用,但有些缺點:

  • 僅能監控基礎資源利用情況,無法分析應用的實際性能
  • 不具備長期存儲和趨勢分析能力。
  • Kube-state-metrics:輪詢Kubernetes API,並將Kubernetes的結構化信息轉換為metrics

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

筆者挑了一個當中很方便也簡單的 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

上一篇
【從題目中學習k8s】-【Day25】第十六題 - TroubleShooting 2
下一篇
【從題目中學習k8s】-【Day27】K8s叢集的資源監控 2 - Prometheus
系列文
從題目中學習k8s31

尚未有邦友留言

立即登入留言