K8S 資源限制 QoS


K8S 資源限制 QoS

設置資源很煩,但是十分必要。如果不設,Pod雖然很容易被調度,可以使用整個node資源,但是當資源緊俏時,會被第一個kill。所以這裏學習下資源限制。



QoS

  • Guaranteed:每個容器都必須設置CPU和內存的限制和請求(最大和最小)。最嚴格的要求

  1. Every Container in the Pod must have a memory limit and a memory request, and they must be the same.

  2. Every Container in the Pod must have a CPU limit and a CPU request, and they must be the same.

Burstable:在不滿足Guaranteed的情況下,至少設置一個CPU或者內存的請求。

  1. The Pod does not meet the criteria for QoS class Guaranteed.

  2. At least one Container in the Pod has a memory or CPU request.

BestEffort:什麼都不設置,佛系資源申請。

  1. 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資源。

  • 當資源緊俏,發生資源搶佔時,Pod可以分享時間片。例如,在1U的node上,容器A請求0.6U,容器B請求0.4U。資源緊俏時,將會按照請求的比例分配時間片。容器A:0.6U/(0.6U+0.4U);容器B:0.4U/(0.6U+0.4U)。

  • 當資源剩餘,發生超用時,即實際使用超過請求,Pod按照比例分配剩餘資源。例如,在1U的node上,容器A請求0.6U,容器B請求0.3U,剩餘0.1U。兩個容器都想超用,剩餘的0.1U將會按照請求的比例進行2:1分配給兩個容器。

關於提高資源利用率,可以將負載高峯時間錯開的應用部署在一起,提高node利用率。

不可壓縮資源

內存和磁盤資源。

當資源緊俏時,例如OOM,kubelet會根據QoS進行驅逐:

  1. Best-Effort,最低優先級,第一個被kill;

  2. Burstable,第二個被kill。

  3. Guaranteed,最高優先級,最後kill。除非超過limit或者沒有其他低優先級的Pod;

由於對於不可壓縮資源,發生搶佔的情況會出Pod被意外Kill掉的情況,所以建議對於不可以壓縮資源(Memory,Disk)的設置成0<Request==Limit,即Guaranteed


至於這三種是哪一種不用配置,k8s會自動給pod分配,比如你什麼都沒配(cpu,內存),k8s就給你分個BestEffort,依次類推



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章