首页 > 其他分享 >k8s资源限制之LimitRange和ResourceQuota

k8s资源限制之LimitRange和ResourceQuota

时间:2024-03-21 23:23:57浏览次数:17  
标签:限制 LimitRange ResourceQuota Pod k8s CPU 资源

在Kubernetes中,LimitRange和ResourceQuota都是用于资源管理的工具,但它们的目的、作用范围和使用方式有所不同。

作用范围

LimitRange是在Pod和容器级别上进行资源限制的工具,主要用于设定CPU和内存两种计算资源的可用范围,并且还可以支持在PersistentVolumeClaim资源级别设定存储空间的范围限制。ResourceQuota则作用于命名空间级别,用于限制命名空间中的资源使用量,例如Pod的数量、特定类型的资源对象的数量(如Services、Deployments等)以及命名空间内所有Pod可以使用的计算资源总量(如CPU、内存等)。

关注点

LimitRange主要关注资源的最小和最大限制,以确保公平性,例如设定Pod或容器的requests和limits属性必须在指定的资源范围内,否则将会被拒绝。而ResourceQuota主要关注资源的总量和分配,旨在防止资源的过度消耗和竞争,确保在多用户共享Kubernetes集群时,每个命名空间的资源使用量不会超过其配额限制。

默认值处理

当容器未显式指定request和limit属性时,LimitRange可以提供默认的requests和limits值给容器,这是变异型准入控制器的功能。ResourceQuota不提供这样的默认功能,而是要求显式地在创建资源时指定这些属性。

LimitRange

LimitRange用于限制命名空间中Pod和容器的资源使用范围。它可以设定最小和最大的CPU、内存等资源限制,并可以提供默认值和默认请求值。LimitRange主要关注资源的公平性和防止单个Pod或容器消耗过多资源。

LimitRange YAML示例

apiVersion: v1
kind: LimitRange
metadata:
  name: example-limitrange
spec:
  limits:
  - default:
      cpu: 500m
      memory: 512Mi
    defaultRequest:
      cpu: 200m
      memory: 256Mi
    type: Container

在这个示例中,LimitRange设置了容器的默认CPU和内存限制(default)以及默认请求(defaultRequest)。

ResourceQuota

ResourceQuota用于限制命名空间的资源总量,包括Pod数量、各种资源对象的总数以及Pod可以使用的计算资源总量。它主要用于多租户环境,以确保每个租户的资源使用都在其配额范围内。

ResourceQuota YAML示例

apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    pods: "10"
    requests.cpu: "1"
    requests.memory: "2Gi"
    limits.cpu: "2"
    limits.memory: "4Gi"

在这个示例中,ResourceQuota限制了命名空间中可以创建的Pod数量为10个,以及Pod可以请求的CPU和内存总量,还有可以设置的CPU和内存限制总量。

对比

  • 作用范围:LimitRange作用于Pod和容器级别,而ResourceQuota作用于命名空间级别。
  • 关注点:LimitRange关注资源的最小、最大限制和公平性,ResourceQuota关注资源的总量和分配。
  • 默认值:LimitRange可以提供默认的资源请求和限制值,ResourceQuota不提供默认值,而是要求显式配置。

它们通常一起使用,以实现对Kubernetes集群中资源的全面管理和控制。通过合理配置LimitRange和ResourceQuota,可以确保资源的合理分配和使用,防止资源的浪费和争用。

标签:限制,LimitRange,ResourceQuota,Pod,k8s,CPU,资源
From: https://www.cnblogs.com/ydswin/p/18088450

相关文章

  • k8s之operator
    官网demo地址https://github.com/kubernetes/client-go/blob/master/examples新建mian.go代码packagemainimport("context""flag""fmt""log""path/filepath"metav1"k8s.io/apimachinery/pkg/apis......
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心实战
    文章目录Kubernetes基础概念1.是什么2.架构2.1工作方式2.2组件架构3.k8s组件创建集群步骤一基础环境步骤二安装kubelet、kubeadm、kubectl步骤三主节点使用kubeadm引导集群步骤四副节点加入主节点步骤五部署dashboardKubernetes核心实战1.资源创建方式2.N......
  • kubeshark查看k8s中pod的流量
    kubeshark的介绍在底层实现当中,Kubeshark主要使用到了Linux内核中的各种内置方法和API,隐藏了对流量数据的加解密实现,可以直接收集到K8s集群中的加密和未加密流量。对网络数据的收集主要使用了直接抓包法和基于拓展伯克利包过滤(eBPF)的数据包获取。直接抓包法涉及libpcap、AF_PACKE......
  • 通过nginx来验证k8s中externalTrafficPolicy策略
    过nginx来验证k8s中externalTrafficPolicy策略域名--->172.16.80.32(域名解析反向代理)----->nginx-pod1(Local模式,模拟前端代理到nginx2-pod2)----->nginx2-pod2(Cluster模式,实际后端服务)nginx的日志格式log_formatmain'"$remote_addr""$remote_user""......
  • 解决部署在k8s上spring cloud gateway 无故假死的情况
    解决部署在k8s上springcloudgateway无故假死的情况线上发现gateway会无故假死,测试环境使用jmeter几分钟后,gateway也会复现假死的情况开始排查获取容器列表kubectlgetpod-owide进入gatewaykubectlexec-itgateway-7dbc5d8d6d-wtbs5--bash将jdk拷贝进容器......
  • K8s(Kubernetes)-Tips
    K8S中文官网https://www.kubernetes.org.cn/Kubernetes集群组件结构一个kubernetes集群主要是由控制节点(master)、**工作节点(node)**构成,每个节点上都会安装不同的组件。master:集群的控制平面,负责集群的决策(管理)ApiServer:资源操作的唯一入口,接收用户输......
  • K8S集合
    1.什么是k8s,有什么用处?k8s是容器化编排管理工具。可以用来完成以下一些主要功能:基于容器的应用部署、维护和滚动升级。负载均衡和服务发现:跨机器和跨地区的集群调度。自动伸缩。广泛的Volume支持。插件机制保证扩展性2.工作节点NodeNode是K8S集群中的工作负载节点,每个No......
  • 猫头虎分享已解决Bug || Error: ImagePullBackOff (K8s)
    博主猫头虎的技术世界......
  • K8s的概念
    Kubernetes(简称K8s)是一个开源的容器编排系统,由Google开发,用于管理容器化的应用程序。K8s在Docker技术的基础上,提供了应用部署、资源调度、服务发现和动态伸缩等一系列功能,提高了大规模容器集群管理的便捷性。它能够自动化地部署、扩展和管理容器应用,还可以监控容器......
  • 处理K8S镜像无法拉取问题
    问题原因国内无法直接访问镜像地址,改为国内地址即可#!/bin/bash#downloadk8s1.28.8images#getimage-listby'kubeadmconfigimageslist--kubernetes-version=v1.15.2'#gcr.azk8s.cn/google-containers==k8s.gcr.ioimages=(kube-apiserver:v1.28.8kube-contr......