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

kubernetes ResourceQuotas Limits(资源配额)

开头语

写在前面:如有问题,以你为准,

目前24年应届生,各位大佬轻喷,部分资料与图片来自网络

内容较长,页面右上角目录方便跳转

简介

  1. 当多个用户或团队共享具有固定节点数目的集群时,人们会担心 有人使用超过其基于公平原则所分配到的资源量 。资源配额是帮助管理员解决这一问题的工具。
  2.  资源配额,通过 ResourceQuota 对象来定义,对每个命名空间的资源消耗总量提供限制。 它可以 限制 命名空间中 某种类型的对象的总数目上限,也可以限制命令空间中的 Pod 可以使用的计算资源的总上限。
  3.  资源配额的工作方式如下:
    1. 不同的团队可以在不同的命名空间下工作,目前这是非约束性的,在未来的版本中可能会通过 ACL (Access Control List 访问控制列表) 来实现强制性约束。
    2. 集群管理员可以为每个命名空间创建一个或多个 ResourceQuota 对象
    3. 当用户在命名空间下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会跟踪集群的资源使用情况,以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。
    4. 如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。
    5. 如果命名空间下的计算资源 (如 cpu 和 memory)的配额被启用,则用户必须为 这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用 LimitRanger 准入控制器来为没有设置计算资源需求的 Pod 设置默认值。

ResourceQuota 是一个准入控制插件,默认已启用

kubectl exec kube-apiserver-master -n kube-system -- kube-apiserver -h | grep enable-admission-plugins | grep  ResourceQuota

括号内是默认启用

yaml 介绍

官方文档

资源配额 | Kubernetes

apiVersion: v1kind: ResourceQuotametadata:name: storagenamespace: default # 限制 default 名称空间spec:hard: # 是每种指定资源所强制实施的硬性限制集合pods: "3" # 限制 Pod 的数量requests.cpu: "1" # 限制 pod cpu 数量requests.memory: 1Gi # 限制 内存使用量requests.storage: "10G" # 限制 存储使用量used: # 是当前命名空间中所观察到的资源总用量

RQ对pod的影响

如果对某个命名空间做出了限制,会导致在这个命名空间下创建的pod其配置里面就要对自身做出限制,不然会创建不了,导致报错

主要是满足 requests 的请求,这是请求资源的最低值

requests 和 limit 区别

调度的时候: requests 比较重要,这可以帮助 Kubernetes 调度器决定在哪个节点上运行 Pod

运行的时候limits      比较重要,   这有助于确保容器不会无限制地使用资源。

当设置 limits 而没有设置 requests 时,Kubernetes 默认令 requests 等于 limits

requests(资源请求): 定义了对应容器需要的最小资源量

  • requests定义了一个容器所需的最低资源量。它表示容器在正常运行时所需的资源最小值。Kubernetes调度器使用这个值来决定将容器调度到哪个节点上,以确保节点上的资源能够满足容器的请求。如果节点上的资源不足以满足 requests,则容器可能不会被调度到该节点。
  • requests 对于水平伸缩(Horizontal Pod Autoscaling)也非常重要,因为它帮助系统自动决定何时需要扩展Pod的数量。

 imits(资源限制):定义了这个容器最大可以消耗的资源上限

  • limits 定义了容器能够使用的资源的上限。它表示容器在运行时不应该使用的资源量。如果容器尝试使用超过 limits 定义的资源量,Kubernetes将限制容器的资源使用,并可能终止容器。
  • limits 对于防止容器占用过多的系统资源以至于影响其他容器或节点非常重要。它可以确保一个容器不会耗尽整个节点的资源,从而维护整个集群的可靠性和稳定性

(1)对于 CPU,如果 pod 中服务使用 CPU 超过设置的limits,pod 不会被 kill 掉但会被限制。如果没有设置 limits ,pod 可以使用全部空闲的 CPU 资源。

(2)对于内存,当一个 pod 使用内存超过了设置的limits,pod 中 container 的进程会被 kernel 因 OOM kill 掉。当 container 因为 OOM 被 kill 掉时,系统倾向于在其原所在的机器上重启该 container 或本机或其他重新创建一个 pod

0 <= requests <=Node Allocatable, requests <= limits <= Infinity

k8s 中负载问题

1. 经常在 K8s 集群种部署负载的时候不设置 CPU requests 或将 CPU requests 设置得过低(这样“看上去”就可以在每个节点上容纳更多 Pod )。在业务比较繁忙的时候,节点的 CPU 全负荷运行。业务延迟明显增加,有时甚至机器会莫名其妙地进入 CPU 软死锁等“假死”状态

2. 类似地,部署负载的时候,不设置内存 requests 或者内存 requests 设置得过低,这时会发现有些 Pod 会不断地失败重启。而不断重启的这些 Pod 通常跑的是 Java 业务应用,但是这些 Java 应用本地调试运行地时候明明都是正常的。

3.在 K8s 集群中,集群负载并不是完全均匀地在节点间分配的,通常内存不均匀分配的情况较为突出,集群中某些节点的内存使用率明显高于其他节点。 K8s 作为一个众所周知的云原生分布式容器编排系统,一个所谓的事实上标准,其调度器不是应该保证资源的均匀分配吗

