k8s 節(jié)點(diǎn)可分配資源限制 Node Allocatable

k8s 節(jié)點(diǎn)健康狀態(tài)

狀態(tài) 釋義
NodeHasSufficientMemory 節(jié)點(diǎn)有足夠的內(nèi)存
NodeHasNoDiskPressure 節(jié)點(diǎn)沒(méi)有磁盤壓力
NodeHasSufficientPID 節(jié)點(diǎn)有足夠的PID
NodeNotReady 節(jié)點(diǎn)未準(zhǔn)備好

k8s 節(jié)點(diǎn)可分配資源限制 Node Allocatable

官方文檔

前言

默認(rèn)kubelet沒(méi)配置資源預(yù)留應(yīng)用沒(méi)做應(yīng)用資源限制情況下,那host上所有資源都是可以給pod調(diào)配使用的,這樣很容易引起集群雪崩效應(yīng)箕戳,比如集群內(nèi)有一臺(tái)上跑的pod沒(méi)做resource limt導(dǎo)致占用資源過(guò)大導(dǎo)致將宿主機(jī)壓死了狮暑,此時(shí)這個(gè)節(jié)點(diǎn)在kubernetes內(nèi)就是一個(gè)no ready的狀態(tài)了圾亏,kubernetes會(huì)將這臺(tái)host上所有的pod在其他節(jié)點(diǎn)上重建救恨,也就意味著那個(gè)有問(wèn)題的pod重新跑在其他正常的節(jié)點(diǎn)上陷揪,將另外正常的節(jié)點(diǎn)壓跨王滤。循懷下去直到集群內(nèi)所有主機(jī)都掛了腿准,這就是集群雪崩效應(yīng)际起。

0. 查看節(jié)點(diǎn)的Capacity和Allocatable

~]# kubectl describe <node_name>
Capacity:
 cpu:                8
 ephemeral-storage:  101917688Ki
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             32939412Ki
 pods:               110
Allocatable:
 cpu:                8
 ephemeral-storage:  93927341106
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             32837012Ki
 pods:               110

一、CGROUP

1. 概念了解

cgroup 是control group的縮寫吐葱,是linux內(nèi)核提供的一種可以限制加叁,記錄,隔離進(jìn)程組所使用的物力資源的機(jī)制唇撬,其中物力資源包含(cpu/memory/io等等). cgroup是將任意進(jìn)程進(jìn)行分組化管理的linux內(nèi)核功能,CGroup 本身是提供將進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu)豫柬,I/O 或內(nèi)存的分配控制等具體的資源管理功能是通過(guò)這個(gè)功能來(lái)實(shí)現(xiàn)的扑浸。這些具體的資源管理功能稱為 CGroup 子系統(tǒng)或控制器烧给。CGroup 子系統(tǒng)有控制內(nèi)存的 Memory 控制器、控制進(jìn)程調(diào)度的 CPU 控制器等喝噪。

2. DOCKER 中的CGROUP 驅(qū)動(dòng)

  • systemd cgroup driver

    systemd cgroup driver 是systemd本身提供了一個(gè)cgroup的管理方式,使用systemd做cgroup驅(qū)動(dòng)的話酝惧,所有的cgroup操作都必須通過(guò)systemd的接口來(lái)完成,不能手動(dòng)更改cgroup的文件

  • cgroupfs cgroup driver

    cgroupfs 比較好理解晚唇。比如說(shuō)要限制內(nèi)存是多少巫财、要用 CPU share 為多少?其實(shí)直接把 pid 寫入對(duì)應(yīng)的一個(gè) cgroup 文件哩陕,然后把對(duì)應(yīng)需要限制的資源也寫入相應(yīng)的 memory cgroup 文件和 CPU 的 cgroup 文件就可以了.

二、配置docker和kubelet的cgroup驅(qū)動(dòng)

默認(rèn)kubeadm安裝的kubernetes集群 cgroup驅(qū)動(dòng)為systemd闽瓢,這樣是開啟不了Kubelet Node Allocatable

先確認(rèn)docker的cgroup driver:

[root@m1 ~]# docker info | grep "Cgroup Driver"
Cgroup Driver: cgroupfs

如果確認(rèn)docker的Cgroup Driver不是 cgroupfs心赶,則可以通過(guò)以下方法配置。

  • docker 配置cgroup驅(qū)動(dòng)為cgroupfs

編輯 vim /etc/docker/daemon.json

{
  "exec-opts": ["native.cgroupdriver=cgroupfs"],
  "registry-mirrors": ["http://f1361db2.m.daocloud.io"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5"
  },
  "insecure-registries":["192.168.108.133:5000"]
}
  • 修改kubelet cgroup 驅(qū)動(dòng)systemd為cgroupfs

    編輯 /var/lib/kubelet/kubeadm-flags.env 届谈,給KUBELET_KUBEADM_ARGS添加 --cgroup-driver=cgroupfs

KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=nexus.10010sh.cn/pause:3.1"

三枯夜、Kubelet Node Allocatable

1. 概念
  • Kubelet Node Allocatable用來(lái)為Kube組件和System進(jìn)程預(yù)留資源湖雹,從而保證當(dāng)節(jié)點(diǎn)出現(xiàn)滿負(fù)荷時(shí)也能保證Kube和System進(jìn)程有足夠的資源曙搬。
  • 目前支持cpu, memory, ephemeral-storage三種資源預(yù)留。
  • Node Capacity是Node的所有硬件資源纵装,kube-reserved是給kube組件預(yù)留的資源,system-reserved是給System進(jìn)程預(yù)留的資源诗箍, eviction-threshold(閾值)是kubelet eviction(收回)的閾值設(shè)定挽唉,allocatable才是真正scheduler調(diào)度Pod時(shí)的參考值(保證Node上所有Pods的request resource不超過(guò)Allocatable)
  • Node Allocatable Resource = Node Capacity - Kube-reserved - system-reserved - eviction-threshold
