资源限制

资源限制

Pod资源限制:

限制两个维度:

pod

cpu、内存、gpu、网络、磁盘io

namespace

对pod使用总资源限制

对pvc使用总资源限制

限制策略

requests: 需求,最低运行环境。但不是立即使用,用多少占多少

limits: 限制,最大使用上限

可限制资源:

CPU资源:

例:1核心的cpu,使用时支持小数、毫核

1c=1000m millicores(毫核)

0.5c=500m

内存资源:

E、P、T、G、M、K

Ei、Pi、Ti、Gi、Mi、Ki

hugepages(大内存页):

不建议手动分配,如果每个系统内存页不同,可能会出现奇怪的问题

hugepages-: 内存

hugepages-2Mi: 80Mi #在默认内存页为4KiB的系统上,如果容器尝试分配超过40个2MiB的大页面(总共 80MiB),则分配失败

gpu:

对于图形计算才用得到,同时也需要物理机有英伟达显卡

需要装相应的插件才能识别gpu资源

nvidia.com/gpu: 1

amd.com/gpu: 1

Qos服务质量类别:

当容器被限制了资源后,自动归类到此

Guranteed(确保)

同时设置了cpu和内存的requests和limits,且满足以下

cpu.limits = cpu.requests

mem.limits = mem.requests

此类优先级最高,如果其他pod也要运行,但有标记了此类的,优先运行他们

Burstable

至少一个容器设置了cpu或内存资源的requests

BestEffort

没有一个容器设置了requests或limits

当资源不足时,此类资源优先被终止,腾出资源给前面的两种

查看pod的Qos:

kubectl get po b1-689bb88886-2dssl -o template --template={{.status.qosClass}} ;echo

POD级别配置语法:

kubectl explain pod.spec.containers.resources

pod.spec.containers.resources:

requests:

cpu: 0.5

memory: 500M

hugepages-内存大小:

limits:

cpu:

memory:

hugepages-内存大小:

例1: 限制pod运行资源

apiVersion: v1

kind: Pod

metadata:

name: tomcat

namespace: default

labels:

app: tomcat

spec:

containers:

- name: tomcat

image: tomcat

imagePullPolicy: IfNotPresent

ports:

- containerPort: 8080

resources:

requests:

cpu: "100m"

memory: "100Mi"

limits:

cpu: "0.3"

memory: "100Mi"

apiVersion: v1

kind: LimitRange

metadata:

namespace: default

name: limits-default

spec:

limits:

- type: Container

default:

cpu: 1

memory: 200Mi

defaultRequest:

cpu: 1

memory: 200Mi

min:

cpu: 1

memory: 100Mi

max:

cpu: 2

memory: 2Gi

maxLimitRequestRatio:

cpu: 2

memory: 2

- type: PersistentVolumeClaim

default:

storage: 1Gi

defaultRequest:

storage: 1Gi

max:

storage: 5Gi

- type: Pod

max:

cpu: 4

memory: 5Gi

Namespace级别配置语法

命名空间内资源限制

只是限制命令空间单个pod、容器、pvc的容量限制,并不是对命名空间总共允许使用的资源限制

kubectl explain limits.spec

apiVersion: v1

kind: LimitRange

metadata:

name: default

spec:

limits:

- type: 限制类型

#Pod

#Container

#PersistentVolumeClaim

#PodTemplate

#Namespace

default: #此处定义默认限制值

cpu: 500m

memory: 100Mi

storage: 10Gi #此选项仅用于pvc类型,配置pvc创建大小

defaultRequest: #此处定义默认请求值

min:

max:

maxLimitRequestRatio:

cpu: 2 #限制cpu limit和request比例最大为2,也就是pod创建时,request指定的大小*2后,必须等于limit指定的值,如:

#request: 1,limit: 2。合法创建,如果为1.5就不能被创建

request: 1,limit: 4。不合法创建,两者的比例是1/4了

memory: 2 #限制内存limit和request比例最大为2

例1: 命名空间资源限制

1)创建资源限制

cat <

apiVersion: v1

kind: LimitRange

metadata:

namespace: default

name: limits-default

spec:

limits:

- type: Container

default:

cpu: 1

memory: 200Mi

defaultRequest:

cpu: 1

memory: 200Mi

min:

cpu: 1

memory: 100Mi