(1)CPU 属于可压缩资源,其中 CPU 资源的分配和管理是 Linux 内核借助于完全公平调度算法( CFS )和 Cgroup 机制共同完成的

简单地讲,如果 pod 中服务使用 CPU 超过设置的 CPU limits, pod 的 CPU 资源会被限流( throttled )。对于没有设置limit的 pod ,一旦节点的空闲 CPU 资源耗尽,之前分配的 CPU 资源会逐渐减少。不管是上面的哪种情况,最终的结果都是 Pod 已经越来越无法承载外部更多的请求,表现为应用延时增加,响应变慢,对应上面1的情形

(2)内存属于不可压缩资源, Pod 之间是无法共享的,完全独占的,这也就意味着资源一旦耗尽或者不足,分配新的资源一定是会失败的。有的 Pod 内部进程在初始化启动时会提前开辟出一段内存空间。比如 JVM 虚拟机在启动的时候会申请一段内存空间。如果内存 

requests 指定的数值小于 JVM 虚拟机向系统申请的内存,导致内存申请失败( oom-kill ),从而 Pod 出现不断地失败重启。这种情形对应于上面的情形 2

(3)另一方面, K8s 内置的调度算法不仅仅涉及到“最小资源分配节点”,还会把其他诸如 Pod 亲和性等因素考虑在内。并且 k8s 调度基于的是资源的 requests 数值,而之所以往往观察到的是内存分布不够均衡,是因为对于应用来说,相比于其他资源,内存一般是更紧缺的一类资源这种情形对应于上面的情形 3

比如当出现新的 Pod 进行调度时,调度程序会根据其当时对 Kubernetes 集群的资源描述做出最佳调度决定。但是 Kubernetes 集群是非常动态的,由于整个集群范围内的变化,比如一个节点为了维护,我们先执行了驱逐操作,这个节点上的所有 Pod 会被驱逐到其他节点去,但是当我们维护完成后,之前的 Pod 并不会自动回到该节点上来,因为 Pod 一旦被绑定了节点是不会触发重新调度的

计算资源配额

参数

资源名称

描述

limits.cpu

所有非终止状态的 Pod,其 CPU 限额总量不能超过该值。

limits.memory

所有非终止状态的 Pod,其内存限额总量不能超过该值。

requests.cpu

所有非终止状态的 Pod,其 CPU 需求总量不能超过该值。

requests.memory

所有非终止状态的 Pod,其内存需求总量不能超过该值。

hugepages-

对于所有非终止状态的 Pod,针对指定尺寸的巨页请求总数不能超过此值。

cpu

与 requests.cpu

相同。

memory

与 requests.memory

相同。

yaml 示例

apiVersion: v1kind: ResourceQuotametadata:name: mem-cpunamespace: default # 限制 default 名称空间spec:hard:requests.cpu: "1"requests.memory: 1Gilimits.cpu: "2"limits.memory: 2Gi

requests:这是您为 Pod 请求的资源数量,即 Pod 的最小资源需求。它用于告诉 Kubernetes 集群为您的 Pod 分配多少资源。如果您设置了 requests,Kubernetes 集群将确保为 Pod 预留这些资源。这是在调度 Pod 到节点时的关键指标,它确保了节点上有足够的资源可供 Pod 使用。如果节点上没有足够的资源来满足 requests,Pod 可能无法被调度。

 limits:这是您为 Pod 设置的资源上限,即 Pod 的资源使用的最大限制。它用于限制 Pod 的资源使用,以防止它占用过多的资源并影响其他 Pod。如果您设置了 limits,Kubernetes 集群将确保 Pod 的资源使用不会超过这些限制。如果 Pod 尝试使用超出 limits 设置的资源量,它可能会被终止或受到限制。

总结一下,requests 是资源的保底需求,确保 Pod 有足够的资源可供使用,并在调度时起作用。limits 是资源的上限,用于限制 Pod 的资源使用,以确保它不会超过限制。

扩展资源

  1. 除上述资源外,在 Kubernetes 1.10 版本中,还添加了对 扩展资源 的支持。
  2. 由于扩展资源不可超量分配,因此没有必要在配额中为同一扩展资源同时指定 requests 和 limits。 对于扩展资源而言,目前仅允许使用前缀为 requests. 的配额项。
  3. 以 GPU 拓展资源为例,如果资源名称为 nvidia.com/gpu,并且要将命名空间中请求的 GPU 资源总数限制为 4,则可以如下定义配额:

requests.nvidia.com/gpu: 4

实操

apiVersion: v1kind: Podmetadata:creationTimestamp: nulllabels:run: webname: webnamespace: testspec:containers:- image: nginx:1.17.1name: webresources:requests:cpu: 0.5memory: 256Milimits:cpu: 1memory: 512Mistatus: {}
[root@master cks]# kubectl create -f RQ-cpu-mem.yamlresourcequota/mem-cpu created[root@master cks]# kubectl get quota -n testNAME      AGE   REQUEST                                       LIMITmem-cpu   13m   requests.cpu: 0/1, requests.memory: 0/512Mi   limits.cpu: 0/2, limits.memory: 0/1Gi[root@master cks]# kubectl run -n test web --image=nginx:1.17.1Error from server (Forbidden): pods "web" is forbidden: failed quota: mem-cpu: must specify limits.cpu for: web; limits.memory for: web; requests.cpu for: web; requests.memory for: webkubectl run -n test web --image=nginx:1.17.1 --dry-run=client -oyaml > pod.yaml

