Kubelet 可以主動監測和防止計算資源的全面短缺。 在資源短缺的狀況下,kubelet 能夠主動地結束一個或多個 Pod 以回收短缺的資源。 當 kubelet 結束一個 Pod 時,它將終止 Pod 中的全部容器,而 Pod 的 Phase 將變爲 Failed。 若是被驅逐的 Pod 由 Deployment 管理,這個 Deployment 會建立另外一個 Pod 給 Kubernetes 來調度。
配置資源不足時的處理方式:node
kubelet 支持按照如下信號觸發驅逐決定。
docker
kubelet支持指定驅逐閾值,用於觸發 kubelet 回收資源。
每一個閾值形式以下:shell
[eviction-signal][operator][quantity]
合法的 eviction-signal 標誌如上圖所示。
operator 是所需的關係運算符,例如 <,>。
quantity 是驅逐閾值值標誌,例如 1Gi。合法的標誌必須匹配 Kubernetes 使用的數量表示。 驅逐閾值也可使用 % 標記表示百分比。
舉例說明,若是一個節點有 10Gi 內存,但願在可用內存降低到 1Gi 如下時引發驅逐操做, 則驅逐閾值可使用下面任意一種方式指定(但不是二者同時)。ide
memory.available<10%
memory.available<1Gi
軟驅逐閾值使用一對由驅逐閾值和管理員必須指定的寬限期組成的配置對。在超過寬限期前,kubelet不會採起任何動做回收和驅逐信號關聯的資源。若是沒有提供寬限期,kubelet啓動時將報錯。spa
此外,若是達到了軟驅逐閾值,操做員能夠指定從節點驅逐 pod 時,在寬限期內容許結束的 pod 的最大數量。 若是指定了 pod.Spec.TerminationGracePeriodSeconds 值, kubelet 將使用它和寬限期兩者中較小的一個。 若是沒有指定,kubelet將當即終止 pod,而不會優雅結束它們。code
軟驅逐閾值的配置支持下列標記:orm
硬驅逐閾值沒有寬限期,一旦察覺,kubelet將當即採起行動回收關聯的短缺資源。 若是知足硬驅逐閾值,kubelet將當即結束 pod 而不是優雅終止。blog
硬驅逐閾值的配置支持下列標記:
eviction-hard 描述了驅逐閾值的集合(例如 memory.available<1Gi),若是知足條件將觸發 pod 驅逐。排序
kubelet 根據其配置的整理時間間隔計算驅逐閾值。
housekeeping-interval 是容器管理時間間隔。進程
若是 kubelet 在節點上沒法回收足夠的資源,kubelet將開始驅逐 pod。
kubelet 首先根據他們對短缺資源的使用是否超過請求來排除 pod 的驅逐行爲, 而後經過優先級, 而後經過相對於 pod 的調度請求消耗急需的計算資源。
kubelet 按如下順序對要驅逐的 pod 排名:
必要時,kubelet會在遇到 DiskPressure 時逐個驅逐 Pod 來回收磁盤空間。 若是 kubelet 響應 inode 短缺,它會首先驅逐服務質量最低的 Pod 來回收 inodes。 若是 kubelet 響應缺乏可用磁盤,它會將 Pod 排在服務質量範圍內,該服務會消耗大量的磁盤並首先結束這些磁盤。