当前位置: 首页 > news >正文

学习笔记三十三:准入控制

ResourceQuota准入控制器

  • ResourceQuota准入控制器
    • 限制cpu、内存、pod、deployment数量
    • 限制存储空间大小
  • LimitRanger准入控制器
    • 在limit名称空间创建pod,不指定资源,看看是否会被limitrange规则自动附加其资源限制
    • 创建pod,指定cpu请求是100m,看看是否允许创建

ResourceQuota准入控制器

ResourceQuota准入控制器是k8s上内置的准入控制器,默认该控制器是启用的状态,它主要作用是用来限制一个名称空间下的资源的使用,它能防止在一个名称空间下的pod被过多创建时,导致过多占用k8s资源,简单讲它是用来在名称空间级别限制用户的资源使用。

限制cpu、内存、pod、deployment数量

创建resourcequota资源

kubectl create ns quota
cat resourcequota-1.yaml
apiVersion: v1
kind: ResourceQuota
metadata:name: quota-testnamespace: quota
spec:hard:pods: "6"requests.cpu: "2"requests.memory: 2Gilimits.cpu: "4"limits.memory: 10Gicount/deployments.apps: "6"persistentvolumeclaims: "6"
kubectl apply -f resourcequota-1.yaml

创建pod进行测试

资源清单YAML文件解读:
spec.hard字段是用来定义对应名称空间下的资源限制规则;pods用来限制在对应名称空间下的pod数量,requests.cpu字段用来限制对应名称空间下所有pod的cpu资源的下限总和;requests.memory用来限制对应名称空间下pod的内存资源的下限总和;limits.cpu用来限制对应名称空间下的podcpu资源的上限总和,limits.memory用来限制对应名称空间下pod内存资源上限总和;count/deployments.apps用来限制对应名称空间下apps群组下的deployments的个数;
以上配置清单表示,在quota名称空间下运行的pod数量不能超过6个,所有pod的cpu资源下限总和不能大于2个核心,内存资源下限总和不能大于2G,cpu上限资源总和不能大于4个核心,内存上限总和不能超过10G,apps群组下的deployments控制器不能超过6个, pvc个数不能超过6个;以上条件中任意一个条目不满足,都将无法在对应名称空间创建对应的资源。

cat quota-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: quotanamespace: quota
spec:replicas: 7selector:matchLabels:app: quotatemplate:metadata:labels:app: quotaspec:containers:- name: myappimage: janakiramm/myapp:v1imagePullPolicy: IfNotPresentports:- containerPort: 80resources:requests:cpu: 10mmemory: 10Milimits:cpu: 10mmemory: 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-testnamespace: quota
spec:hard:requests.storage: "5Gi"persistentvolumeclaims: "5"requests.ephemeral-storage: "1Gi"limits.ephemeral-storage: "2Gi"
kubectl apply -f resourcequota-2.yaml

备注:requests.storage用来限制对应名称空间下的存储下限总和,persistenvolumeclaims用来限制pvc总数量,requests.ephemeral-storage用来现在使用本地临时存储的下限总容量;limits.ephemeral-storage用来限制使用本地临时存储上限总容量;以上配置表示在default名称空间下非停止状态的容器存储下限总容量不能超过5G,pvc的数量不能超过5个,本地临时存储下限容量不能超过1G,上限不能超过2G。

LimitRanger准入控制器

LimitRanger准入控制器是k8s上一个内置的准入控制器,LimitRange是k8s上的一个标准资源,它主要用来定义在某个名称空间下限制pod或pod里的容器对k8s上的cpu和内存资源使用;它能够定义我们在某个名称空间下创建pod时使用的cpu和内存的上限和下限以及默认cpu、内存的上下限。
如果我们创建pod时定义了资源上下限,但不满足LimitRange规则中定义的资源上下限,此时LimitRanger就会拒绝我们创建此pod;如果我们在LimitRange规则中定义了默认的资源上下限制,我们创建资源没有指定其资源限制,它默认会使用LimitRange规则中的默认资源限制;同样的逻辑LimitRanger可以限制一个pod使用资源的上下限,它还可以限制pod中的容器的资源上下限,比限制pod更加精准;不管是针对pod还是pod里的容器,它始终只是限制单个pod资源使用。

