Kubernetes requests 和limits 說明
以下是 CPU 和 memory 資源範例 和說明
resources:
requests:
cpu: "500m" # 至少需要 500m 的 CPU
memory: "512Mi" # 至少需要 512Mi 的内存
limits:
cpu: "1000m" # 最多使用 1000m 的 CPU
memory: "1Gi" # 最多使用 1Gi 的内存
requests
代表一個Pod(容器)啟動時需要的最小資源量。
- Pod 調度:K8s 是透過該資源來判斷要調度在哪個節點上。
- 性能保障:確保Pod 最低的資源需求。
K8s 中設置CPU 資源時可以使用的單位:
單位 | 說明 | 舉例 |
---|---|---|
m |
millicores,千分之一核 (1/1000 core) | 500m = 0.5 個 CPU 核心 |
無單位 | 表示完整 CPU 核心(1 核) | 1 = 1 个 CPU 核心 |
limits
代表Pod(容器)能使用的資源最大資源量。
- CPU
表該 Pod 最高能使用的資源上限,超過則會限制,但不會刪除Pod。 - memory
如果記憶體設置的不足 容易觸發OOM(Out of Memory)錯誤。
K8s 中設置內存 (memory) 時可以使用的單位:
通常 在K8s中推薦使用基於1024的單位 例如 如 Gi
, Mi
, Ki
,而不是基於1000的G
, M
, K
,以確保更精準地表示計算資源。
單位 | 說明 | 舉例 |
---|---|---|
Gi |
Gibibyte (1024^3 bytes) | 1Gi = 1,073,741,824 bytes |
Mi |
Mebibyte (1024^2 bytes) | 1Mi = 1,048,576 bytes |
Ki |
Kibibyte (1024^1 bytes) | 1Ki = 1,024 bytes |
G |
Gigabyte (1000^3 bytes) | 1G = 1,000,000,000 bytes |
M |
Megabyte (1000^2 bytes) | 1M = 1,000,000 bytes |
K |
Kilobyte (1000^1 bytes) | 1K = 1,000 bytes |
無單位 | 默認為位元組(Bytes) | 1000000 表示 1,000,000 bytes |
關於 requests
和 limits
區別
1 .調度差異 - `requests` 用來選擇一個有「足夠資源的節點」來運行Pod - `limits` 不會影響調度,但會「影響運行時的資源」使用。2 .资源使用
CPU
- 超過
requests
低於limits
則不會限制。 - 超過
limits
則會進行限制。
memory
- 超過
requests
低於limits
正常運行。 - 超過
limits
則會被 Kill。
最後
在設置時 可以先了解 該容器運行的最低開銷
先設置 requests
參數,在針對性能 limits
進行限制由K8s進行調配。