DEV Community

Cover image for อยากรู้ว่าใน K8s มีการใช้ทรัพยาการในเครื่องอะไรไปเท่าไหร่บ้าง มีอะไรเหลือบ้าง
Damrongsak Reetanon
Damrongsak Reetanon

Posted on

อยากรู้ว่าใน K8s มีการใช้ทรัพยาการในเครื่องอะไรไปเท่าไหร่บ้าง มีอะไรเหลือบ้าง

หลายคนคงสงสัยเหมือนผมว่า ใน K8s cluster ของเรา

  • ทรัพยากรในเครื่องถูกใช้ไปเยอะไหม
  • มี App ตัวไหนใช้ทรัพยากรอะไรไปบ้าง
  • ทรัพยากรในเครื่องใกล้หมดยัง มีเหลืออยู่มากน้อย
  • อยากดูแบบละเอียด ๆ เลยถึงในระดับ container ว่ากิน memory กิน CPU เยอะไหม
  • แต่ละ node มีการ request ทรัยากรไปเท่าไหรแล้่ว ได้มีการกำหนด limit ไว้ไหม ยังเหลืออยู่อีกเท่าไหร่

คำถามเหล่านี้ว่าไปแล้ว ก็สามารถหาคำตอบได้จากคำสั่ง kubectl ที่เราคุ้นเคยได้

  • ถ้าอยากหาคำตอบเรื่อง request และ limit ก็หาได้จาก kubectl describe nodes <node_name>

Image description

  • ถ้าอยากหาคำตอบเรื่องปริมาณการใช้งานทรัพยากร สามารถใช้คำสั่ง kubectl top [pods,nodes] แต่ว่าต้องติดตั้ง metrics server ให้เรียบร้อยก่อนใช้งาน Image description ถ้าอยากเห็นภาพรวมของการใช้ทรัพยากร ก็คือต้องค่อย ๆ ไปไล่ดูทีละ node หรือในบางกรณีก็ต้องค่อย ๆ ไล่ดูทีละ namespace

kube-capacity ช่วยตอบโจทย์ให้เราได้

kube-capacity ถูกพัฒนาขึ้นมาเพื่อให้เราเห็นภาพรวมของ requests, limits และ utilizations ใน Kubernetes Cluster ซึ่งก็จะมีข้อมูลที่มีประโยชน์จาก kubectl top และ kubectl describe มาแสดงผลให้เห็นภาพรวมของทรัพยากรใน cluster ได้ง่ายขึ้น

ก่อนเริ่มต้น

  1. ติดตั้ง metrics server เรียบร้อย
  2. ติดตั้ง kube-capacity (ทดสอบบน macOS v12.3.1)
> brew tap robscott/tap
> brew install robscott/tap/kube-capacity
Enter fullscreen mode Exit fullscreen mode

ดูภาพรวมราย nodes ของ requests และ limits ของ Kubernetes Cluster

❯ kube-capacity
NODE             CPU REQUESTS   CPU LIMITS    MEMORY REQUESTS   MEMORY LIMITS
*                6350m (39%)    7500m (46%)   2040Mi (8%)       340Mi (1%)
cluster4-cp0     950m (47%)     0Mi (0%)      440Mi (24%)       340Mi (18%)
cluster4-cp1     750m (37%)     0Mi (0%)      300Mi (16%)       0Mi (0%)
cluster4-cp2     750m (37%)     0Mi (0%)      300Mi (16%)       0Mi (0%)
cluster4-node0   780m (39%)     1500m (75%)   200Mi (5%)        0Mi (0%)
cluster4-node1   780m (39%)     1500m (75%)   200Mi (5%)        0Mi (0%)
cluster4-node2   780m (39%)     1500m (75%)   200Mi (5%)        0Mi (0%)
cluster4-node3   780m (39%)     1500m (75%)   200Mi (5%)        0Mi (0%)
cluster4-node4   780m (39%)     1500m (75%)   200Mi (5%)        0Mi (0%)
Enter fullscreen mode Exit fullscreen mode

