在 K8S 裡我可以對資源做 resource isolation,限制 Pod 所使用的資源,或者設立 HPA 去決定何時要自動擴展/縮小。要做這些設定之前,就必須先了解 K8S 裡所用的度量單位的意義,才能正確地讀取資源利用率指標。
如何用 kubectl 讀取 Pod 內資源使用狀況?
使用 `kubectl top` 指令讀取 Pod 的資源使用狀況:
```cmd
kubectl top pod srs-core1-dbbb776bd-5s9rz -n srs3
```
會得到下面的回應:
```cmd
NAME CPU(cores) MEMORY(bytes)
srs-core1-dbbb776bd-5s9rz 3m 73Mi
```
如果要確認 Pod 裡面不同 Container 所使用的資源,加上 `--containers` 參數:
```cmd
kubectl top pod srs-core1-dbbb776bd-5s9rz -n srs3 --containers
```
會得到以下回應:
```cmd
POD NAME CPU(cores) MEMORY(bytes)
srs-core1-dbbb776bd-5s9rz filebeat 1m 60Mi
srs-core1-dbbb776bd-5s9rz json-exporter 2m 7Mi
srs-core1-dbbb776bd-5s9rz logrotate 1m 0Mi
srs-core1-dbbb776bd-5s9rz srs-core1 1m 5Mi
```
如何取得 Node 的資源使用資訊?
同樣用 `kubectl top` 讀取 Node 層級的資訊:
```cmd
kubectl top node qatk8sworker01 -n srs3
```
會得到以下回應:
```cmd
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
qatk8sworker01 1280m 32% 3713Mi 48%
```
K8S 的 CPU 單位 m 是什麼意思?
CPU 設定的單位是 `m`(millicore),每 `1000m = 1 vCore`,也可以使用分數表示,因此設定的方式可以是:
- `1`(相當於 1000m)
- `0.5`(相當於 500m)
- `300m`(相當於 0.3 Core)
從上面取得 Node 的值可以看到 CPU 的資訊是 `1280m 32%`,代表這台 Node 總共有 `4000m = 4 Core CPU`。
PS:設定 `1m` 是不被允許的,官方建議最低從 `100m` 開始。
K8S 的 Memory 單位 Mi 和 M 有什麼不同?
Memory 設定的單位最低則是從 byte 開始,可以使用單一字母的 `E, P, T, G, M, K`,也可以是雙字母的 `Ei, Pi, Ti, Gi, Mi, Ki`(比較常見)。單一字母是十進位(1M = 1000 × 1000 bytes),雙字母是二進位(1Mi = 1024 × 1024 bytes)。以下是幾個設定範例:
- `104857600`(相當於 100 MiB = 100 × 1024 × 1024)
- `100M`(十進位的 100 MB)
- `100Mi`(二進位的 100 MiB)
換算關係如下:
```txt
128974848 = 129e6 = 129M = 123Mi
123Mi 1024 1024 = 128974848 bytes
129 MB 1000 1000 = 128974848 bytes
```
怎麼將 Mi 轉成 MB?
以 `kubectl top node` 回傳的 `3713Mi` 為例:
```txt
3713Mi 1024 1024 / 1000 / 1000 = 3893MB
```
也就是說二進位的 Mi 值乘上 1024²、再除以 1000²,就能換成十進位的 MB。
延伸閱讀
常見問題
K8S 裡 1000m 的 CPU 等於多少?
1000m 等於 1 個 vCore。CPU 單位 `m` 是 millicore,所以 500m 代表半個 Core、300m 代表 0.3 個 Core。
為什麼 K8S 不允許設定 1m 的 CPU?
`1m` 低於系統可排程的最小粒度,Kubernetes 官方建議 CPU requests/limits 最低從 `100m` 開始設定。
Mi 和 MB 差在哪裡?
`Mi`(Mebibyte)是二進位單位,1Mi = 1024 × 1024 bytes;`M`(MB)是十進位單位,1M = 1000 × 1000 bytes。K8S 設定比較常使用 `Mi` 系列的雙字母單位。
怎麼把 kubectl top 顯示的 Mi 換算成 MB?
把 Mi 值乘上 1024 × 1024 再除以 1000 × 1000 即可,例如 `3713Mi ≈ 3893MB`。
參考資料
最後更新
2026-08-28(原文發布於 2022-11-08,本文保留原始筆記內容並補上 GEO 結構。)
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2022-11-08
