自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes 的 Pod 調(diào)度、搶占和驅(qū)逐的區(qū)別與關(guān)系

云計算 云原生
本篇文章分享 Pod 的調(diào)度、搶占和驅(qū)逐的相關(guān)概念,基本都是理論,但非常重要,經(jīng)常在面試中被問到。

Kubernetes(K8s)作為一個容器編排平臺,其調(diào)度(Scheduling)、搶占(Preemption)和驅(qū)逐(Eviction)機制是確保集群資源合理分配、高效使用并保證應用健康運行的關(guān)鍵部分。

  • 調(diào)度(scheduling)指的是確保 Pod 匹配到合適的節(jié)點, 以便 kubelet 能夠運行它們。
  • 搶占(Preemption)指的是終止低優(yōu)先級的 Pod 以便高優(yōu)先級的 Pod 可以調(diào)度到 Node 上的過程。
  • 驅(qū)逐(Eviction)是在資源匱乏的節(jié)點上,主動讓一個或多個 Pod 失效的過程。

接下來將詳細介紹這三個概念。

一、調(diào)度(Scheduling)

1. 調(diào)度概述

調(diào)度器通過 Kubernetes 的監(jiān)測(Watch)機制來發(fā)現(xiàn)集群中新創(chuàng)建且尚未被調(diào)度到節(jié)點上的 Pod。調(diào)度的主要任務是將Pod分配到集群中的合適的節(jié)點上。調(diào)度器根據(jù)Pod的需求(如CPU、內(nèi)存、存儲等)和節(jié)點的資源狀況(如可用CPU、內(nèi)存、節(jié)點標簽等)來決定Pod部署在哪個節(jié)點上。

2. 調(diào)度過程

Kubernetes調(diào)度過程主要包括以下步驟:

  • 資源需求:每個Pod可以聲明它對資源的需求,如CPU、內(nèi)存等。這些信息由resources.requests和resources.limits字段描述。
  • 節(jié)點篩選:調(diào)度器會根據(jù)Pod的資源需求以及節(jié)點的資源狀況來篩選合適的節(jié)點。篩選是通過一系列的調(diào)度策略(如節(jié)點的可用資源、Pod的親和性和反親和性等)來進行的。
  • 節(jié)點優(yōu)選:一旦節(jié)點被篩選出來,調(diào)度器將評估每個節(jié)點的優(yōu)劣。優(yōu)選是基于一組優(yōu)先級策略(例如,Pod親和性、負載均衡、Pod優(yōu)先級等)。
  • Pod調(diào)度:調(diào)度器最終會選擇一個最佳節(jié)點,并將Pod調(diào)度到該節(jié)點上。Pod在被調(diào)度之前,狀態(tài)是Pending,調(diào)度后它的狀態(tài)變?yōu)镽unning。

3. 調(diào)度策略

Kubernetes調(diào)度器默認采用的是kube-scheduler, 以下是最常用的調(diào)度策略:

  • Pod親和性和反親和性:定義Pod是否應該與特定的Pod運行在同一節(jié)點上。
  • 優(yōu)先級和搶占:Pod可以設(shè)置優(yōu)先級,較高優(yōu)先級的Pod可以搶占低優(yōu)先級Pod的資源。
  • Taints和Tolerations:節(jié)點可以有Taints,Pod可以設(shè)置Tolerations,如果Pod不容忍節(jié)點的Taint,它就不能被調(diào)度到該節(jié)點上。
  • Resource Limits:控制Pod在節(jié)點上分配的資源,避免資源超載。

二、搶占(Preemption)

1. 搶占概述

搶占機制是Kubernetes中用于保證高優(yōu)先級Pod能夠在資源不足時“搶占”低優(yōu)先級Pod的資源,從而確保關(guān)鍵任務的運行。搶占的目標是保證高優(yōu)先級的Pod能夠優(yōu)先調(diào)度到集群中的節(jié)點。

2. 搶占機制工作原理

搶占機制發(fā)生的條件是:

  • 高優(yōu)先級 Pod 請求調(diào)度時,當前沒有足夠的資源
  • 集群資源不足時,調(diào)度器會查找那些資源消耗較大的、優(yōu)先級較低的 Pod,并嘗試將其驅(qū)逐,以便為高優(yōu)先級 Pod 騰出空間。

