Kubernetes 资源限制

news/2024/7/4 7:45:56 标签: kubernetes, 容器, 云原生, linux

Kubernetes对资源的限制实际上是通过cgroup来控制的,cgroup是容器的一组用来控制内核如何运行进程的相关属性集合。针对内存、CPU 和各种设备都有对应的 cgroup。
默认情况下,Pod 运行没有 CPU 和内存的限额。这意味着系统中的任何 Pod 将能够像执行该 Pod 所在的节点一样, 消耗足够多的 CPU 和内存。一般会针对某些应用的 pod 资源进行资源限制,这个资源限制是通过 containers.resources 的 requests 和 limits 来实现。requests 为创建 Pod 时初始要分配的资源,limits 为 Pod 最高请求的资源值。 

资源限制 - 通过containers.resources给每个容器设置资源限制

containers.resources方式限制(这种方法是给每个容器单独设置资源限制)

在创建pod时直接在容器的参数中指定

spec:
  containers:
  - image: xxxx
    imagePullPolicy: IfNotPresent
    name: auth
    ports:
    - containerPort: 8080
      protocol: TCP
    resources:
      limits:
        cpu: "2"
        memory: 1Gi
      requests:
        cpu: 250m
        memory: 250Mi

containers.resources这种方法只能对容器进行资源限制,而要对pod进行资源限制,则需要使用 ResourceQuota和LimitRanger准入控制器、




资源限制 - 通过准入控制器ResourceQuota和LimitRanger根据命名空间限制pod资源

●LimitRanger:用于给指定的命名空间中Pod或容器设置默认的 requests 和 limits 资源量限制(限制命名空间内单个pod使用资源量

●ResourceQuota:用于限制在指定的命名空间中能够创建的最大资源对象数量和 Pod 的 requests|limits 资源量限制(限制命名空间内所有pod使用资源总量

 使用准入控制器ResourceQuota限制某个命名空间资源使用总量 

1.计算资源配额(限制CPU 内存)

创建ResourceQuota资源指定命名空间进行限制

apiVersion: v1
kind: ResourceQuota        #使用 ResourceQuota 资源类型
metadata:
  name: compute-resources
  namespace: spark-cluster #指定命令空间
spec:
  hard:
    pods: "20"             #设置 Pod 数量最大值
    requests.cpu: "2"
    requests.memory: 1Gi   #资源请求量 比最小资源使用量大一点 为了防止雪崩
    limits.cpu: "4"
    limits.memory: 2Gi     #资源限制量 能够使用的最大值

K8S 会根据 limits 限制 Pod 使用资源,当内存超过 limits 时 cgruops 会触发 OOM。 

如果Pod没有设置requests和limits,则会使用当前命名空间的最大资源;如果命名空间也没设置,则会使用集群的最大资源。

2.配置对象数量配额限制(限制PVC存储卷数量 副本控制器数量 SVC数量 secret数量......)

apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
  namespace: spark-cluster
spec:
  hard:
    configmaps: "10"
    persistentvolumeclaims: "4"        #设置 pvc 数量最大值
    replicationcontrollers: "20"       #设置 rc 数量最大值
    secrets: "10"
    services: "10"
    services.loadbalancers: "2"

 

使用准入控制器LimitRange限制命名空间内单个pod或container的使用资源量

创建 LimitRange 资源指定命名空间进行限制

设置 Pod 或其中的 Container 能够使用资源的最大默认值(限制单个pod或Container使用资源量)

apiVersion: v1
kind: LimitRange     #使用 LimitRange 资源类型
metadata:
  name: mem-limit-range
  namespace: test    #可以给指定的 namespace 增加一个资源限制
spec:
  limits:
  - default:         #default 即 limit 的值(最大使用量)
      memory: 512Mi
      cpu: 500m
    defaultRequest:  #defaultRequest 即 request 的值(请求量 比最小使用量略高 防止雪崩)
      memory: 256Mi
      cpu: 100m
    type: Container  #类型支持 Container、Pod、PVC


http://www.niftyadmin.cn/n/4952779.html

相关文章

微人事 登录问题完善

重启服务端的时候,发现前端页面会操作不了,这样后端session会失效,我们就需要让页面重新跳转到登录页 springsecurity配置类后端配置 前端拦截器进行拦截跳转

AI绘画之三_StableDiffusion_界面操作

1 介绍 首先,介绍界面中的重要元素,如图所示: 基础模型:基础模型是最重要的设置项文生图:选项卡列出了各大功能,文生图指通过文字生成图片图生图:图生图指通过图片和文字生成图片修复照片&am…

kubernetes(namespace、pod、deployment、service、ingress)

NameSpace NameSpace名称空间 用来隔离资源,但是不隔离网络 使用命令行: kubectl create ns hello #创建 kubectl delete ns hello #删除 kubectl get ns #查看使用配置文件: vi hello.yamlapiVersion: v1 kind: Namespace metadata:name…

当众讲话与演讲口才沙龙活动策划方案

活动名称:当众讲话与演讲口才沙龙 活动目的: 当众讲话与演讲口才沙龙旨在提升参与者的演讲口才能力,培养自信心和表达能力,促进交流与分享。通过举办此活动,我们希望能够帮助参与者克服公众演讲的恐惧,提…

黑马B站八股文学习笔记之虚拟机篇

虚拟机篇 1. JVM 内存结构 要求 掌握 JVM 内存结构划分尤其要知道方法区、永久代、元空间的关系 结合一段 java 代码的执行理解内存划分 执行 javac 命令编译源代码为字节码执行 java 命令 创建 JVM,调用类加载子系统加载 class,将类的信息存入方法区…

深入浅出Pytorch函数——torch.nn.init.normal_

分类目录:《深入浅出Pytorch函数》总目录 相关文章: 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…

Java程序设计——编写计算器

设计主类 Calculator import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Objects;import javax.swing.*;//Calculator类,继承JFrame框架,实现事件监听器接口 public class Calculator e…

Docker实战:Docker常用命令

一、镜像相关 1.1、查看镜像 docker images1.2、拉取镜像 docker pull nginx1.3、保存镜像 docker save -o nginx.tar nginx:latest1.4、移除镜像 docker rmi -f nginx:latest1.5、导入镜像 docker load -i nginx.tar二、容器相关 2.1、启动容器 docker run --name red…