ResourceQuota準(zhǔn)入控制器
ResourceQuota準(zhǔn)入控制器是k8s上內(nèi)置的準(zhǔn)入控制器,默認(rèn)該控制器是啟用的狀態(tài),它主要作用是用來限制一個名稱空間下的資源的使用,它能防止在一個名稱空間下的pod被過多創(chuàng)建時,導(dǎo)致過多占用k8s資源,簡單講它是用來在名稱空間級別限制用戶的資源使用。
限制cpu、內(nèi)存、pod、deployment數(shù)量
創(chuàng)建resourcequota資源
kubectl create ns quota
cat resourcequota-1.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-test
namespace: quota
spec:
hard:
pods: "6"
requests.cpu: "2"
requests.memory: 2Gi
limits.cpu: "4"
limits.memory: 10Gi
count/deployments.apps: "6"
persistentvolumeclaims: "6"
kubectl apply -f resourcequota-1.yaml
創(chuàng)建pod進(jìn)行測試
資源清單YAML文件解讀:
spec.hard字段是用來定義對應(yīng)名稱空間下的資源限制規(guī)則;pods用來限制在對應(yīng)名稱空間下的pod數(shù)量,requests.cpu字段用來限制對應(yīng)名稱空間下所有pod的cpu資源的下限總和;requests.memory用來限制對應(yīng)名稱空間下pod的內(nèi)存資源的下限總和;limits.cpu用來限制對應(yīng)名稱空間下的podcpu資源的上限總和,limits.memory用來限制對應(yīng)名稱空間下pod內(nèi)存資源上限總和;count/deployments.apps用來限制對應(yīng)名稱空間下apps群組下的deployments的個數(shù);
以上配置清單表示,在quota名稱空間下運(yùn)行的pod數(shù)量不能超過6個,所有pod的cpu資源下限總和不能大于2個核心,內(nèi)存資源下限總和不能大于2G,cpu上限資源總和不能大于4個核心,內(nèi)存上限總和不能超過10G,apps群組下的deployments控制器不能超過6個, pvc個數(shù)不能超過6個;以上條件中任意一個條目不滿足,都將無法在對應(yīng)名稱空間創(chuàng)建對應(yīng)的資源。
cat quota-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: quota
namespace: quota
spec:
replicas: 7
selector:
matchLabels:
app: quota
template:
metadata:
labels:
app: quota
spec:
containers:
- name: myapp
image: janakiramm/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources:
requests:
cpu: 10m
memory: 10Mi
limits:
cpu: 10m
memory: 10Mi
kubectl apply -f quota-deployment.yaml
kubectl get pods -n quota
NAME READY STATUS RESTARTS AGE
quota-6d5c459f69-4q86p 1/1 Running 0 8s
quota-6d5c459f69-7kchv 1/1 Running 0 8s
quota-6d5c459f69-dgzl7 1/1 Running 0 8s
quota-6d5c459f69-g6c8j 1/1 Running 0 9s
quota-6d5c459f69-hfdng 1/1 Running 0 9s
quota-6d5c459f69-nfb7p 1/1 Running 0 9s
限制存儲空間大小
vim resourcequota-2.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-storage-test
namespace: quota
spec:
hard:
requests.storage: "5Gi"
persistentvolumeclaims: "5"
requests.ephemeral-storage: "1Gi"
limits.ephemeral-storage: "2Gi"
kubectl apply -f resourcequota-2.yaml
備注:requests.storage用來限制對應(yīng)名稱空間下的存儲下限總和,persistenvolumeclaims用來限制pvc總數(shù)量,requests.ephemeral-storage用來現(xiàn)在使用本地臨時存儲的下限總?cè)萘?;limits.ephemeral-storage用來限制使用本地臨時存儲上限總?cè)萘浚灰陨吓渲帽硎驹赿efault名稱空間下非停止?fàn)顟B(tài)的容器存儲下限總?cè)萘坎荒艹^5G,pvc的數(shù)量不能超過5個,本地臨時存儲下限容量不能超過1G,上限不能超過2G。
LimitRanger準(zhǔn)入控制器
LimitRanger準(zhǔn)入控制器是k8s上一個內(nèi)置的準(zhǔn)入控制器,LimitRange是k8s上的一個標(biāo)準(zhǔn)資源,它主要用來定義在某個名稱空間下限制pod或pod里的容器對k8s上的cpu和內(nèi)存資源使用;它能夠定義我們在某個名稱空間下創(chuàng)建pod時使用的cpu和內(nèi)存的上限和下限以及默認(rèn)cpu、內(nèi)存的上下限。
如果我們創(chuàng)建pod時定義了資源上下限,但不滿足LimitRange規(guī)則中定義的資源上下限,此時LimitRanger就會拒絕我們創(chuàng)建此pod;如果我們在LimitRange規(guī)則中定義了默認(rèn)的資源上下限制,我們創(chuàng)建資源沒有指定其資源限制,它默認(rèn)會使用LimitRange規(guī)則中的默認(rèn)資源限制;同樣的邏輯LimitRanger可以限制一個pod使用資源的上下限,它還可以限制pod中的容器的資源上下限,比限制pod更加精準(zhǔn);不管是針對pod還是pod里的容器,它始終只是限制單個pod資源使用。
cat limitrange.yaml
apiVersion: v1
kind: Namespace
metadata:
name: limit
---
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-memory
namespace: limit
spec:
limits:
- default:
cpu: 1000m
memory: 1000Mi
defaultRequest:
cpu: 500m
memory: 500Mi
min:
cpu: 500m
memory: 500Mi
max:
cpu: 2000m
memory: 2000Mi
maxLimitRequestRatio:
cpu: 4
memory: 4
type: Container
kubectl apply -f limitrange.yaml
- 備注:以上清單主要定義了兩個資源,一個創(chuàng)建limit名稱空間,一個是在對應(yīng)limit名稱空間下定義了LimitRange資源;其中LimitRange資源的名稱為cpu-memory,default字段用來指定默認(rèn)容器資源上限值;defaultRequest用來指定默認(rèn)容器資源下限值;min字段用來指定限制用戶指定的資源下限不能小于對應(yīng)資源的值;max是用來限制用戶指定資源上限值不能大于該值;maxLimitRequestRatio字段用來指定資源的上限和下限的比值;即上限是下限的多少倍;type是用來描述對應(yīng)資源限制的級別,該字段有兩個值pod和container。
- 上述資源清單表示在該名稱空間下創(chuàng)建pod時,默認(rèn)不指定其容器的資源限制,就限制對應(yīng)容器最少要有0.5個核心的cpu和500M的內(nèi)存;最大為1個核心cpu,1g內(nèi)存;如果我們手動定義了容器的資源限制,那么對應(yīng)資源限制最小不能小于cpu為0.5個核心,內(nèi)存為500M,最大不能超過cpu為2個核心,內(nèi)存為2000M;
- 如果我們在創(chuàng)建pod時,只指定了容器的資源上限或下限,那么上限最大是下限的的4倍,如果指定cpu上限為2000m那么下限一定不會小于500m,如果只指定了cpu下限為500m那么上限最大不會超過2000m,對于內(nèi)存也是同樣的邏輯。
在limit名稱空間創(chuàng)建pod,不指定資源,看看是否會被limitrange規(guī)則自動附加其資源限制
cat pod-limit.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-demo
namespace: limit
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
kubectl apply -f pod-limit.yaml
kubectl describe pods nginx-pod-demo -n limit
文章來源:http://www.zghlxwxcb.cn/news/detail-740960.html
通過上面結(jié)果可以看到我們在limit名稱空間下創(chuàng)建的pod沒有指定其容器資源限制,創(chuàng)建pod后,其內(nèi)部容器自動就有了默認(rèn)的資源限制;其大小就是我們在定義LimitRange規(guī)則中的default和defaultRequest字段中指定的資源限制。文章來源地址http://www.zghlxwxcb.cn/news/detail-740960.html
創(chuàng)建pod,指定cpu請求是100m,看看是否允許創(chuàng)建
vim pod-request.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-request
namespace: limit
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
resources:
requests:
cpu: 100m
kubectl apply -f pod-request.yaml
Error from server (Forbidden): error when creating "pod-request.yaml": pods "pod-request" is forbidden: [minimum cpu usage per Container is 500m, but request is 100m, cpu max limit to request ratio per Container is 4, but provided ratio is 10.000000]
到了這里,關(guān)于學(xué)習(xí)筆記三十三:準(zhǔn)入控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!