(1) 搶占的觸發(fā)

① 優(yōu)先級設(shè)置:Pod 的優(yōu)先級由 PriorityClass 控制。PriorityClass 是一個 API 資源,定義了 Pod 的優(yōu)先級。Pod 的優(yōu)先級越高,被調(diào)度的優(yōu)先級越高,且越有可能觸發(fā)搶占。

② PreemptionPolicy:搶占策略由 Pod 的 preemptionPolicy 字段定義,常見的設(shè)置包括:

  • PreemptLowerPriority:默認設(shè)置,允許高優(yōu)先級 Pod 搶占低優(yōu)先級 Pod。
  • DoNotPreempt:禁止搶占,Pod 只能在資源可用時調(diào)度,不會搶占其他 Pod。

(2) 搶占過程

  • 資源緊張:當集群的資源(如 CPU、內(nèi)存)不足時,調(diào)度器會評估哪些 Pod 可能被驅(qū)逐。
  • 驅(qū)逐低優(yōu)先級 Pod:調(diào)度器會選擇優(yōu)先級低的、符合資源釋放條件的 Pod 驅(qū)逐。被驅(qū)逐的 Pod 狀態(tài)會變?yōu)?Evicted,并重新進入調(diào)度隊列。
  • Pod 重新調(diào)度:驅(qū)逐后的低優(yōu)先級 Pod 會被調(diào)度器重新調(diào)度到其他節(jié)點上,前提是有足夠資源。

3. 搶占對調(diào)度的影響

  • 高優(yōu)先級任務的保障:通過搶占機制,Kubernetes 能夠確保關(guān)鍵任務(如高優(yōu)先級應用)能夠及時獲得資源。
  • 搶占和驅(qū)逐的區(qū)別:搶占通常指的是調(diào)度器主動將低優(yōu)先級的 Pod 從節(jié)點上移除,而驅(qū)逐是在節(jié)點資源壓力過大或 Pod 不健康時,由 Kubernetes 自動觸發(fā)的操作。

三、驅(qū)逐(Eviction)

1. 驅(qū)逐概述

驅(qū)逐是指Kubernetes將運行中的Pod從節(jié)點上強制移除,通常是因為節(jié)點資源不足(如CPU、內(nèi)存不足)或者Pod違反了某些限制(如超出資源配額)。

2. 驅(qū)逐的觸發(fā)條件

  • 資源壓力:當節(jié)點的資源(如內(nèi)存、CPU)達到某個閾值時,Kubernetes會嘗試通過驅(qū)逐Pod來釋放資源。特別是在節(jié)點內(nèi)存壓力較大時,Kubernetes會優(yōu)先驅(qū)逐使用大量內(nèi)存的Pod。
  • 節(jié)點資源的超限:節(jié)點上的資源消耗達到配置的閾值時,Kubernetes會進行Pod驅(qū)逐以恢復節(jié)點的資源平衡。驅(qū)逐會遵循一定的優(yōu)先級策略,通常低優(yōu)先級、非持久化Pod(如ephemeral類型)會被優(yōu)先驅(qū)逐。
  • Pod的liveness或readiness探針失?。喝绻鸓od的健康檢查失敗,Kubernetes會將其驅(qū)逐,并且嘗試重新調(diào)度到其他節(jié)點。
  • OOM(Out of Memory)殺死Pod:當節(jié)點上的內(nèi)存不足時,操作系統(tǒng)可能會觸發(fā)OOM Killer(操作系統(tǒng)的內(nèi)存回收機制)殺死部分進程,Kubernetes則會根據(jù)OOM事件驅(qū)逐相關(guān)的Pod。

3. 驅(qū)逐策略

Kubernetes中的驅(qū)逐策略有兩種類型:

  • 優(yōu)先驅(qū)逐策略:優(yōu)先驅(qū)逐高資源消耗的Pod(如內(nèi)存占用高的Pod),并且通常會優(yōu)先驅(qū)逐低優(yōu)先級的Pod。
  • 優(yōu)先級驅(qū)逐:如果Pod的優(yōu)先級較低,Kubernetes會優(yōu)先考慮驅(qū)逐這些Pod,從而確保高優(yōu)先級Pod能夠獲得資源。

