系列目录

LimitRange从字面意义上来看就是对范围进行限制,实际上是对cpu和内存资源使用范围的限制

前面我们讲到过资源配额,资源配额是对整个名称空间的资源的总限制,是从整体上来限制的,而LimitRange则是对pod和container级别来做限制的

由于LimitRange是基于名称空间的,因此为了测试,我们先创建一个名称空间

kubectl create namespace default-mem-example

创建LimitRange和Pod对象

以下配置文件声明了内存的默认限制量和默认请求量

admin/resource/memory-defaults.yaml 

apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container

在default-mem-example名称空间下创建它

kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults.yaml --namespace=default-mem-example

现在,如果有在容器在default-mem-example名称空间下创建,并且在创建的时候没有指定内存申请值和内存限制值,则它会被默认分配256M的内存请求和512M的内存上限

下面是一个包含容器的pod的配置.容器没有显式声明资源申请和内存限制

admin/resource/memory-defaults-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo
spec:
containers:
- name: default-mem-demo-ctr
image: nginx

下面创建这个pod

kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod.yaml --namespace=default-mem-example

查看这个pod的详细信息

kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
containers:
- image: nginx
imagePullPolicy: Always
name: default-mem-demo-ctr
resources:
limits:
memory: 512Mi
requests:
memory: 256Mi

以上输出信息显示pod的容器包含了一个256M的内存申请和一个512M的内存限制.它们是LimitRange里声明的默认值

仅指定限制,没指定申请

下面是一个pod的其中一个容器的声明文件,它声明了内存限制,但是没有内存申请

apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo-2
spec:
containers:
- name: default-mem-demo-2-ctr
image: nginx
resources:
limits:
memory: "1Gi"

创建它

kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-2.yaml --namespace=default-mem-example

查看信息

kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
resources:
limits:
memory: 1Gi
requests:
memory: 1Gi

可以看到容器的内存申请值和限制值是一样的.需要注意它并不是LimitRange里的默认值256M

仅声明了申请,没有声明限制

下面是一个包含一个容器的pod声明,容器只申请了资源,没有限制

apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo-3
spec:
containers:
- name: default-mem-demo-3-ctr
image: nginx
resources:
requests:
memory: "128Mi"

创建pod

kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-3.yaml --namespace=default-mem-example

查看信息

kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
resources:
limits:
memory: 512Mi
requests:
memory: 128Mi

输出信息显示容器的申请值被设置为声明的值.而限制值被设置成了512M,这是LimitRange的默认设置

设置申请和限制值的动机

如果一个名称空间包含有资源限额,那么设置申请和限制默认值往往也是有帮助的.以下是资源配额对命名空间施加的两个限制

  • 在命名空间运行的每一个容器必须有它自己的内存限额(CPU限额)。

  • 在命名空间中所有的容器使用的内存总量(CPU总量)不能超出指定的限额。

完整示例

apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
namespace: example
spec:
limits:
- default: # default limit
memory: 512Mi
cpu: 2
defaultRequest: # default request
memory: 256Mi
cpu: 0.5
max: # max limit
memory: 800Mi
cpu: 3
min: # min request
memory: 100Mi
cpu: 0.3
maxLimitRequestRatio: # max value for limit / request
memory: 2
cpu: 2
type: Container # limit type, support: Container / Pod / PersistentVolumeClaim
  • default为默认值,即pod不设置的时候的默认值.

  • defaultRequest 默认请求

  • max 请求上限

  • min请求下限

注意默认请求值即为创建pod的时候不指定resource申请时默认赋予的值,默认值即为默认限制的上限.即不指定的时候默认赋予的值.min和max是可以指定的最大值和最小值.并且需要注意的是以上都是Pod级别的.

-maxLimitRequestRatio顾名思义,是一个比率值,它是限制值和请求值的比率.由于资源调度都是基于申请的值,因此可能会出现资源超售情况(当然,可以使用配额来限制总的量),这个比率显示了超售的比率.

最新文章

  1. [已解决] protobuf Missing input file
  2. adb 常用命令
  3. Graph database_neo4j 底层存储结构分析(3)
  4. [转] JAVA网站高并发解决方案
  5. LINQ学习入门教程(一)
  6. 只有PD号的调起
  7. 有反斜杠时候,CakePHP往pgsql插入数据异常
  8. mysql远程连接
  9. 不可综合的verilog语句分析
  10. agentX各个角色功能
  11. php之快速排序
  12. swoole TCPsever
  13. 两个ArrayList之间求交并补
  14. python 数据可视化 -- matplotlib02
  15. python基础之 列表,元组,字典
  16. 【BZOJ3280】 小R的烦恼(费用流,建模)
  17. Android 公共库的建立方法
  18. Windows:chm 文件打开出现“已取消到该网页的导航”的解决方案
  19. linux下安装vsftp(二)
  20. leetcode905

热门文章

  1. 【bzoj4459】[Jsoi2013]丢番图 分解质因数
  2. CTSC 1999 家园 【网络流24题】星际转移
  3. iOS-汉字排序
  4. ajax提交数据服务端返回报错
  5. 网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array
  6. Linux 之 Redis
  7. npm install Unexpected token in JSON at position XXX
  8. Java 基础【05】你的多继承纳?
  9. zookeeper源码 — 四、session建立
  10. html的诸多标签