cat limitrange.yaml
apiVersion: v1
kind: Namespace
metadata:name: limit
---
apiVersion: v1
kind: LimitRange
metadata:name: cpu-memorynamespace: limit
spec:limits:- default:cpu: 1000mmemory: 1000MidefaultRequest:cpu: 500mmemory: 500Mimin:cpu: 500mmemory: 500Mimax:cpu: 2000mmemory: 2000MimaxLimitRequestRatio:cpu: 4memory: 4type: Container
kubectl apply -f limitrange.yaml
  • 备注:以上清单主要定义了两个资源,一个创建limit名称空间,一个是在对应limit名称空间下定义了LimitRange资源;其中LimitRange资源的名称为cpu-memory,default字段用来指定默认容器资源上限值;defaultRequest用来指定默认容器资源下限值;min字段用来指定限制用户指定的资源下限不能小于对应资源的值;max是用来限制用户指定资源上限值不能大于该值;maxLimitRequestRatio字段用来指定资源的上限和下限的比值;即上限是下限的多少倍;type是用来描述对应资源限制的级别,该字段有两个值pod和container。
  • 上述资源清单表示在该名称空间下创建pod时,默认不指定其容器的资源限制,就限制对应容器最少要有0.5个核心的cpu和500M的内存;最大为1个核心cpu,1g内存;如果我们手动定义了容器的资源限制,那么对应资源限制最小不能小于cpu为0.5个核心,内存为500M,最大不能超过cpu为2个核心,内存为2000M;
  • 如果我们在创建pod时,只指定了容器的资源上限或下限,那么上限最大是下限的的4倍,如果指定cpu上限为2000m那么下限一定不会小于500m,如果只指定了cpu下限为500m那么上限最大不会超过2000m,对于内存也是同样的逻辑。

在limit名称空间创建pod,不指定资源,看看是否会被limitrange规则自动附加其资源限制

cat pod-limit.yaml 
apiVersion: v1
kind: Pod
metadata:name: nginx-pod-demonamespace: limit
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: nginx
kubectl apply -f pod-limit.yaml
kubectl describe pods nginx-pod-demo -n limit

在这里插入图片描述

通过上面结果可以看到我们在limit名称空间下创建的pod没有指定其容器资源限制,创建pod后,其内部容器自动就有了默认的资源限制;其大小就是我们在定义LimitRange规则中的default和defaultRequest字段中指定的资源限制。

创建pod,指定cpu请求是100m,看看是否允许创建

vim pod-request.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-requestnamespace: limit
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: nginxresources: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]
http://www.lryc.cn/news/215325.html

相关文章:

  • Unix/Linux C语言 获取控制台窗口尺寸
  • 界面控件DevExpress WinForms Gauge组件 - 实现更高级别数据可视化
  • vivo 自研蓝河操作系统 BlueOS 发布:支持大模型、BlueXlink 协议实现万物互联
  • opencv复习(很乱)
  • 于璠访谈录 | AI 框架应该和而不同?
  • 基于Springboot+MYSQL+Maven实现的宠物医院管理系统(源码+数据库+运行指导文档+项目运行指导视频)
  • 【数据结构二叉树】先序层序建立、递归非递归遍历层序遍历、树高、镜面、对称、子树、合并、目标路径、带权路径和等等
  • Mybatis延迟加载(缓存)
  • 我对美团的看法,作为美团的股东,我都有点懵
  • 【Java】文件操作和IO
  • uniapp页面间传参的方法
  • vsan 7.0.3部署后常见问题
  • 【Git】Git使用指南+上传项目踩坑总结
  • Django之登录注册
  • Android 10-11适配外部存储方案
  • 软件测试/测试开发丨Python:易学、强大、多用途的编程语言
  • 一、VPN基础
  • 淘宝协议最新版
  • AI“走深向实”,蚂蚁蚁盾在云栖大会发布实体产业「知识交互建模引擎」
  • 如何估计池塘里鱼的数目,周边有多少车辆?
  • docker中安装rabbitMq并配置启动
  • viewfs://为Hadoop 中的一个特殊文件系统
  • UniPro自定义个人专属工作台 大幅提升工作效率
  • python调用飞书机器人发送文件
  • 【产品应用】一体化伺服电机在焊接设备中的应用
  • uni+vue3+firstUI——组件弹框使用 v-model绑定参数
  • 【电路笔记】-正弦波形
  • Failed to launch task: 文件”Setup”不存在 Mac安装Adobe软件报错解决方案
  • 什么是 DevOps
  • java修仙基石篇->instanceof子父类检查