4. 驅(qū)逐過程

  • 驅(qū)逐請求:當節(jié)點的資源壓力增大時,Kubernetes會評估當前節(jié)點上所有Pod的資源使用情況。
  • Pod選擇:Kubernetes會根據(jù)Pod的優(yōu)先級、資源使用量、Pod的類型(如持久性或臨時性)來選擇哪些Pod需要被驅(qū)逐。
  • 驅(qū)逐Pod:一旦Pod被選擇驅(qū)逐,Kubernetes會通過API向該Pod發(fā)出驅(qū)逐命令,通知調(diào)度器將其從節(jié)點上移除。

5. 驅(qū)逐的影響

  • Pod重新調(diào)度:被驅(qū)逐的Pod會被重新調(diào)度到其他節(jié)點上,前提是集群中有足夠的資源。
  • Pod的生命周期:Pod被驅(qū)逐后,會進入Pending狀態(tài),然后調(diào)度器會嘗試根據(jù)集群的資源狀況將其調(diào)度到其他節(jié)點。

四、調(diào)度、搶占和驅(qū)逐的交互

調(diào)度、搶占和驅(qū)逐之間存在緊密的聯(lián)系,它們共同決定了Pod在集群中的運行和資源分配。調(diào)度器不僅負責Pod的初始調(diào)度,還會根據(jù)Pod的優(yōu)先級、資源需求以及集群的負載情況,在運行過程中做出合理的資源分配決策。

1. 調(diào)度與搶占

調(diào)度器在初次調(diào)度時可能會考慮搶占機制(特別是當資源緊張時)。如果集群資源不足,優(yōu)先級較高的Pod會搶占低優(yōu)先級Pod的資源。

2. 驅(qū)逐與搶占

搶占機制和驅(qū)逐機制有些相似。驅(qū)逐是節(jié)點資源壓力下自動發(fā)生的,而搶占是通過調(diào)度器主動發(fā)起的。

在資源緊張時,搶占和驅(qū)逐可以結(jié)合使用,通過優(yōu)先級調(diào)整、驅(qū)逐低優(yōu)先級Pod來保證高優(yōu)先級Pod的運行。

3. 調(diào)度和驅(qū)逐

調(diào)度器也需要在節(jié)點資源變動時(如節(jié)點資源不足或發(fā)生故障時)做出決策。如果Pod運行在一個資源即將耗盡的節(jié)點上,調(diào)度器可能會選擇將Pod重新調(diào)度到一個資源充足的節(jié)點。

理解這三個機制如何協(xié)同工作,有助于更好地管理Kubernetes集群,優(yōu)化資源分配,并確保高優(yōu)先級應用能夠在集群中正常運行。

責任編輯:趙寧寧 來源: 運維李哥不背鍋
相關(guān)推薦

2023-02-09 16:47:34

KubernetesPod優(yōu)先級

2022-05-16 08:27:20

KubernetePodLinux

2009-01-19 13:35:57

ETLEAI數(shù)據(jù)倉庫

2023-03-21 15:26:02

Kubernetes容器開發(fā)

2019-11-20 09:15:53

KubernetesPod

2020-08-21 07:18:21

KubernetesDocker

2024-05-23 08:40:46

Kubernetes預過濾調(diào)度

2023-10-19 19:42:25

IstioPodkubernetes

2024-04-29 13:04:00

K8Spod驅(qū)逐

2010-07-08 15:28:39

UML類圖依賴關(guān)系

2010-07-09 15:29:51

UML類關(guān)系

2024-06-19 09:33:05

2025-01-07 16:00:00

Kubernetes云原生Pod

2021-05-12 08:53:54

Go語言調(diào)度

2021-02-26 14:40:16

Kubernetes調(diào)度器

2016-01-11 10:07:27

容器Kubernetes

2023-11-02 20:05:17

KubernetesPod管理

2021-11-22 08:00:00

Kubernetes容器集群

2017-08-23 11:10:44

Kubernetes 調(diào)度詳解

2021-09-27 06:50:05

PodLivenessStartupProb
點贊
收藏

51CTO技術(shù)棧公眾號