2. 配置 修改/var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=nexus.10010sh.cn/pause:3.1 \
    --enforce-node-allocatable=pods,kube-reserved,system-reserved \
    --kube-reserved-cgroup=/system.slice/kubelet.service \
    --system-reserved-cgroup=/system.slice \
    --kube-reserved=cpu=1,memory=1Gi \
    --system-reserved=cpu=1,memory=1Gi  \
    --eviction-hard=memory.available<5%,nodefs.available<10%,imagefs.available<10% \
    --eviction-soft=memory.available<10%,nodefs.available<15%,imagefs.available<15% \
    --eviction-soft-grace-period=memory.available=2m,nodefs.available=2m,imagefs.available=2m \
    --eviction-max-pod-grace-period=30 \
    --eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=500Mi,imagefs.available=500Mi"
3. 配置解析

1). 開啟為kube組件和系統(tǒng)守護(hù)進(jìn)程預(yù)留資源的功能

--enforce-node-allocatable=pods,kube-reserved,system-reserved

2). 設(shè)置k8s組件的cgroup

--kube-reserved-cgroup=/system.slice/kubelet.service

3). 設(shè)置系統(tǒng)守護(hù)進(jìn)程的cgroup

--system-reserved-cgroup=/system.slice

4). 配置為k8s組件預(yù)留資源的大小瓶籽,CPU、MEM

--kube-reserved=cpu=1,memory=1G

5). 配置為系統(tǒng)進(jìn)程(諸如 sshd塑顺、udev 等系統(tǒng)守護(hù)進(jìn)程)預(yù)留資源的大小,CPU扬绪、MEM

--system-reserved=cpu=1,memory=1Gi

6). 驅(qū)逐pod的配置:硬閾值(保證95%的內(nèi)存利用率)

--eviction-hard=memory.available<5%,nodefs.available<10%,imagefs.available<10%

我用k8s 1.14版本做實(shí)驗(yàn)時(shí)糙俗,這個(gè)選項(xiàng)還不支持百分比,可以用實(shí)際容量數(shù)字巧骚,例如:--eviction-hard=memory.available<500Mi格二。

7). 驅(qū)逐pod的配置:軟閾值

--eviction-soft=memory.available<10%,nodefs.available<15%,imagefs.available<15%

8). 定義達(dá)到軟閾值之后顶猜,持續(xù)時(shí)間超過(guò)多久才進(jìn)行驅(qū)逐

--eviction-soft-grace-period=memory.available=2m,nodefs.available=2m,imagefs.available=2m

9). 驅(qū)逐pod前最大等待時(shí)間=min(pod.Spec.TerminationGracePeriodSeconds, eviction-max-pod-grace-period),單位秒

--eviction-max-pod-grace-period=30

10). 至少回收多少資源长窄,才停止驅(qū)逐

--eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=500Mi,imagefs.available=500Mi

四、修改Kubelet啟動(dòng)service文件 /lib/systemd/system/kubelet.service

[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/home/

[Service]
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target

五疮绷、重啟kubelet 和docker服務(wù),再次查看節(jié)點(diǎn)的Capacity和Allocatable

可以看到配置已經(jīng)生效

~]# systemctl restart docker && systemctl restart kubelet
~]# kubectl describe <node>
Capacity:
 cpu:                8
 ephemeral-storage:  102106104Ki
 hugepages-2Mi:      0
 memory:             32909464Ki
 pods:               110
Allocatable:
 cpu:                6
 ephemeral-storage:  94100985291
 hugepages-2Mi:      0
 memory:             30709912Ki
 pods:               110

轉(zhuǎn)自:https://chulinx.github.io/2019/12/11/Kubernetes1.16配置節(jié)點(diǎn)資源預(yù)留/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市只冻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌山橄,老刑警劉巖舍悯,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異丧诺,居然都是意外死亡奄薇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門呵晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沫屡,“玉大人,你說(shuō)我怎么就攤上這事沮脖。” “怎么了驶俊?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵免姿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我故俐,道長(zhǎng),這世上最難降的妖魔是什么药版? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任刚陡,我火速辦了婚禮,結(jié)果婚禮上筐乳,老公的妹妹穿的比我還像新娘。我一直安慰自己氓皱,他們只是感情好勃刨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廷区,像睡著了一般贾铝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垢揩,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天叁巨,我揣著相機(jī)與錄音,去河邊找鬼锋勺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苍姜,可吹牛的內(nèi)容都是我干的悬包。 我是一名探鬼主播馍乙,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼垫释,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撑瞧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起订咸,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酬诀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后父叙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肴裙,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年甜癞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宛乃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乔煞,死狀恐怖柒室,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情空骚,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布囤屹,位于F島的核電站逢渔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏智厌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一敷扫、第九天 我趴在偏房一處隱蔽的房頂上張望诚卸。 院中可真熱鬧,春花似錦合溺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至痰腮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棍丐,已是汗流浹背沧踏。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秘案,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓阱高,卻偏偏與公主長(zhǎng)得像茬缩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子未舟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容