K8S 資源限制 QoS
設(shè)置資源很煩,但是十分必要。如果不設(shè),Pod雖然很容易被調(diào)度,可以使用整個node資源,但是當(dāng)資源緊俏時,會被第一個kill。所以這里學(xué)習(xí)下資源限制。
騰訊云:老司機和你深聊Kubenertes 資源分配之 Request 和 Limit 解析
QoS
- Guaranteed:每個容器都必須設(shè)置CPU和內(nèi)存的限制和請求(最大和最小)。最嚴格的要求
- Every Container in the Pod must have a memory limit and a memory request, and they must be the same.
- Every Container in the Pod must have a CPU limit and a CPU request, and they must be the same.
- Burstable:在不滿足
Guaranteed的情況下,至少設(shè)置一個CPU或者內(nèi)存的請求。- The Pod does not meet the criteria for QoS class Guaranteed.
- At least one Container in the Pod has a memory or CPU request.
- BestEffort:什么都不設(shè)置,佛系資源申請。
- For a Pod to be given a QoS class of BestEffort, the Containers in the Pod must not have any memory or CPU limits or requests.
可壓縮資源
CPU資源。
- 當(dāng)資源緊俏,發(fā)生資源搶占時,Pod可以分享時間片。例如,在1U的node上,容器A請求0.6U,容器B請求0.4U。資源緊俏時,將會按照請求的比例分配時間片。容器A:0.6U/(0.6U+0.4U);容器B:0.4U/(0.6U+0.4U)。
- 當(dāng)資源剩余,發(fā)生超用時,即實際使用超過請求,Pod按照比例分配剩余資源。例如,在1U的node上,容器A請求0.6U,容器B請求0.3U,剩余0.1U。兩個容器都想超用,剩余的0.1U將會按照請求的比例進行2:1分配給兩個容器。
關(guān)于提高資源利用率,可以將負載高峰時間錯開的應(yīng)用部署在一起,提高node利用率。
不可壓縮資源
內(nèi)存和磁盤資源。
當(dāng)資源緊俏時,例如OOM,kubelet會根據(jù)QoS進行驅(qū)逐:
-
Best-Effort,最低優(yōu)先級,第一個被kill; -
Burstable,第二個被kill。 -
Guaranteed,最高優(yōu)先級,最后kill。除非超過limit或者沒有其他低優(yōu)先級的Pod;
由于對于不可壓縮資源,發(fā)生搶占的情況會出Pod被意外Kill掉的情況,所以建議對于不可以壓縮資源(Memory,Disk)的設(shè)置成0<Request==Limit,即Guaranteed。