k8s容器資源限制方式
1. k8s容器資源限制
k8s采用request和limit兩種限制類型來(lái)對(duì)資源進(jìn)行分配
- request(資源需求):即運(yùn)行pod的節(jié)點(diǎn)必須滿足運(yùn)行pod的最基本需求才能運(yùn)行pod。
- limit(資源限制):即運(yùn)行pod期間,可能內(nèi)存使用量會(huì)增加,那最多能使用多少內(nèi)存,這就是資源限額。
資源類型:
- CPU的單位是核心數(shù),內(nèi)存的單位是字節(jié)。
- 一個(gè)容器申請(qǐng)0.5各CPU,就相當(dāng)于申請(qǐng)1各CPU的一半,可以加個(gè)后綴m表示千分之一的概念。比如說(shuō)100m的CPU,100豪的CPU和0.1個(gè)CPU都是一樣的。
內(nèi)存單位:
- K,M,G,T,P,E #通常是以1000為換算標(biāo)準(zhǔn)的。
- Ki,Mi,Gi,Ti,Pi,Ei #通常是以1024為換算標(biāo)準(zhǔn)的。
2. 內(nèi)存資源限制
[kubeadm@server2 limit]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: memory-demo
spec:
containers:
- name: memory-demo
image: stress
args:
- --vm
- "1"
- --vm-bytes
- 200M
resources:
requests:
memory: 50Mi
limits:
memory: 100Mi
- 如果容器超過(guò)其內(nèi)存限制,則會(huì)被終止。如果可重新啟動(dòng),則與其他所有類型的運(yùn)行故障一樣,kubelet將重新啟動(dòng)它。
- 如果一個(gè)容器超過(guò)其內(nèi)存要求,那么當(dāng)節(jié)點(diǎn)內(nèi)存不足時(shí),它的pod可能被逐出。

- 當(dāng)資源限制沒(méi)沖突的時(shí)候正常啟動(dòng)
[kubeadm@server1 limit]$ vim pod.yaml
[kubeadm@server1 limit]$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: memory-demo
spec:
containers:
- name: memory-demo
image: k8s/stress
args:
- --vm
- "1"
- --vm-bytes
- 200M
resources:
requests:
memory: 50Mi
limits:
memory: 300Mi
[kubeadm@server1 limit]$


資源限制內(nèi)部機(jī)制使用的是cgroup類型
目錄: /sys/fs/cgroup/systemd
3. cpu資源限制
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
spec:
containers:
- name: cpu-demo
image: stress
args:
- -c
- "2"
resources:
requests:
cpu: "5"
limits:
cpu: "10"
調(diào)度失敗是因?yàn)樯暾?qǐng)的CPU資源超出集群節(jié)點(diǎn)所能提供的資源
但CPU 使用率過(guò)高,不會(huì)被殺死


滿足要求
[kubeadm@server1 limit]$ vim cpulim.yaml
[kubeadm@server1 limit]$ cat cpulim.yaml
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
spec:
containers:
- name: cpu-demo
image: k8s/stress
args:
- -c
- "2"
resources:
requests:
cpu: "1"
limits:
cpu: "2"
[kubeadm@server1 limit]$

4. namespace設(shè)置資源限制
LimitRange資源限制
apiVersion: v1
kind: LimitRange
metadata:
name: limitrange-memory
spec:
limits:
- default:
cpu: 0.5
memory: 512Mi
defaultRequest:
cpu: 0.1
memory: 256Mi
max:
cpu: 1
memory: 1Gi
min:
cpu: 0.1
memory: 100Mi
type: Container
LimitRange 在 namespace 中施加的最小和最大內(nèi)存限制只有在創(chuàng)建和更新pod時(shí)才會(huì)被應(yīng)用。改變LimitRange不會(huì)對(duì)之前創(chuàng)建的pod有影響。
LimitRange - default xx會(huì)自動(dòng)對(duì)沒(méi)有設(shè)置資源限制的pod自動(dòng)添加限制

ResourceQuota設(shè)置配額限制
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard: 硬限制
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi

一旦設(shè)置配額后,后續(xù)的容器必須設(shè)置請(qǐng)求(4種請(qǐng)求都設(shè)置),當(dāng)然,這只是在rq設(shè)置的defult的namespace中
4種請(qǐng)求:每個(gè)容器必須設(shè)置內(nèi)存請(qǐng)求(memory request),內(nèi)存限額(memory limit),cpu請(qǐng)求(cpu request)和cpu限額(cpu limit)
資源會(huì)統(tǒng)計(jì)總的namespace中的資源加以限定,不管是之前創(chuàng)建還是準(zhǔn)備創(chuàng)建
上述創(chuàng)建的ResourceQuota對(duì)象將在default名字空間中添加以下限制:
- 所有容器的內(nèi)存請(qǐng)求總額不得超過(guò)1 GiB。
- 所有容器的內(nèi)存限額總額不得超過(guò)2 GiB。
- 所有容器的CPU請(qǐng)求總額不得超過(guò)1 CPU。
- 所有容器的CPU限額總額不得超過(guò)2 CPU。
5. namespace中pod的配額
apiVersion: v1
kind: ResourceQuota
metadata:
name: pod-demo
spec:
hard:
pods: "2"
設(shè)置Pod配額以限制可以在namespace中運(yùn)行的Pod數(shù)量。

當(dāng)然,以上設(shè)定對(duì)應(yīng)相對(duì)的namespace,其它的namespace沒(méi)有影響
為了后續(xù)不受影響,刪除相應(yīng)的設(shè)定


總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
k8s?service?nodePort無(wú)法訪問(wèn)的問(wèn)題解決
今天有一個(gè)項(xiàng)目做service nodeport轉(zhuǎn)發(fā),結(jié)果設(shè)置完之后發(fā)現(xiàn)外網(wǎng)訪問(wèn)失敗,下面這篇文章主要給大家介紹了關(guān)于k8s?service?nodePort無(wú)法訪問(wèn)的問(wèn)題解決,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
kubernetes?k8s?CRD自定義資源學(xué)習(xí)筆記
這篇文章主要介紹了kubernetes?k8s?CRD自定義資源學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Rainbond配置組件自動(dòng)構(gòu)建部署官方文檔講解
這篇文章主要為大家介紹了Rainbond配置組件自動(dòng)構(gòu)建部署官方文檔講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
K8s生產(chǎn)環(huán)境那些文檔不會(huì)告訴你的坑及解決辦法
K8s作為當(dāng)前最流行的容器編排平臺(tái),在企業(yè)生產(chǎn)環(huán)境中的部署需要綜合考慮高可用性、安全性、性能優(yōu)化等多方面因素,這篇文章主要介紹了K8s生產(chǎn)環(huán)境那些文檔不會(huì)告訴你的坑及解決辦法的相關(guān)資料,需要的朋友可以參考下2026-05-05
K8s準(zhǔn)入控制Admission?Controller深入介紹
本篇我們將聚焦于?kube-apiserver?請(qǐng)求處理過(guò)程中一個(gè)很重要的部分?--?準(zhǔn)入控制器(Admission?Controller)深入講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
Kubernetes訪問(wèn)控制之鑒權(quán)方法詳解
這篇文章主要為大家介紹了Kubernetes訪問(wèn)控制之鑒權(quán)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
K8S?prometheus?operator監(jiān)控工作原理介紹
這篇文章主要為大家介紹了K8S?prometheus?operator監(jiān)控工作原理介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

