亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

k8s的資源管理

李世贊 / 850人閱讀

摘要:中對容器的資源分配有三種策略。顧名思義是該容器對資源的最低要求和最高使用量限制。磁盤的使用不像有通過和進(jìn)行配置,磁盤用量可以認(rèn)為是一種策略為的資源。在這個時長范圍內(nèi)即便資源使用下降到閾值以下,也不會恢復(fù)。

QoS

k8s中對容器的資源分配有三種策略:

Guaranteed 。該策略下,pod.spec.containers[].resources中會存在cpu或memory的request和limit。顧名思義是該容器對資源的最低要求和最高使用量限制。如果我們配置了limit,沒有配置request,默認(rèn)會以limit的值來定義request。具體的配置可以參考以前的這篇筆記。

BestEffort。當(dāng)pod的描述文件中沒有resource.limit、resource.request相關(guān)的配置時,意味著這個容器想跑多少資源就跑多少資源,其資源使用上限實際上即所在node的capacity。

Burstable。當(dāng)resource.limit和resource.request以上述兩種方式以外的形式配置的時候,就會采用本模式。

QoS目前只用cpu和memory來描述,其中cpu可壓縮資源,當(dāng)一個容器的cpu使用率超過limit時會被進(jìn)行流控,而當(dāng)內(nèi)存超過limit時則會被oom_kill。這里kubelet是通過自己計算容器的oom_score,確認(rèn)相應(yīng)的linux進(jìn)程的oom_adj,oom_adj最高的進(jìn)程最先被oom_kill。
Guaranteed模式的容器oom_score最?。?998,對應(yīng)的oom_adj為0或1,BestEffort模式則是1000,Burstable模式的oom_score隨著其內(nèi)存使用狀況浮動,但會處在2-1000之間。

因此我們可以看出,當(dāng)某個node內(nèi)存被嚴(yán)重消耗時,BestEffort策略的pod會最先被kubelet殺死,其次Burstable(該策略的pods如有多個,也是按照內(nèi)存使用率來由高到低地終止),再其次Guaranteed。

kubelet的eviction機(jī)制

完全依賴于oom_kill并不是一個很好的方案,一來對于cpu要求高的容器沒有作用,二來單純將pod殺死,并不能根本上解決困局,比如pod占用node絕大部分內(nèi)存,加入pod被kill后再次調(diào)度到這個node上,oom的情況還會復(fù)現(xiàn)。所以kubelet增加了一套驅(qū)逐機(jī)制。
eviction機(jī)制適用于:
memory.available 、nodefs.available 、nodefs.inodesFree 、imagefs.available 、imagefs.inodesFree
分別對應(yīng)于node目前可用內(nèi)存、node上用于kubelet運(yùn)行日志、容器掛載磁盤所使用的的文件系統(tǒng)的余量和inode余量、node上用于存放容器鏡像和讀寫層的文件系統(tǒng)的余量、inode余量。

eviction中要設(shè)置觸發(fā)驅(qū)逐的閾值Eviction Thresholds,這個閾值的配置可以是一個定值或一個百分比。如:
memory.available<10%
memory.available<1Gi

Soft Eviction Thresholds

軟驅(qū)逐機(jī)制表示,當(dāng)node的內(nèi)存/磁盤空間達(dá)到一定的閾值后,我要觀察一段時間,如果改善到低于閾值就不進(jìn)行驅(qū)逐,若這段時間一直高于閾值就進(jìn)行驅(qū)逐。
這里閾值通過參數(shù)--eviction-soft配置,樣例如上;觀察時間通過參數(shù)--eviction-soft-grace-period進(jìn)行配置,如1m30s。
另外還有一個參數(shù)eviction-max-pod-grace-period,該參數(shù)會影響到要被驅(qū)逐的pod的termination time,即終止該pod的容器要花費(fèi)的時間。

Hard Eviction Thresholds

強(qiáng)制驅(qū)逐機(jī)制則簡單的多,一旦達(dá)到閾值,立刻把pod從本地kill,驅(qū)逐eviction-hard參數(shù)配置,樣例亦如上。