[root@master cks]# kubectl apply -f pod.yamlpod/web created[root@master cks]# kubectl get quota -n testNAME      AGE   REQUEST                                              LIMITmem-cpu   26m   requests.cpu: 500m/1, requests.memory: 256Mi/512Mi   limits.cpu: 1/2, limits.memory: 512Mi/1Gi[root@master cks]# kubectl apply -f pod.yamlpod/web2 created[root@master cks]# kubectl get quota -n testNAME      AGE   REQUEST                                           LIMITmem-cpu   26m   requests.cpu: 1/1, requests.memory: 512Mi/512Mi   limits.cpu: 2/2, limits.memory: 1Gi/1Gi[root@master cks]# kubectl get pod -n testNAME   READY   STATUS    RESTARTS   AGEweb    1/1     Running   0          58sweb2   1/1     Running   0          24s

存储资源配额

  1. 用户可以对给定命名空间下的 存储资源 总量进行限制。
  2. 此外,还可以根据相关的存储类(Storage Class)来限制存储资源的消耗

资源名称

描述

requests.storage

所有 PVC,存储资源的需求总量不能超过该值。

persistentvolumeclaims

在该命名空间中所允许的 PVC 总量。

.storageclass.storage.k8s.io/requests.storage

在所有与 相关的持久卷申领中,存储请求的总和不能超过该值。

.storageclass.storage.k8s.io/persistentvolumeclaims

在与 storage-class-name 相关的所有持久卷申领中,命名空间中可以存在的持久卷申领总数。

  1.  例如,如果一个操作人员针对 gold 存储类型与 bronze 存储类型设置配额, 操作人员可以定义如下配额:
    1.  gold.storageclass.storage.k8s.io/requests.storage: 500Gi
    2.  bronze.storageclass.storage.k8s.io/requests.storage: 100Gi

 在 Kubernetes 1.8 版本中,本地临时存储的配额支持已经是 Alpha 功能

资源名称

描述

requests.ephemeral-storage

在命名空间的所有 Pod 中,本地临时存储请求的总和不能超过此值。

limits.ephemeral-storage

在命名空间的所有 Pod 中,本地临时存储限制值的总和不能超过此值。

ephemeral-storage

与 requests.ephemeral-storage相同。

注意:如果所使用的是 CRI 容器运行时,容器日志会被计入临时存储配额。 这可能会导致存储配额耗尽的 Pods 被意外地驱逐出节点。 参考日志架构 了解详细信息。

yaml 示例

apiVersion: v1kind: ResourceQuotametadata:name: storagenamespace: default # 限制 default 名称空间spec:hard:requests.storage: "10G"

实操

apiVersion: v1kind: ResourceQuotametadata:name: storagenamespace: testspec:hard:requests.storage: "10G"
[root@master cks]# kubectl apply -f RQ-storage.yamlresourcequota/storage created[root@master cks]# kubectl get quota -n testNAME      AGE   REQUEST                                       LIMITmem-cpu   51m   requests.cpu: 0/1, requests.memory: 0/512Mi   limits.cpu: 0/2, limits.memory: 0/1Gistorage   31s   requests.storage: 0/10G
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: pvcnamespace: testspec:accessModes: # 访客模式- ReadWriteManyresources: # 请求空间requests:storage: 5Gi

[

root@master cks]# kubectl apply -f RQ-pvc.yamlpersistentvolumeclaim/pvc-rq created[root@master cks]# kubectl get pvc -n testNAME     STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGEpvc-rq   Pending                                                     10s# pending 代表没匹配大小一样的pv[root@master cks]# kubectl get quota -n testNAME      AGE     REQUEST                                       LIMITmem-cpu   56m     requests.cpu: 0/1, requests.memory: 0/512Mi   limits.cpu: 0/2, limits.memory: 0/1Gistorage   5m28s   requests.storage: 5Gi/10G[root@master cks]# kubectl apply -f RQ-pvc.yamlError from server (Forbidden): error when creating "RQ-pvc.yaml": persistentvolumeclaims "pvc-rq-2" is forbidden: exceeded quota: storage, requested: requests.storage=5Gi, used: requests.storage=5Gi, limited: requests.storage=10G# 因为重新创建会导致存储使用 >= 10G ,k8s 认为会超过限制# 改成 4G 即可创建成功[root@master cks]# kubectl apply -f RQ-pvc.yamlpersistentvolumeclaim/pvc-rq-2 unchanged[root@master cks]# kubectl get pvc -n testNAME       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGEpvc-rq     Pending                                                     5m14spvc-rq-2   Pending                                                     94s[root@master cks]# kubectl get quota -n testNAME      AGE     REQUEST                                       LIMITmem-cpu   58m     requests.cpu: 0/1, requests.memory: 0/512Mi   limits.cpu: 0/2, limits.memory: 0/1Gistorage   7m40s   requests.storage: 9Gi/10G

