docker内存阀值_kubernetes调度之资源耗尽处理配置
本篇將介紹如何使用kubelet處理資源耗盡的情況
當(dāng)可用的計(jì)算機(jī)資源非常低的時(shí)候,kubelet仍然要保證節(jié)點(diǎn)的穩(wěn)定性.當(dāng)處理不可壓縮的計(jì)算機(jī)資源(比如內(nèi)存或磁盤空間)時(shí),這尤其重要,當(dāng)這些資源被耗盡時(shí),節(jié)點(diǎn)將變得不穩(wěn)定
驅(qū)離策略
kubelet會積極的監(jiān)視并阻止可用計(jì)算機(jī)資源耗盡.這種情況下,kubelet會終止一個(gè)或者多個(gè)pod來重新取回耗盡的資源,當(dāng)kubelet終止一個(gè)pod時(shí),它將會終止pod的所有容器并把PodPhase設(shè)置為Failed
驅(qū)離信號
kubelet支持基于下面列表中描述的驅(qū)離信號的驅(qū)離策略.每一個(gè)信號值都由后面description列來描述,并且它們是基于kubelet的summary API
Eviction Signal
Description
memory.available
memory.available := node.status.capacity[memory] - node.stats.memory.workingSet
nodefs.available
nodefs.available := node.stats.fs.available
nodefs.inodesFree
nodefs.inodesFree := node.stats.fs.inodesFree
imagefs.available
imagefs.available := node.stats.runtime.imagefs.available
imagefs.inodesFree
imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree
以上的信號同時(shí)支持字面量或者百分比值.百分比值根據(jù)每個(gè)信號的總?cè)萘縼碛?jì)算
memory.available的值從cgroup里衍生出來,而不是通過free -m,這一點(diǎn)很重要因?yàn)閒ree -m在容器里是無效的
kubelet僅支持以下兩種文件類型分區(qū):
nodefs文件系統(tǒng),kubelet用于存儲卷,守護(hù)進(jìn)程log等
imagefs文件系統(tǒng),容器運(yùn)行時(shí)用于存儲鏡像和容器的可寫層
imagefs是可選的,kubelet使用cAdvisor來自動發(fā)現(xiàn).kubelet并不關(guān)心其它文件系統(tǒng).其它類型的配置目前kubelet也不支持,比如把存儲卷和log存放到filesystem是not OK的
驅(qū)離閾值
kubelet支持指定驅(qū)離閾值來來觸發(fā)kubelet回收資源
每一個(gè)閾值都是以下形式的:
[eviction-signal][operator][quantity]
eviction-signal 是上面表中定義的一個(gè)信號token
operator是一種期望的操作符,比如
quantity 驅(qū)離閾值的量,比如1Gi,驅(qū)離閾值也可以是由%百分號表示的百分比值
比如說一個(gè)節(jié)點(diǎn)有10Gi總內(nèi)存值,并且如果可用內(nèi)存的值如果低于1Gi的時(shí)候你想要觸發(fā)驅(qū)離,你可以以如下兩種方式中的任一來定義驅(qū)離閾值
memory.available<10%或memory.available<1Gi但是你不能兩者同時(shí)使用.
軟驅(qū)離閾值
軟驅(qū)離閾值和一個(gè)包含管理員指定的優(yōu)雅時(shí)間的驅(qū)離閾值成對出現(xiàn).驅(qū)離信號發(fā)出后,在優(yōu)雅時(shí)間沒有超出之前,kubelet不會回收資源.如果不指定優(yōu)雅時(shí)間,kubelet會在一開始就返回錯誤
此外,如果軟驅(qū)離閾值被滿足,operator可以指定被驅(qū)離時(shí)最大允許的pod優(yōu)雅終止時(shí)間.如果指定了,kubelet使用pod.Spec.TerminationGracePeriodSeconds和最大允許的優(yōu)雅終止時(shí)間兩者中較小的一個(gè)值.如果沒有指定,kubelet會馬上殺死pod
以下標(biāo)識被用于支持軟驅(qū)離閾值
eviction-soft描述了一系列軟驅(qū)離閾值.
eviction-soft-grace-period描述了一系列驅(qū)離時(shí)間,(比如memory.available=1m30s),對應(yīng)在驅(qū)離發(fā)生之前,軟件驅(qū)離閾值持續(xù)的時(shí)間
eviction-max-pod-grace-period描述了當(dāng)軟驅(qū)離閾值被滿足時(shí),最大允許的優(yōu)雅終止時(shí)間(單位是秒)
硬驅(qū)離閾值
硬驅(qū)離閾值沒有優(yōu)雅時(shí)段,kubelet會立馬對相關(guān)的資源采取動作.如果硬驅(qū)離閾值被滿足,kubelet會立馬殺死pod,而沒有優(yōu)雅終止時(shí)段.
以下標(biāo)識可以被用于配置硬驅(qū)離閾值
memory.available<100Mi
nodefs.available<10%
nodefs.inodesFree<5%
imagefs.available<15%
驅(qū)離監(jiān)視時(shí)間間隔
通過housekeeping-interval
節(jié)點(diǎn)狀態(tài)
kubelet把一個(gè)或多個(gè)驅(qū)離信號映射到的對應(yīng)的節(jié)點(diǎn)狀態(tài)上
如果硬驅(qū)離閾值被滿足,或者不依賴于優(yōu)雅時(shí)段的軟驅(qū)離閾值被滿足,kubelet會報(bào)告一種狀態(tài)來反映節(jié)點(diǎn)處于壓力之下
以下是節(jié)點(diǎn)狀態(tài)和特定驅(qū)離信號間的關(guān)系
Node Condition
Eviction Signal
Description
MemoryPressure
memory.available
Available memory on the node has satisfied an eviction threshold
DiskPressure
nodefs.available, nodefs.inodesFree, imagefs.available, or imagefs.inodesFree
Available disk space and inodes on either the node’s root filesystem or image filesystem has satisfied an eviction threshold
kubelet會繼續(xù)以--node-status-update-frequency指定的值(默認(rèn)為10秒)來報(bào)告更新的節(jié)點(diǎn)狀態(tài)
回收節(jié)點(diǎn)級別的資源
如果驅(qū)離閾值被滿足并且優(yōu)雅時(shí)段已過,kubelet開始啟動對處于壓力的資源的回收工作直到監(jiān)測到壓力信號已經(jīng)消失并且低于定義的閾值
kubelete嘗試優(yōu)先回收節(jié)點(diǎn)級別的資源而不是驅(qū)離pod.如果監(jiān)測到磁盤壓力,如果節(jié)點(diǎn)有容器運(yùn)行時(shí)專用的imagefs,則kubelet回收資源的方式不同
驅(qū)離pod
如果kubelet無法在節(jié)點(diǎn)上回收到足夠的資源,則開始驅(qū)離pod.
kubelet首先會根據(jù)pod使用的資源是否超過了申請的資源,然后根據(jù)他們的優(yōu)先級把要驅(qū)離的pod進(jìn)行排序.
最終kubelet按照以下列出的順序?qū)σ?qū)離的pod進(jìn)行排序:
BestEffort或者Burstable類型pod
總結(jié)
以上是生活随笔為你收集整理的docker内存阀值_kubernetes调度之资源耗尽处理配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 8 my.cfg_搭建lam
- 下一篇: java unsafe park_Jav