pod eviction

當(dāng)資源使用情況觸發(fā)了驅(qū)逐條件時,kubelet會啟動一個任務(wù)去輪流停止運(yùn)行中的pod,直到資源使用狀況恢復(fù)到閾值以下。以硬驅(qū)逐為例,整體流程是:

每隔一段時間從cadvisor中獲取資源使用情況,發(fā)現(xiàn)觸發(fā)了閾值;

從運(yùn)行中的pod里找到QoS策略最開放的一個,比如策略為bestEffort的一個pod(即便這個pod沒有吃多少內(nèi)存,大部分內(nèi)存是另一個策略為burstable,但內(nèi)存使用率也很高的pod),kubelet停止該pod對應(yīng)的所有容器,然后將pod狀態(tài)更新為Failed。如果該pod長時間沒有被成功kill掉,kubelet會再找一個pod進(jìn)行驅(qū)逐。

檢查內(nèi)存用量是否恢復(fù)到閾值以下,如果沒有,則重復(fù)第二步(這里就要干掉那個罪魁禍?zhǔn)琢耍?。一直到?nèi)存使用情況恢復(fù)到閾值以下為止。

有幾個要注意的點是:

kubelet挑選pod進(jìn)行驅(qū)逐的策略,就是按照QoS的策略開放度排序,而同一個QoS的多個pod中,kubelet會優(yōu)先驅(qū)逐使用觸發(fā)指標(biāo)資源最多的一個。

磁盤的使用不像memory有通過request和limit進(jìn)行配置,磁盤用量可以認(rèn)為是一種QoS策略為BestEffort的資源。當(dāng)觸發(fā)磁盤資源不足時,kubelet會做一些額外的工作,比如清理已經(jīng)dead的pod的容器日志,清理沒有被使用的容器鏡像,當(dāng)然kubelet也會挑磁盤使用量(包括掛載本地volume空間+容器log大小,若是imagefs指標(biāo)超額,此處還要加上容器運(yùn)行時讀寫層的文件大小)最大的一個pod進(jìn)行驅(qū)逐。

node condition


如上圖,當(dāng)軟驅(qū)逐或者硬驅(qū)逐觸發(fā)時,kubelet會嘗試干掉一個pod,并且會將自身的狀態(tài)從驅(qū)逐的指標(biāo)信息中映射過來,比如內(nèi)存使用超標(biāo)觸發(fā)驅(qū)逐,node的condtion就會變成memoryPressure,這個condition伴隨的kubelet定時的心跳報文上傳到master,記錄在etcd中。在調(diào)度器進(jìn)行調(diào)度時,會以這些condition作為調(diào)度條件的參考。比如,處于diskPressure的node,調(diào)度器就不會再將任何pod調(diào)度上去。否則一旦磁盤空間用滿,node上的容器可能會嚴(yán)重崩潰。

但如果node的內(nèi)存在閾值上下波動,condition被反復(fù)更新為pressure或正常,那么pod被誤調(diào)度到node上也會很耽誤事,所以用eviction-pressure-transition-period參數(shù)指定觸發(fā)eviction后condition更新一次后要保留改狀態(tài)的最小時長。在這個時長范圍內(nèi)即便資源使用下降到閾值以下,condition也不會恢復(fù)。

其他

Minimum eviction reclaim 我們擔(dān)心node可能驅(qū)逐了一個小pod后,指標(biāo)就只是稍低于閾值,那么一旦其他pod的指標(biāo)稍一上來,該node就又要進(jìn)行eviction。所以用這個參數(shù):
--eviction-minimum-reclaim(值如"memory.available=0Mi,nodefs.available=500Mi,imagefs.available=2Gi")進(jìn)行限定,一旦發(fā)生了eviction,必須要保證node的某指標(biāo)用量低于(該指標(biāo)閾值-本參數(shù)指定的該指標(biāo)值)才認(rèn)為node恢復(fù)正常,否則還要接著驅(qū)逐pod。
簡單的說,該參數(shù)表示的是node進(jìn)行驅(qū)逐工作后要達(dá)到的效果是低于閾值多少

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/33037.html

