W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
FEATURE STATE: Kubernetes v1.20 [stable]
Kubernetes 允許你限制一個(gè) Pod 中可以使用的 進(jìn)程 ID(PID)數(shù)目。你也可以為每個(gè) 節(jié)點(diǎn) 預(yù)留一定數(shù)量的可分配的 PID,供操作系統(tǒng)和守護(hù)進(jìn)程(而非 Pod)使用。
進(jìn)程 ID(PID)是節(jié)點(diǎn)上的一種基礎(chǔ)資源。很容易就會(huì)在尚未超出其它資源約束的時(shí)候就 已經(jīng)觸及任務(wù)個(gè)數(shù)上限,進(jìn)而導(dǎo)致宿主機(jī)器不穩(wěn)定。
集群管理員需要一定的機(jī)制來(lái)確保集群中運(yùn)行的 Pod 不會(huì)導(dǎo)致 PID 資源枯竭,甚而 造成宿主機(jī)上的守護(hù)進(jìn)程(例如 kubelet 或者 kube-proxy 乃至包括容器運(yùn)行時(shí)本身)無(wú)法正常運(yùn)行。 此外,確保 Pod 中 PID 的個(gè)數(shù)受限對(duì)于保證其不會(huì)影響到同一節(jié)點(diǎn)上其它負(fù)載也很重要。
Note:
在某些 Linux 安裝環(huán)境中,操作系統(tǒng)會(huì)將 PID 約束設(shè)置為一個(gè)較低的默認(rèn)值,例如 ?32768
?。這時(shí)可以考慮提升 ?/proc/sys/kernel/pid_max
? 的設(shè)置值。
你可以配置 kubelet 限制給定 Pod 能夠使用的 PID 個(gè)數(shù)。 例如,如果你的節(jié)點(diǎn)上的宿主操作系統(tǒng)被設(shè)置為最多可使用 ?262144
?個(gè) PID,同時(shí)預(yù)期 節(jié)點(diǎn)上會(huì)運(yùn)行的 Pod 個(gè)數(shù)不會(huì)超過(guò) ?250
?,那么你可以為每個(gè) Pod 設(shè)置 ?1000
?個(gè) PID 的預(yù)算,避免耗盡該節(jié)點(diǎn)上可用 PID 的總量。 如果管理員系統(tǒng)像 CPU 或內(nèi)存那樣允許對(duì) PID 進(jìn)行過(guò)量分配(Overcommit),他們也可以 這樣做,只是會(huì)有一些額外的風(fēng)險(xiǎn)。不管怎樣,任何一個(gè) Pod 都不可以將整個(gè)機(jī)器的運(yùn)行 狀態(tài)破壞。這類資源限制有助于避免簡(jiǎn)單的派生炸彈(Fork Bomb)影響到整個(gè)集群的運(yùn)行。
在 Pod 級(jí)別設(shè)置 PID 限制使得管理員能夠保護(hù) Pod 之間不會(huì)互相傷害,不過(guò)無(wú)法 確保所有調(diào)度到該宿主機(jī)器上的所有 Pod 都不會(huì)影響到節(jié)點(diǎn)整體。 Pod 級(jí)別的限制也無(wú)法保護(hù)節(jié)點(diǎn)代理任務(wù)自身不會(huì)受到 PID 耗盡的影響。
你也可以預(yù)留一定量的 PID,作為節(jié)點(diǎn)的額外開(kāi)銷,與分配給 Pod 的 PID 集合獨(dú)立。 這有點(diǎn)類似于在給操作系統(tǒng)和其它設(shè)施預(yù)留 CPU、內(nèi)存或其它資源時(shí)所做的操作, 這些任務(wù)都在 Pod 及其所包含的容器之外運(yùn)行。
PID 限制是與計(jì)算資源 請(qǐng)求和限制相輔相成的一種機(jī)制。不過(guò),你需要用一種不同的方式來(lái)設(shè)置這一限制: 你需要將其設(shè)置到 kubelet 上而不是在 Pod 的 ?.spec
? 中為 Pod 設(shè)置資源限制。 目前還不支持在 Pod 級(jí)別設(shè)置 PID 限制。
Caution:
這意味著,施加在 Pod 之上的限制值可能因?yàn)?nbsp;Pod 運(yùn)行所在的節(jié)點(diǎn)不同而有差別。 為了簡(jiǎn)化系統(tǒng),最簡(jiǎn)單的方法是為所有節(jié)點(diǎn)設(shè)置相同的 PID 資源限制和預(yù)留值。
Kubernetes 允許你為系統(tǒng)預(yù)留一定量的進(jìn)程 ID。為了配置預(yù)留數(shù)量,你可以使用 kubelet 的 ?--system-reserved
? 和 ?--kube-reserved
? 命令行選項(xiàng)中的參數(shù) ?pid=<number>
?。你所設(shè)置的參數(shù)值分別用來(lái)聲明為整個(gè)系統(tǒng)和 Kubernetes 系統(tǒng) 守護(hù)進(jìn)程所保留的進(jìn)程 ID 數(shù)目。
Note:
在 Kubernetes 1.20 版本之前,在節(jié)點(diǎn)級(jí)別通過(guò) PID 資源限制預(yù)留 PID 的能力 需要啟用特性門控 ?SupportNodePidsLimit
?才行。
Kubernetes 允許你限制 Pod 中運(yùn)行的進(jìn)程個(gè)數(shù)。你可以在節(jié)點(diǎn)級(jí)別設(shè)置這一限制, 而不是為特定的 Pod 來(lái)將其設(shè)置為資源限制。 每個(gè)節(jié)點(diǎn)都可以有不同的 PID 限制設(shè)置。 要設(shè)置限制值,你可以設(shè)置 kubelet 的命令行參數(shù) ?--pod-max-pids
?,或者 在 kubelet 的配置文件 中設(shè)置 ?PodPidsLimit
?。
Note:
在 Kubernetes 1.20 版本之前,為 Pod 設(shè)置 PID 資源限制的能力需要啟用 特性門控 ?SupportNodePidsLimit
?才行。
你可以配置 kubelet 使之在 Pod 行為不正常或者消耗不正常數(shù)量資源的時(shí)候?qū)⑵浣K止。 這一特性稱作驅(qū)逐。你可以針對(duì)不同的驅(qū)逐信號(hào) 配置資源不足的處理。 使用 ?pid.available
? 驅(qū)逐信號(hào)來(lái)配置 Pod 使用的 PID 個(gè)數(shù)的閾值。 你可以設(shè)置硬性的和軟性的驅(qū)逐策略。不過(guò),即使使用硬性的驅(qū)逐策略, 如果 PID 個(gè)數(shù)增長(zhǎng)過(guò)快,節(jié)點(diǎn)仍然可能因?yàn)橛|及節(jié)點(diǎn) PID 限制而進(jìn)入一種不穩(wěn)定狀態(tài)。 驅(qū)逐信號(hào)的取值是周期性計(jì)算的,而不是一直能夠強(qiáng)制實(shí)施約束。
Pod 級(jí)別和節(jié)點(diǎn)級(jí)別的 PID 限制會(huì)設(shè)置硬性限制。 一旦觸及限制值,工作負(fù)載會(huì)在嘗試獲得新的 PID 時(shí)開(kāi)始遇到問(wèn)題。 這可能會(huì)也可能不會(huì)導(dǎo)致 Pod 被重新調(diào)度,取決于工作負(fù)載如何應(yīng)對(duì)這類失敗 以及 Pod 的存活性和就緒態(tài)探測(cè)是如何配置的。 可是,如果限制值被正確設(shè)置,你可以確保其它 Pod 負(fù)載和系統(tǒng)進(jìn)程不會(huì)因?yàn)槟硞€(gè) Pod 行為不正常而沒(méi)有 PID 可用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: