Resources - Resource
Kubernetes Resource 設定包括 Request(最小資源)和 Limit(最大資源)。這有助於優化 資源分配 和確保 資源公平性, 並透過 ResourceQuota 和 LimitRange 控制命名空間層級的資源使用。
Request 與 Limit 的關係
在 Kubernetes 中,Request 和 Limit 是資源管理的兩個重要概念,用於控制 Pod 和容器使用的計算資源(如 CPU 和記憶體)。
resources:
requests:
cpu: '50m'
memory: '50Mi'
limits:
cpu: '100m'
memory: '100Mi'
- Request: 表示容器運行所需的最小資源量。Kubernetes 調度器根據 Request 來決定將 Pod 安排在哪個節點。
- Limit: 表示容器可以使用的最大資源量。當容器嘗試使用超過 Limit 的資源時:
- 對於 CPU,超過部分會被節流(throttled)。
- 對於記憶體,超過部分會導致容器被終止(OOMKilled)。

可以總結成以下兩條公式
- 資源請求與節點可分配資源的關係:
說明:Request 必須是非負數,且不能超過節點上可用的分配資源(Node Allocatable)。
- Request 與 Limit 的大小關係:
說明:Request 必須小於或等於 Limit。如果未設定 Limit,某些情況下可能為無限制(取決於環境設定)。
基本資源與單位
CPU
- 單位:以核心(core)為單位,支持毫核(millicores),1 CPU = 1000m。
例如:
1表示 1 個核心,500m表示 0.5 個核心。 - 特性:
- 可壓縮:容器超出可用 CPU 時,性能會下降,但不會被終止(節流機制)。
- 共享性:多容器可共享 CPU,動態分配資源。
Memory
- 單位:以字節(Bytes)為基礎,支持簡化單位(如 Gi、Mi)。
例如:
512Mi表示 512 MiB 記憶體。 - 特性:
- 不可壓縮:超出可用記憶體時,容器會被終止(OOMKilled)。
- 專用性:記憶體不能像 CPU 一樣共享。
Pod 的服務品質 (QoS)
Kubernetes 根據資源的 Request 和 Limit,將 Pod 分為以下三種 服務品質 (Quality of Service, QoS) 等級:
1. Guaranteed (保證)
- 條件:
- 一個 Pod 中每個容器的 Memory 和 CPU 的 Request 和 Limit 都被設置,並且相等。
- 特點:
- 獲得最高的資源優先級,適合高優先級或關鍵應用。
- 不容易被驅逐。
2. Burstable (突發型)
- 條件:
- 不是 Guaranteed Pod。
- Pod 內至少有一個容器設定了 Memory 或 Cpu 的 Limit 或 Request。
- 特點:
- 資源利用率彈性較大,但可能在資源緊張時被驅逐。
3. BestEffort (最優)
- 條件:
- 一個 Pod 中所有容器 都未設置任何 Request 和 Limit。
- 特點:
- 資源優先級最低,適合非關鍵或低優先級應用,容易被驅逐。
Resource 設定的排列組合
| 設定情境 | Request 設定 | Limit 設定 | 描述與應用 |
|---|---|---|---|
| 只設定 Request | 是 | 否 | Kubernetes 保證至少分配設定的 Request 資源,不限制容器的最大資源使用。適用於資源需求隨負載波動的應用,如 Web 應用或測試應用。 |
| 只設定 Limit | 否 | 是 | Kubernetes 預設將 Request 設為 Limit,確保容器的資源使用不超過設定的 Limit 且提供穩定性,QoS 等級為 Guaranteed,適合對資源有固定需求且不需彈性調整的應用。 |
| 設定 Request 和 Limit | 是 | 是 | Kubernetes 保證至少分配 Request 資源並限制資源使用不超過 Limit,提供資源彈性且防止過度使用,適用於需要穩定且可彈性調整資源的應用,如 Web 應用和 API 服務。 |
| 不設定 Request 和 Limit | 否 | 否 | 容器無限制地使用資源,QoS 等級為 BestEffort,不保證資源分配穩定,適用於非關鍵性應用或開發測試環境。 |