[เพิ่มข้อมูล utilization] ดูภาพรวมราย nodes ของ requests,limits และ utilization ของ Kubernetes Cluster

❯ kube-capacity --util
NODE             CPU REQUESTS   CPU LIMITS    CPU UTIL      MEMORY REQUESTS   MEMORY LIMITS   MEMORY UTIL
*                6350m (39%)    7500m (46%)   5934m (37%)   2040Mi (8%)       340Mi (1%)      8533Mi (35%)
cluster4-cp0     950m (47%)     0Mi (0%)      100m (5%)     440Mi (24%)       340Mi (18%)     1098Mi (61%)
cluster4-cp1     750m (37%)     0Mi (0%)      63m (3%)      300Mi (16%)       0Mi (0%)        1065Mi (59%)
cluster4-cp2     750m (37%)     0Mi (0%)      70m (3%)      300Mi (16%)       0Mi (0%)        1087Mi (60%)
cluster4-node0   780m (39%)     1500m (75%)   1286m (64%)   200Mi (5%)        0Mi (0%)        992Mi (26%)
cluster4-node1   780m (39%)     1500m (75%)   1071m (53%)   200Mi (5%)        0Mi (0%)        986Mi (25%)
cluster4-node2   780m (39%)     1500m (75%)   1104m (55%)   200Mi (5%)        0Mi (0%)        1153Mi (30%)
cluster4-node3   780m (39%)     1500m (75%)   1118m (55%)   200Mi (5%)        0Mi (0%)        1167Mi (30%)
cluster4-node4   780m (39%)     1500m (75%)   1126m (56%)   200Mi (5%)        0Mi (0%)        989Mi (26%)
Enter fullscreen mode Exit fullscreen mode

ดูข้อมูลเป็นราย pods ในแต่ละ node เฉพาะ namespace: test

❯ kube-capacity --pods --namespace test
NODE             POD       CPU REQUESTS   CPU LIMITS   MEMORY REQUESTS   MEMORY LIMITS
*                *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-cp0     *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-cp1     *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-cp2     *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node0   *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node1   *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node2   *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node3   *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node4   *         0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)
cluster4-node4   mynginx   0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)
Enter fullscreen mode Exit fullscreen mode

ดูข้อมูลเป็นราย containers ในแต่ละ node เฉพาะ namespace: test

❯ kube-capacity --containers --namespace test
NODE             POD       CONTAINER   CPU REQUESTS   CPU LIMITS   MEMORY REQUESTS   MEMORY LIMITS
*                *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-cp0     *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-cp1     *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-cp2     *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node0   *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node1   *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node2   *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node3   *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)

cluster4-node4   *         *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)
cluster4-node4   mynginx   *           0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)
cluster4-node4   mynginx   hello       0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)
cluster4-node4   mynginx   mynginx     0Mi (0%)       0Mi (0%)     0Mi (0%)          0Mi (0%)
Enter fullscreen mode Exit fullscreen mode

เลือกดูเฉพาะข้อมูลที่อยากดู มีหลาย option ให้กรอกดูเฉพาะที่อยากดูได้หลายอย่างให้เลือกเลย

  • -n หรือ --namespace เพื่อเลือกดูข้อมูลเฉพาะ namespace ที่ระบุเท่านั้น
  • --namespace-labels key=value เพื่อเลือกดูข้อมูลเฉพาะ namespace ที่มี label ตามที่ระบุไว้
  • --node-labels key=value เพื่อเลือกดูข้อมูลเฉพาะ node ที่มี label ตามที่ระบุไว้
  • --pod-labels key=value เพื่อเลือกดูข้อมูลเฉพาะ pod ที่มี label ตามที่ระบุไว้

More Info:
https://github.com/robscott/kube-capacity

มูลค่าความสุข

Discussion (0)