相關(guān)文章

  • 利用K8S技術(shù)棧打造個人私有云(連載之:K8S資源控制)

    摘要:將用戶命令通過接口傳送給,從而進(jìn)行資源的增刪改等操作。要使用編寫應(yīng)用程序,當(dāng)下大多語言都可以很方便地去實現(xiàn)請求來操作的接口從而控制和查詢資源,但本文主要是利用已有的客戶端來更加優(yōu)雅地實現(xiàn)的資源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技術(shù)棧打造個人私有云系列文章目錄】 利用K8S...

    Reducto 評論0 收藏0
  • 利用K8S技術(shù)棧打造個人私有云(連載之:K8S資源控制)

    摘要:將用戶命令通過接口傳送給,從而進(jìn)行資源的增刪改等操作。要使用編寫應(yīng)用程序,當(dāng)下大多語言都可以很方便地去實現(xiàn)請求來操作的接口從而控制和查詢資源,但本文主要是利用已有的客戶端來更加優(yōu)雅地實現(xiàn)的資源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技術(shù)棧打造個人私有云系列文章目錄】 利用K8S...

    Render 評論0 收藏0
  • Why Kubernetes ,我所理解docker與k8s

    摘要:去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與。今天想先談?wù)劊依斫獾娜萜魇鞘裁?,以及為什么它們能火起來。一個容器鏡像的實質(zhì)就是程序進(jìn)程加所有運(yùn)行時環(huán)境及配置依賴的集合。這里再談?wù)勎依斫獾?。而,就是目前的容器編排的平臺的事實標(biāo)準(zhǔn)了。 去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與Kubernetes。邊惡補(bǔ)相關(guān)知識的同時,也想把學(xué)到的內(nèi)容和自己的理解整理出來。學(xué)習(xí)的途徑包括k8s官方文檔...

    Taste 評論0 收藏0
  • Why Kubernetes ,我所理解docker與k8s

    摘要:去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與。今天想先談?wù)劊依斫獾娜萜魇鞘裁?,以及為什么它們能火起來。一個容器鏡像的實質(zhì)就是程序進(jìn)程加所有運(yùn)行時環(huán)境及配置依賴的集合。這里再談?wù)勎依斫獾摹6?,就是目前的容器編排的平臺的事實標(biāo)準(zhǔn)了。 去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與Kubernetes。邊惡補(bǔ)相關(guān)知識的同時,也想把學(xué)到的內(nèi)容和自己的理解整理出來。學(xué)習(xí)的途徑包括k8s官方文檔...

    maochunguang 評論0 收藏0
  • K8SapiVersion該用哪個

    摘要:如版本之前版本到版本之間版本之后一各種的含義該軟件可能包含錯誤。啟用一個功能可能會導(dǎo)致隨時可能會丟棄對該功能的支持,恕不另行通知軟件經(jīng)過很好的測試。啟用功能被認(rèn)為是安全的。 本篇文章來自Terraform與Kubernetes中關(guān)于Deployment apps/v1的吐槽 Kubernetes的官方文檔中并沒有對apiVersion的詳細(xì)解釋,而且因為K8S本身版本也在快速迭代,有些...

    ziwenxie 評論0 收藏0
  • Kubernetes在混合云架構(gòu)下應(yīng)用

    摘要:但考慮到該用戶在跨集群模式下的困擾,開始策劃將托管云物理機(jī)納入現(xiàn)有集群統(tǒng)一管理的方案,即在混合云架構(gòu)下僅需部署管理一套集群。托管云物理機(jī)納入UK8S集群統(tǒng)一管理后,可實現(xiàn)托管云物理機(jī)保障平峰時業(yè)務(wù)正常運(yùn)行,高峰時期利用UK8S快速擴(kuò)容公有云資源的理想應(yīng)用場景,繼而提升混合云的可用性。 ——海豹他趣技術(shù)負(fù)責(zé)人 張嵩 混合云的業(yè)務(wù)模式 廈門海豹他趣信息技術(shù)股份有限公司于2012年4...

    BenCHou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<