对象数量配额

  1. 你可以使用以下语法对所有标准的、命名空间域的资源类型进行配额设置:

count/<resource>.<group>

:用于非核心(core)组的资源。

count/<resource>

:用于核心组的资源。

  1.  这是用户可能希望利用对象计数配额来管理的一组资源示例。
    1. count/persistentvolumeclaims
    2. count/services
    3. count/secrets
    4. count/configmaps
    5. count/replicationcontrollers
    6. count/deployments.apps
    7. count/replicasets.apps
    8. count/statefulsets.apps
    9. count/jobs.batch
    10. count/cronjobs.batch
  2.  相同语法也可用于自定义资源。 例如,要对 example.com API 组中的自定义资源

widgets 设置配额,请使用 count/widgets.example.com。

  1.  当使用 count/* 资源配额时,如果对象存在于服务器存储中,则会根据配额管理资源。 这些类型的配额有助于防止存储资源耗尽。例如,用户可能想根据服务器的存储能力来对服务器中 Secret 的数量进行配额限制。 集群中存在过多的 Secret 实际上会导致服务器和控制器无法启动。 用户可以选择对 Job 进行配额管理,以防止配置不当的 CronJob 在某命名空间中创建太多 Job 而导致集群拒绝服务。
  2.  对有限的一组资源上实施一般性的对象数量配额也是可能的。 此外,还可以进一步按资源的类型设置其配额。

资源名称

描述

configmaps

在该命名空间中允许存在的 ConfigMap 总数上限。

persistentvolumeclaims

在该命名空间中允许存在的 PVC的总数上限。

pods

在该命名空间中允许存在的非终止状态的 Pod 总数上限。Pod 终止状态等价于 Pod 的 .status.phase in (Failed,Succeeded)为真。

replicationcontrollers

在该命名空间中允许存在的ReplicationController 总数上限。

resourcequotas

在该命名空间中允许存在的 ResourceQuota 总数上限。

services

在该命名空间中允许存在的 Service 总数上限。

services.loadbalancers

在该命名空间中允许存在的 LoadBalancer 类型的 Service 总数上限。

services.nodeports

在该命名空间中允许存在的 NodePort 类型的 Service 总数上限。

secrets

在该命名空间中允许存在的 Secret 总数上限。

例如,pods 配额统计某个命名空间中所创建的、非终止状态的 Pod 个数并确保其不超过某上限值。 用户可能希望在某命名空间中设置 pods 配额,以避免有用户创建很多小的 Pod, 从而耗尽集群所能提供的 Pod IP 地址。

yaml 示例

apiVersion: v1kind: ResourceQuotametadata:name: pods-rqnamespace: default # 限制 default 名称空间spec:hard:pods: "3" # 限制 Pod 的数量count/deployments.apps:"3"  # 限制 deployment 的数量count/services:"3" # 限制 services 的数量

注意:已经创建的资源不会计入其中

实操

apiVersion: v1kind: ResourceQuotametadata:name: object-rqnamespace: test # 限制 default 名称空间spec:hard:pods: "3" # 限制 Pod 的数量

[root@master cks]# kubectl apply -f RQ-object.yamlresourcequota/object-rq created[root@master cks]# kubectl get quota -n testNAME        AGE   REQUEST                                       LIMITmem-cpu     63m   requests.cpu: 0/1, requests.memory: 0/512Mi   limits.cpu: 0/2, limits.memory: 0/1Giobject-rq   6s    pods: 0/3storage     12m   requests.storage: 0/10G
---apiVersion: apps/v1 # 版本号kind: Deployment # 类型metadata: # 元数据name: rq-deployment # deployment的名称namespace: test # 命名类型spec: # 详细描述replicas: 2 # 副本数量selector: # 选择器,通过它指定该控制器可以管理哪些PodmatchLabels: # Labels匹配规则app: nginx-podtemplate: # 模块 当副本数据不足的时候,会根据下面的模板创建Pod副本metadata:labels:app: nginx-podspec:containers:- name: nginx # 容器名称image: nginx:1.17.1 # 容器需要的镜像地址ports:- containerPort: 80 # 容器所监听的端口resources:requests:cpu: 0.5memory: 256Milimits:cpu: 1memory: 512Mi
[root@master cks]# kubectl apply -f RQ-deploy.yamldeployment.apps/rq-deployment created[root@master cks]# kubectl get deploy -n testNAME            READY   UP-TO-DATE   AVAILABLE   AGErq-deployment   2/2     2            2           6s[root@master cks]# vim RQ-deploy.yaml[root@master cks]# kubectl get pod -n testNAME                             READY   STATUS    RESTARTS   AGErq-deployment-69f7bd5dd9-gcrdc   1/1     Running   0          46srq-deployment-69f7bd5dd9-h48bw   1/1     Running   0          46s[root@master cks]# kubectl get quota -n testNAME        AGE     REQUEST                                           LIMITmem-cpu     68m     requests.cpu: 1/1, requests.memory: 512Mi/512Mi   limits.cpu: 2/2, limits.memory: 1Gi/1Giobject-rq   5m15s   pods: 2/3storage     18m     requests.storage: 0/10G# 因为 mem-cpu 的限制,所有只设置2个副本

基于优先级类(PriorityClass)来设置资源配额

  1.  Pod 可以创建为特定的优先级。 通过使用配额规约中的 scopeSelector 字段,用户可以根据 Pod 的优先级控制其系统资源消耗。
  2.  仅当配额规范中的 scopeSelector 字段选择到某 Pod 时,配额机制才会匹配和计量 Pod 的资源消耗。
  3.  如果配额对象通过 scopeSelector 字段设置其作用域为优先级类,则配额对象只能 跟踪以下资源:
    1.  pods
    2.  cpu
    3.  memory
    4.  ephemeral-storage
    5.  limits.cpu
    6.  limits.memory
    7.  limits.ephemeral-storage
    8.  requests.cpu
    9.  requests.memory
    10.  requests.ephemeral-storage

yaml 示例

示例:创建一个配额对象,并将其与具有特定优先级的 Pod 进行匹配

# 集群中的 Pod 可取三个优先级类之一,即 "low"、"medium"、"high"# 为每个优先级创建一个配额对象apiVersion: v1kind: Listitems:- apiVersion: v1kind: ResourceQuotametadata:name: pods-highspec:hard:cpu: "1000"memory: 200Gipods: "10"scopeSelector:matchExpressions:- operator : InscopeName: PriorityClassvalues: ["high"]- apiVersion: v1kind: ResourceQuotametadata:name: pods-mediumspec:hard:cpu: "10"memory: 20Gipods: "10"scopeSelector:matchExpressions:- operator : InscopeName: PriorityClassvalues: ["medium"]- apiVersion: v1kind: ResourceQuotametadata:name: pods-lowspec:hard:cpu: "5"memory: 10Gipods: "10"scopeSelector:matchExpressions:- operator : InscopeName: PriorityClassvalues: ["low"]

apiVersion: v1kind: Podmetadata:name: high-priorityspec:containers:- name: high-priorityimage: ubuntucommand: ["/bin/sh"]args: ["-c", "while true; do echo hello; sleep 10;done"]resources:requests:memory: "10Gi"cpu: "500m"limits:memory: "10Gi"cpu: "500m"priorityClassName: high # priorityClassName 指的是什么,就优先使用这个优先级的配额约束。

LimitRange(限制范围)

  1. 默认情况下, Kubernetes 集群上的容器运行使用的计算资源没有限制。
  2.  使用资源配额,集群管理员可以以名字空间为单位,限制其资源的使用与创建。
  3.  在命名空间中,一个 Pod 或 Container 最多能够使用命名空间的资源配额所定义的 CPU 和内存用量。
  4.  有人担心,一个 Pod 或 Container 会垄断所有可用的资源。 LimitRange 是在命名空间内限制资源分配(给多个 Pod 或 Container)的策略对象,例如:资源额度 ResourceQuotas 设置为 requests.cpu 为 1 ,requests.memory 为 1Gi ,但是有人的 Pod 直接设置为 requests.cpu 为 1,requests.memory 为 1Gi,那么其他人就不能再创建 Pod 了,所以需要使用 LimitRange 对资源配额设置区间(最小和最大)。
  5.  一个 LimitRange(限制范围) 对象提供的限制能够做到:
    1. 在一个命名空间中实施对每个 Pod 或 Container 最小和最大的资源使用量的限制。
    2. 在一个命名空间中实施对每个 PersistentVolumeClaim 能申请的最小和最大的存储空间大小的限制。
    3. 在一个命名空间中实施对一种资源的申请值和限制值的比值的控制。
    4. 设置一个命名空间中对计算资源的默认申请/限制值,并且自动的在运行时注入到多个 Container 中。

其中 max 对应 limits

其中 mini 对应 request

示例

为命名空间配置 CPU 最小和最大约束

apiVersion: v1kind: LimitRangemetadata:name: cpu-min-max-demo-lrnamespace: default # 限制 default 命名空间spec:limits:- max:  # 对应limits的最大值cpu: "800m"memory: 1Gimin: # 对应request的最小值cpu: "200m"memory: 200Mitype: Container# Pod 中的容器的 cpu 的范围是 200m~800m# Pod 中的容器的 memory 的范围是 200mi~1Gi

配置命名空间的最小和最大内存约束

apiVersion: v1kind: LimitRangemetadata:name: mem-min-max-demo-lrnamespace: default # 限制 default 命名空间 spec:limits:- max:memory: 1Gimin:memory: 500Mi # Pod 中的容器的 memory 的范围是 500Mi~1Gitype: Container

为命名空间配置默认的内存请求和限制

apiVersion: v1kind: LimitRangemetadata:name: mem-limit-rangenamespace: default # 限制 default 命名空间    spec:limits:- default:memory: 512MidefaultRequest:memory: 256Mi # 为命名空间配置默认的内存请求和限制type: Container

限制存储消耗

apiVersion: v1kind: LimitRangemetadata:name: storagelimitsspec:limits:- type: PersistentVolumeClaimmax:storage: 2Gimin:storage: 1Gi

 

​apiVersion: v1kind: ResourceQuotametadata:name: storagequotaspec:hard:persistentvolumeclaims: "5" # 限制 PVC 数目和累计存储容量requests.storage: "5Gi"​

默认的 CPU 请求和限制

当您创建一个新的 Pod 并没有显式指定资源请求时,Kubernetes会使用

Default Request作为默认值。这可以帮助 Kubernetes 调度器决定在哪个节点上运行 Pod

如果您没有显式指定资源限制,Kubernetes会使用Default Limit作为默认值。这有助于确保容器不会无限制地使用资源

apiVersion: v1kind: LimitRangemetadata:name: cpu-limit-rangenamespace: default # 限制 default 命名空间   spec:limits:- default: # 可以与 max 一起设置cpu: 1defaultRequest:cpu: 500m # 声明了一个默认的 CPU 请求和一个默认的 CPU 限制type: Container

 实操

apiVersion: v1kind: LimitRangemetadata:name: cpu-min-max-demo-lrnamespace: test # 限制 default 命名空间spec:limits:- max:  # 对应limits的最大值cpu: "800m"memory: 1Gimin: # 对应request的最小值cpu: "200m"memory: 200Mitype: Container# Pod 中的容器的 cpu 的范围是 200m~800m# Pod 中的容器的 memory 的范围是 200mi~1Gi

其中 Default 参考的是 min 和 max ,因为没有对 default 单独设置

[root@master cks]# kubectl get limits -n testNAME                  CREATED ATcpu-min-max-demo-lr   2023-11-06T11:42:17Z[root@master cks]# kubectl describe limits -n testName:       cpu-min-max-demo-lrNamespace:  testType        Resource  Min    Max   Default Request  Default Limit  Max Limit/Request Ratio----        --------  ---    ---   ---------------  -------------  -----------------------Container   cpu       200m   800m  800m             800m           -Container   memory    200Mi  1Gi   1Gi              1Gi            -

相关文章:

kubernetes ResourceQuotas Limits(资源配额)

开头语 写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 简介 当多个用户或团队共享具有固定节点数目的集群时&#xff0c;人们会…...

【ARMv8架构系统安装PySide2】

ARMv8架构系统安装PySide2 Step1. 下载Qt资源包Step2. 配置和安装Qt5Step3. 检查Qt-5.15.2安装情况Step4. 安装PySide2所需的依赖库Step5. 下载和配置PySide2Step6. 检验PySide2是否安装成功 Step1. 下载Qt资源包 if you need the whole Qt5 (~900MB): wget http://master.qt…...

ECMAScript6详解

ECMAScript 6&#xff0c;也被称为 ES6 或 ECMAScript 2015&#xff0c;是 JavaScript 编程语言标准的一个主要更新。它于 2015 年正式发布&#xff0c;并带来了许多新特性和改进&#xff0c;使得 JavaScript 开发更加现代化和高效。下面是 ES6 的一些关键特性的详解&#xff1…...

[C#]使用PaddleInference图片旋转四种角度检测

官方框架地址】 https://github.com/PaddlePaddle/PaddleDetection.git 【算法介绍】 PaddleDetection 是一个基于 PaddlePaddle&#xff08;飞桨&#xff09;深度学习框架的开源目标检测工具库。它提供了一系列先进的目标检测算法&#xff0c;包括但不限于 Faster R-CNN, Ma…...

stable diffusion 基础教程-提示词之光的用法

基图 prompt: masterpiece,best quality,1girl,solo,looking at viewer,brown hair,hair between eyes,bangs,very long hair,red eyes,blush,bare shoulders,(white sundress),full body,Negative prompt: EasyNegative,badhandv4,nsfw,lowres,bad anatomy,bad hands,text…...

第9课 回声抑制(AEC+AGC+ANS)的实现

在第8课中&#xff0c;我们将推流端与播放端合并实现了一对一音视频聊天功能&#xff0c;一切看起来还不错。但在实际使用时&#xff0c;会遇到一个烦心的问题&#xff1a;说话时会听到比较大的回声&#xff0c;影响正常使用。所以&#xff0c;这节课我们来重点解决这个问题。 …...

软件测试|Python中的变量与关键字详解

简介 在Python编程中&#xff0c;变量和关键字是非常重要的概念。它们是构建和控制程序的基本要素。本文将深入介绍Python中的变量和关键字&#xff0c;包括它们的定义、使用方法以及一些常见注意事项。 变量 变量的定义 变量是用于存储数据值的名称。在Python中&#xff0…...

修改安卓apk设置为安卓主屏幕(launcher)

修改安卓apk 将apk可以设置安卓主屏幕 原理&#xff1a; 将打包好的apk文件进行拆包增加配置文件在重新编译回apk包 需要得相关文件下载 解包 apktool :https://pan.baidu.com/s/1oyCIYak_MHDJCvDbHj_qEA?pwd5j2xdex2jar&#xff1a;https://pan.baidu.com/s/1Nc-0vppVd0G…...

unity中 canvas下物体的朝向跟随

public Transform target; private Vector3 direction; void Update() { //第一种 //direction target.position - transform.position; //transform.up -direction.normalized; //第二种 if (target ! null ) { …...

HarmonOS 日期选择组件(DatePicker)

本文 我们一起来看基础组件中的 DatePicker 这就是 日程开发中的日期组件 他可以创建一个日期的范围 并创建一个日期的滑动选择器 这里 我们先写一个组件的骨架 Entry Component struct Index {build() {Row() {Column() {}.width(100%)}.height(100%)} }然后 我们先在Column组…...

linux中的系统安全

一.账号安全 将非登录用户的shell设为/sbin/nologin 系统中用户有三种&#xff1a;超级管理员 普通用户 程序用户 前两种用户可以登录系统&#xff0c;程序用户不给登录 所以称为非登录用户 命令格式&#xff1a; usermod -s /sbin/nologin&#xff08;改已有用户&#…...

LeetCode(209)长度最小的子数组⭐⭐

给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;s 7, nums [2,3,1,2,4,3]输出&#xff1a;2…...

【JAVA】MySQL中datetime类型23:59:59自动变为下一天的00:00:00

如&#xff1a;2024-08-11 23:59:59 变成了 2024-08-12 00:00:00。 解析&#xff1a;数据库入库的时候会有500毫秒的进位&#xff0c;然而程序在赋值时间给变量的时候很大概率会超过500ms&#xff0c;有时是999ms。 解决方案 // DateUtil Hutool官网 将生成的时间往前偏移99…...

Unity游戏内相机(主角头部视角)的旋转问题:“万向节锁定”(Gimbal Lock)

前言&#xff1a; 在Unity中&#xff0c;相机的正前方是Z正半轴&#xff0c;相机的正右方是X正半轴&#xff0c;相机的正上方是Y正半轴。这个很好理解。 现在&#xff0c;我想要相机看向左前上方45&#xff0c;你会觉得要怎么做呢&#xff1f; 如果是我的话&#xff0c;我的第一…...

Keras实现seq2seq

概述 Seq2Seq是一种深度学习模型&#xff0c;主要用于处理序列到序列的转换问题&#xff0c;如机器翻译、对话生成等。该模型主要由两个循环神经网络&#xff08;RNN&#xff09;组成&#xff0c;一个是编码器&#xff08;Encoder&#xff09;&#xff0c;另一个是解码器…...

1080p 1k 2k 4k 8k 分辨率,2K就不应该存在。

众所周知 1K&#xff08;1080P&#xff09;&#xff1a;分辨率为19201080像素&#xff0c;2K&#xff1a;分辨率为25601440像素4K&#xff1a;分辨率为38402160像素8K&#xff1a;分辨率为76804320像素 边长比例&#xff0c;和像素比例如下&#xff1a; 2K宽高都是1k的1.333…...

接口芯片选型分析 四通道差分驱动可满足ANSI TIA/EIA-422-B 和ITU V.11 的要求 低功耗,高速率,高ESD

四通道差分驱动可满足ANSI TIA/EIA-422-B 和ITU V.11 的要求 低功耗&#xff0c;高速率&#xff0c;高ESD。 其中GC26L31S可替代AM26LS31/TI&#xff0c;GC26L32S替代AM26LS32/TI&#xff0c;GC26E31S替代TI的AM26LV31E...

使用.Net nanoFramework获取ESP32板载按键的点击事件

本文以 ESP32-S3-Zero 板载的按键为例&#xff0c;介绍了GPIO的使用方法&#xff0c;以及如何获取按键的点击事件。板载按钮作为自带的天然用户按钮&#xff0c;除了其本身的功能外&#xff0c;也可以作为某些应用场景下的简单的交互方式。 1. 引言 对于一般的产品来说&#x…...

安全远控如何设置?揭秘ToDesk、TeamViewer 、向日葵安全远程防御大招

写在前面一、远程控制&#xff1a;安全性不可忽略二、远控软件安全设置实测 ◉ ToDesk◉ TeamViewer◉ 向日葵 三、远控安全的亮点功能四、个人总结与建议 写在前面 说到远程办公&#xff0c;相信大家都不陌生。远程工作是员工在家中或者其他非办公场所上班的一种工作模式&am…...

Spring AOP(详解)

目录 1.AOP概述 2.AOP相关术语 3.Spring AOP的原理机制 3.1JDK动态代理 3.2 CGLIB动态代理 3.3简单代码展示 3.3.1JDK动态代理 3.3.2CGLIB动态代理 4.Spring的AOP配置 4.1pom.xml 4.2增强方法 4.3切点 4.4切面 5.基于注解的AOP配置 5.1.创建工程 5.2.增强 5.3AOP…...

Linux系统编程之进程

目录 1、进程关键概念 1.什么是程序&#xff0c;什么是进程&#xff0c;有什么区别 2.如何查看系统中有那些进程 3.什么是进程标识符 4.什么叫父进程&#xff0c;什么叫子进程 5.C语言的存储空间是如何分配的 2、进程创建 1.fork函数创建进程 2.vfork函数创建进程 3、…...

Vue中使用require.context自动引入组件的方法介绍

我们项目开发中&#xff0c;经常需要import或者export各种模块&#xff0c;那么有没有什么办法可以简化这种引入或者导出操作呢&#xff1f;答案是肯定的&#xff0c;下面就为大家介绍一下require.context require.context 是 webpack 提供的一个 API&#xff0c;用于创建 con…...

Java 监控诊断利器 Arthas monitor/watch/trace 命令使用详解

目录 一、命令介绍二、测试Demo三、命令使用示例3.1、monitor 命令3.1.1、监控primeFactors方法调用情况&#xff08;5秒一个周期&#xff0c;每过5秒将这5秒统计的信息输出&#xff09;3.1.2、监控primeFactors方法调用情况&#xff08;5秒一个周期&#xff0c;每过5秒将这5秒…...

论文阅读:基于MCMC的能量模型最大似然学习剖析

On the Anatomy of MCMC-Based Maximum Likelihood Learning of Energy-Based Models 相关代码&#xff1a;点击 本文只介绍关于MCMC训练的部分&#xff0c;由此可知&#xff0c;MCMC常常被用于训练EBM。最后一张图源于Implicit Generation and Modeling with Energy-Based Mod…...

【Verilog】期末复习——设计一个带异步复位端且高电平有效的32分频电路

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…...

基于springboot的java读取文档内容(超简单)

读取一个word文档里面的内容&#xff0c;并取出来。 代码&#xff1a; SneakyThrowsGetMapping(value "/readWordDoc")ApiOperationSupport(order 1)ApiOperation(value "文档读取 ", notes "文档读取 ")public R ReadWordDoc () {System.o…...

K8S亲和性,反亲和性,及污点

nodeName&#xff1a;硬匹配&#xff0c;不走调度策略 nodeSelector&#xff1a;根据节点的标签选择&#xff0c;会走调度的算法 只要是走调度算法&#xff0c;在不满足预算策略的情况下&#xff0c;所有pod都是pending node节点的亲和性&#xff1a; 硬策略&#xff1a;必…...

2024年,AI、Web3、区块链、元宇宙:有没有“相互成就“的可能性?

加密圈最近有点冷清&#xff0c;曾经是科技界的宠儿&#xff0c;去年中旬开始一直在被SEC的诉讼困扰着&#xff0c;而且正处冷清的熊市&#xff0c;被迫居于 AI 后面的次要地位。 曾在 Web3 领域活跃并具有影响力的企业家 Jeremiah Owyang 住在旧金山&#xff0c;目前也深入研…...

Mac电脑好用的修图软件:Affinity Photo 2中文 for Mac

Affinity Photo 2提供了广泛的图像编辑和调整工具&#xff0c;使用户能够对照片进行精确的编辑和改进。它支持图像裁剪、旋转、缩放、变形等操作&#xff0c;以及曝光、色彩、对比度、饱和度等调整。 非破坏性编辑&#xff1a;软件采用非破坏性编辑方式&#xff0c;即对原始图…...

数据结构之Radix和Trie

数据结构可视化演示链接&#xff0c;也就是视频中的网址 Radix树&#xff1a;压缩后的Trie树 Radix叫做基数树&#xff08;压缩树&#xff09;&#xff0c;就是有相同前缀的字符串&#xff0c;其前缀可以作为一个公共的父节点。同时在具体存储上&#xff0c;Radix树的处理是以…...

wordpress自己写插件/seo顾问阿亮

之前写过一个链家网北京二手房的数据抓取&#xff0c;然后本来今天想着要把所有的东西弄完&#xff0c;但是临时有事出去了一趟&#xff0c;耽搁了一下&#xff0c;然后现在是想着把北京的二手房的信息都进行抓取&#xff0c;并且存储在mongodb中&#xff0c;首先是通过https:/…...

不写代码门户网站建设/各网站收录

/e/config/config.php转载于:https://www.cnblogs.com/bubuchu/p/10277892.html...

行政机关单位网站建设/班级优化大师的功能

量词 d aaddsfwfjihvucdddd321ddd 匹配d dd dddd d* 0个或多个 d&#xff1f; 0个或1个 d. 匹配任何字符(除换行) d{4}dddd d{2,4}dd--ddd-dddd d{2,}两个和连个以上 ^d$ 行首 行尾 a|b 或的意思 () 括号里是整体的 [cdy] c或d或y 匹配其中的一个…...

哪些网站用python做服务框架/潍坊快速网站排名

影评分析第2篇写在前面 日本电视动画《BORUTO -火影新世代》&#xff08;中国大陆译名《博人传&#xff1a;火影忍者新时代》&#xff09;改编自岸本齐史原作并监修、池本干雄编绘、小太刀右京编剧的同名漫画&#xff0c;是《火影忍者》系列的续篇&#xff0c;讲述原作故事完结…...

群辉wordpress阿里云ssl/网店代运营靠谱吗

itext 使用其实并不难 就像java swing一样通过调用各种组件来实现一系列功能。 itext 常用的基本模块(类)有Chunk, Phrase, Paragraph,Image. 由于本文只是概括介绍itext&#xff0c; 所以不在这里详细介绍了. 但是我在这里推荐一下比较详细介绍itext的教程文档--Itext in act…...

网站建设 英文版/免费网页模板网站

一、Spark是什么 Spark是一种快速、通用、可扩展的大数据分析引擎。Spark生态系统已经发展成为一个包含多个子项目的集合&#xff0c;其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子项目&#xff0c;Spark是基于内存计算的大数据并行计算框架。除了扩展了广泛使…...