系列目录

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

kubernetes资源调度之LimitRange的更多相关文章

  1. kubernetes资源调度

    kubernetes默认情况下创建pod调度是由kubernetes scheduler来管理的,但显然有时候还是需要人为介入.根据目前的kubernetes版本来说,有两种自定义资源调度的方式:No ...

  2. 基于jenkins,tekton等工具打造kubernetes devops平台

    本贴为目录贴,将不断更新 目录 1.Docker在centos下安装以及常见错误解决 2.使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像) 3.无法访问gcr ...

  3. kubernetes API Server 权限管理实践

    API Server权限控制方式介绍 API Server权限控制分为三种:Authentication(身份认证).Authorization(授权).AdmissionControl(准入控制). ...

  4. 【有容云干货-容器系列】Kubernetes调度核心解密:从Google Borg说起

    在之前“容器生态圈脑图大放送”文章中我们根据容器生态圈脑图,从下至上从左至右,依次介绍了容器生态圈中8个组件,其中也提到Kubernetes ,是一个以 Google Borg 为原型的开源项目.可实 ...

  5. 深入理解 Kubernetes 资源限制:CPU

    原文地址:https://www.yangcs.net/posts/understanding-resource-limits-in-kubernetes-cpu-time/ 在关于 Kubernet ...

  6. kubernetes 基础知识

    1. kubernetes 包含几个组件 Kubernetes是什么:针对容器编排的一种分布式架构,是自动化容器操作的开源平台. 服务发现.内建负载均衡.强大的故障发现和自我修复机制.服务滚动升级和在 ...

  7. K8s 资源范围管理对象 LimitRange

    默认情况下如果创建一个 Pod 没有设置 Limits 和 Requests 对其加以限制,那么这个 Pod 可能能够使用 Kubernetes 集群中全部资源, 但是每创建 Pod 资源时都加上这个 ...

  8. CentOS7.6配置do.cker和K.B.S

     方法一: 节点及功能 主机名 IP Master.etcd.registry K8s-01 10.8.8.31 Node1 K8s-02 10.8.8.32 Node2 K8s-03 10.8.8. ...

  9. k8s1.9.0安装--完整集群部署

    三.完整集群部署 - kubernetes-with-ca 1. 理解认证授权 1.1 为什么要认证 想理解认证,我们得从认证解决什么问题.防止什么问题的发生入手.防止什么问题呢?是防止有人入侵你的集 ...

随机推荐

  1. BZOJ3534 [Sdoi2014]重建 【矩阵树定理】

    题目 T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回. 辛运的是,此前T国政府 ...

  2. BZOJ3209 花神的数论题 【组合数 + 按位计数】

    题目 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC -- 当然也包括 CH 啦. 描述 话说花神这天又来讲课了.课后照例有超级难的神题啦-- 我等蒟蒻又遭殃了. 花神的题目 ...

  3. [转] Makefile 基础 (9) —— Makefile 使用make更新函数库文件

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  4. 马士兵hadoop第五课:java开发Map/Reduce(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  5. 【CF314C】Sereja and Subsequences(DP,树状数组)

    题意:给定一个N个数的数列,求所有不同不下降子序列的乘积之和,其中不同指的是组成它的数字和长度不完全相同 n (1 ≤ n ≤ 10^5) a[i]<=10^6 思路:考虑DP.设DP[a[i] ...

  6. ARCGIS SDK For DotNet 路径

    ARCGIS SDK For DotNet 路径 驱动器 C 中的卷是 WIN7 卷的序列号是 06AC-BD3E C:\Program Files (x86)\ArcGIS\DeveloperKit ...

  7. Win32 绘制RGB三原色图案

    以前看到三原色的图案,一直很好奇是如何画出来.后来终于搞清楚了,其实很简单,实际上就是RGB三个分量的"位与"运算. 下面给出Win32绘制三原色图案的例子,特此记录在此: #in ...

  8. Integration testing

    Integration testing 集成测试用来确保app的不同模块之间可以正确的一起工作.ASP.NET Core提供单元测试框架和内建的测试网络服务来支持集成测试,并且测试网络服务不需要网络开 ...

  9. 天梯赛 - L2-005 集合相似度

    题目链接:https://www.patest.cn/contests/gplt/L2-005 这个题理解是个大问题啊,“给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合 ...

  10. dtrace 网站

    Oracle SQL Tuning and CBO Internals: Based Optimizer with CBO Internals and SQL Tuning Optimization ...