max:

cpu: 2

memory: 2Gi

maxLimitRequestRatio:

cpu: 2

memory: 2

- type: PersistentVolumeClaim

default:

storage: 1Gi

defaultRequest:

storage: 1Gi

max:

storage: 5Gi

- type: Pod

max:

cpu: 4

memory: 5Gi

EOF

2)创建测试pod

cat <

apiVersion: v1

kind: Pod

metadata:

name: tomcat

namespace: default

labels:

app: tomcat

spec:

containers:

- name: tomcat

image: tomcat

imagePullPolicy: IfNotPresent

ports:

- containerPort: 8080

resources:

requests:

cpu: 2

memory: 200Mi

limits:

cpu: 1

memory: 100Mi

eof

命名空间资源配额

对命名空间的资源使用配置上限,超过后拒绝创建pod

支持配额的资源:https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/

kubectl explain quota.spec

apiVersion: v1

kind: ResourceQuota

metadata:

name: quota

namespace: default

spec:

hard:

requests.cpu: "1" #命名空间中所有 Pod 的内存请求总和不能超过 1 GiB

requests.memory: 1Gi #命名空间中所有 Pod 的 CPU 请求总和不能超过 1 cpu

limits.cpu: "2" #命名空间中所有 Pod 的 CPU 限制总和不能超过 2 cpu

limits.memory: 2Gi #命名空间中所有 Pod 的内存限制总和不能超过 2 GiB

scopeSelector: #指定命名空间中哪些Pod会受到限制

matchExpressions: #使用标签选择器

operator:

#DoesNotExist

#Exists

#In

#NotIn

scopeName:

#BestEffort,Pod没有设置资源请求和限制,即使用集群中的剩余资源

#CrossNamespacesPodAffinity,只有符合跨命名空间Pod亲和性策略的Pod会受到限制,跨命名空间Pod亲和性策略是指Pod与其他命名空间中的Pod有亲和性要求

#NotBestEffort,不符合BestEffort策略的Pod会受到限制

#NotTerminating,不符合终止状态的pod受到限制

#PriorityClass,只有设置了优先级的Pod会受到限制

#Terminating,只有在终止状态pod受到限制

values:

- 命名空间

scopes: #指定命名空间中哪些Pod会受到配额限制

#BestEffort

#NotTerminating

例1: 命名空间资源配额

1)创建资源配额

cat <<-eof |kubectl apply -f -

apiVersion: v1

kind: ResourceQuota

metadata:

name: mem-cpu-demo

namespace: default

spec:

hard:

requests.cpu: "1"

requests.memory: 1Gi

limits.cpu: "2"

limits.memory: 2Gi

requests.nvidia.com/gpu: 4

pods: 4

services: 6

eof

2)创建测试pod

cat <<-eof |kubectl apply -f -

apiVersion: v1

kind: Pod

metadata:

name: quota-mem-cpu-demo

spec:

containers:

- name: quota-mem-cpu-demo-ctr

image: nginx

resources:

limits:

memory: 800Mi

cpu: 2

requests:

memory: 400Mi

cpu: 1

eof

3)查看配额使用情况

#可以看到,已经cpu已经使用完了,内存还剩600Mi

kubectl describe quota

相关推荐

怀孕期间如何在家挣钱?7个适合孕妇的工作推荐!
约彩365苹果在线安装

怀孕期间如何在家挣钱?7个适合孕妇的工作推荐!

📅 07-27 👁️ 7869
《盖世豪侠》门派攻略——少林寺
约彩365苹果在线安装

《盖世豪侠》门派攻略——少林寺

📅 01-10 👁️ 9119
仙境传说RO摩天轮在哪 仙境传说RO摩天轮乘坐攻略
office365登陆账号没有反应

仙境传说RO摩天轮在哪 仙境传说RO摩天轮乘坐攻略

📅 01-06 👁️ 2682
生活解字:“搲”字辨析和详解_手机网易网
约彩365苹果在线安装

生活解字:“搲”字辨析和详解_手机网易网

📅 10-06 👁️ 9132
360781开头的身份证号码是哪里的
office365登陆账号没有反应

360781开头的身份证号码是哪里的

📅 12-07 👁️ 7975
开彩票站,还是一门好生意吗:有摊位日均流水过万,有人仅月挣五六千