Kubernetes requests 和limits 說明

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

關於 requestslimits

區別

1 .調度差異 - `requests` 用來選擇一個有「足夠資源的節點」來運行Pod - `limits` 不會影響調度,但會「影響運行時的資源」使用。

2 .资源使用
CPU

  • 超過 requests 低於 limits 則不會限制。
  • 超過 limits 則會進行限制。

memory

  • 超過 requests 低於 limits 正常運行。
  • 超過 limits 則會被 Kill。

最後
在設置時 可以先了解 該容器運行的最低開銷
先設置 requests 參數,在針對性能 limits 進行限制由K8s進行調配。