【云原生|Kubernetes】10-Namespace的cpu和内存的请求与限制

这篇具有很好参考价值的文章主要介绍了【云原生|Kubernetes】10-Namespace的cpu和内存的请求与限制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【云原生|Kubernetes】10-Namespace的cpu和内存的请求与限制

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

​ 一个 Kubernetes 集群可被划分为多个命名空间。 如果你在具有默认内存限制的命名空间内尝试创建一个 Pod,并且这个 Pod 中的容器没有声明自己的内存资源限制, 那么控制面会为该容器设定默认的内存限制。

  • 创建namespace
[root@master ~]# kubectl create namespace default-mem-example
namespace/default-mem-example created
[root@master pod]# kubectl get namespace default-mem-example
NAME                  STATUS   AGE
default-mem-example   Active   14m
[root@master pod]#
  • 为该namespace创建内存LimitRange
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: default-mem-example
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container
  • 查看namespace详细信息
[root@master pod]# kubectl apply  -f memory-defaults.yaml
limitrange/mem-limit-range created
[root@master pod]#
[root@master pod]# kubectl describe namespace default-mem-example
Name:         default-mem-example
Labels:       kubernetes.io/metadata.name=default-mem-example
Annotations:  <none>
Status:       Active

No resource quota.

Resource Limits
 Type       Resource  Min  Max  Default Request  Default Limit  Max Limit/Request Ratio
 ----       --------  ---  ---  ---------------  -------------  -----------------------
 Container  memory    -    -    256Mi            512Mi          -
[root@master pod]#
  • 在 default-mem-example 命名空间中创建一个 Pod, 并且该 Pod 中所有容器都没有声明自己的内存请求和内存限制, 控制面 会将内存的默认请求值 256MiB 和默认限制值 512MiB 应用到 Pod 上。
apiVersion: v1
kind: Pod
metadata:
  name: default-mem-demo
  namespace: default-mem-example
spec:
  containers:
  - name: default-mem-demo-ctr
    image: nginx
  • 运行Pod,查看详细信息
 kubectl describe  -n default-mem-example  pods default-mem-demo
 
 ##  输出内容显示该 Pod 的容器有 256 MiB 的内存请求和 512 MiB 的内存限制。 这些都是 LimitRange 设置的默认值。
 containers:
- image: nginx
  imagePullPolicy: Always
  name: default-mem-demo-ctr
  resources:
    limits:
      memory: 512Mi
    requests:
      memory: 256Mi

声明容器的内存限制而不声明它的请求

  • 容器的内存请求被设置为它的内存限制相同的值。注意该容器没有被指定默认的内存请求值。

声明容器的内存请求而不声明内存限制

  • 容器的内存请求为 Pod 清单中声明的值。 然而同一容器的内存限制被设置为 该命名空间的默认内存限制值。

说明:

LimitRange 不会检查它应用的默认值的一致性。 这意味着 LimitRange 设置的 limit 的默认值可能小于客户端提交给 API 服务器的声明中为容器指定的 request 值。如果发生这种情况,最终会导致 Pod 无法调度。

设置默认内存限制和请求的动机

如果你的命名空间设置了内存 资源配额, 那么为内存限制设置一个默认值会很有帮助。 以下是内存资源配额对命名空间的施加的三条限制:

  • 命名空间中运行的每个 Pod 中的容器都必须有内存限制。 (如果为 Pod 中的每个容器声明了内存限制, Kubernetes 可以通过将其容器的内存限制相加推断出 Pod 级别的内存限制)。
  • 内存限制用来在 Pod 被调度到的节点上执行资源预留。 预留给命名空间中所有 Pod 使用的内存总量不能超过规定的限制。
  • 命名空间中所有 Pod 实际使用的内存总量也不能超过规定的限制。

当你添加 LimitRange 时:

如果该命名空间中的任何 Pod 的容器未指定内存限制, 控制面将默认内存限制应用于该容器, 这样 Pod 可以在受到内存 ResourceQuota 限制的命名空间中运行。

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

  1. 以下为LimitRange的示例清单。 清单中声明了默认 CPU 请求和默认 CPU 限制。
  • 创建namespace
[root@master ~]# kubectl create namespace default-cpu-example
namespace/default-cpu-example created
[root@master pod]# kubectl get namespace default-cpu-example
NAME                  STATUS   AGE
default-cpu-example  Active   14m
[root@master pod]#
  • 为该namespace创建CPU的LimitRange
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: default-cpu-example
spec:
  limits:
  - default:
      cpu: 1
    defaultRequest:
      cpu: 0.5
    type: Container
  • 查看namespace详细信息
kubectl get pod default-cpu-demo --output=yaml --namespace=default-cpu-example

## 输出显示该 Pod 的唯一的容器有 500m cpu 的 CPU 请求和 1 cpu 的 CPU 限制。 这些是 LimitRange 声明的默认值。
containers:
- image: nginx
  imagePullPolicy: Always
  name: default-cpu-demo-ctr
  resources:
    limits:
      cpu: "1"
    requests:
      cpu: 500m

只声明容器的CPU限制,而不声明请求

  • 容器的 CPU 请求和 CPU 限制设置相同

只声明容器的CPU请求,而不声明它的限制

  • 容器的 CPU 请求为 Pod 清单中声明的值。 然而同一容器的 CPU 限制被设置为命名空间的默认 CPU 限制值。

默认 CPU 限制和请求的动机

如果你的命名空间设置了 CPU 资源配额, 为 CPU 限制设置一个默认值会很有帮助。 以下是 CPU 资源配额对命名空间的施加的两条限制:

  • 命名空间中运行的每个 Pod 中的容器都必须有 CPU 限制。
  • CPU 限制用来在 Pod 被调度到的节点上执行资源预留。

预留给命名空间中所有 Pod 使用的 CPU 总量不能超过规定的限制。

当你添加LimitRange时:

如果该命名空间中的任何 Pod 的容器未指定 CPU 限制, 控制面将默认 CPU 限制应用于该容器, 这样 Pod 可以在受到 CPU ResourceQuota 限制的命名空间中运行。

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

  • 创建一个namespace
kubectl create namespace default-mem-example
  • 资源清单定义最大,最小的内存限制
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: default-mem-example
spec:
  limits:
    - default:
        memory: 512Mi
      defaultRequest:
        memory: 256Mi
      max:  
        memory: 1Gi
      min:
        memory: 200Mi
      type: Container
  • 查看资源详情
[root@master pod]# kubectl describe namespace default-mem-example
Name:         default-mem-example
Labels:       kubernetes.io/metadata.name=default-mem-example
Annotations:  <none>
Status:       Active

No resource quota.

Resource Limits
 Type       Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
 ----       --------  ---    ---  ---------------  -------------  -----------------------
 Container  memory    200Mi  1Gi  256Mi            512Mi          -

现在,每当在 default-mem-example 命名空间中创建 Pod 时,Kubernetes 就会执行下面的步骤:

  • 如果 Pod 中的任何容器未声明自己的内存请求和限制,控制面将为该容器设置默认的内存请求和限制。
  • 确保该 Pod 中的每个容器的内存请求至少 200MiB。
  • 确保该 Pod 中每个容器内存请求不大于 1 GiB。

创建一个超过最大内存限制的 Pod

  • Pod不会创建成功,因为它定义了一个容器的内存请求超过了允许的值。

创建一个不满足最小内存请求的 Pod

  • Pod 不会创建成功,因为它定义了一个容器的内存请求小于强制要求的最小值。

创建一个没有声明内存请求和限制的 Pod

  • Pod 没有为容器声明任何内存请求和限制,集群会从 LimitRange 获取默认的内存请求和限制 应用于容器

LimitRange 为命名空间设定的最小和最大内存限制只有在 Pod 创建和更新时才会强制执行。

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

  • 创建一个namespace
kubectl create namespace default-mem-example
  • 资源清单定义最大,最小的内存限制
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: default-mem-example
spec:
  limits:
    - default:
        cpu: 1
      defaultRequest:
        cpu: 0.8
      max:  
        cpu: 2
      min:
        cpu: 0.6
      type: Container
  • 查看资源详情
[root@master pod]# kubectl describe namespace default-mem-example
Name:         default-mem-example
Labels:       kubernetes.io/metadata.name=default-mem-example
Annotations:  <none>
Status:       Active

No resource quota.

Resource Limits
 Type       Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
 ----       --------  ---    ---  ---------------  -------------  -----------------------
 Container  cpu       600m   2    800m             1              -
[root@master pod]#

现在,每当你在 default-mem-example 命名空间中创建 Pod 时,或者某些其他的Kubernetes API客户端创建了等价的 Pod 时,Kubernetes 就会执行下面的步骤:

  • 如果 Pod 中的任何容器未声明自己的 CPU 请求和限制,控制面将为该容器设置默认的 CPU 请求和限制。
  • 确保该 Pod 中的每个容器的 CPU 请求至少 600 millicpu。
  • 确保该 Pod 中每个容器 CPU 请求不大于 2 gcpu。

创建一个超过最大 CPU 限制的 Pod

  • Pod 不会创建成功,因为其中定义了一个无法被接受的容器。 该容器之所以无法被接受是因为其中设定了过高的 CPU 限制值

创建一个不满足最小 CPU 请求的 Pod

  • Pod 不会创建成功,因为其中定义了一个无法被接受的容器。 该容器无法被接受的原因是其中所设置的 CPU 请求小于最小值的限制

创建一个没有声明 CPU 请求和 CPU 限制的 Pod

  • 容器没有声明自己的 CPU 请求和限制, 控制面会根据命名空间中配置 LimitRange 设置默认的 CPU 请求和限制。

只有当 Pod 创建或者更新时,LimitRange 为命名空间规定的 CPU 最小和最大限制才会被强制执行。 如果你对 LimitRange 进行修改,那不会影响此前创建的 Pod。

为命名空间配置内存和 CPU 配额

为命名空间下运行的所有 Pod 设置总的内存和 CPU 配额。你可以通过使用 ResourceQuota对象设置配额.

  • 创建命名空间
kubectl create namespace quota-mem-cpu-example
  • ResourceQuota 的示例清单
apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

ResourceQuota uota-mem-cpu-example 命名空间中设置了如下要求:

  • 在该命名空间中的每个 Pod 的所有容器都必须要有内存请求和限制,以及 CPU 请求和限制。
  • 在该命名空间中所有 Pod 的内存请求总和不能超过 1 GiB。
  • 在该命名空间中所有 Pod 的内存限制总和不能超过 2 GiB。
  • 在该命名空间中所有 Pod 的 CPU 请求总和不能超过 1 cpu。
  • 在该命名空间中所有 Pod 的 CPU 限制总和不能超过 2 cpu。

注意:是namespace下所有pod资源的总和

配置命名空间下 Pod 配额

  • Pod配额是配置pod中容器的副本数
  • 即使 Deployment 指定了三个副本, 也只有两个 Pod 被创建,原因是之前已经定义了配额
apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-demo
spec:
  hard:
    pods: "2"

总结

以下是配置命名空间的cpu和内存的默认值,以及最大,最小值文章来源地址https://www.toymoban.com/news/detail-481519.html

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: default-mem-example
spec:
  limits:
    - default:
        memory: 512Mi
        cpu: 1
      defaultRequest:
        memory: 256Mi
        cpu: 0.8

      max:  
        memory: 1Gi
        cpu: 2
      min:
        memory: 200Mi
        cpu: 0.6
      type: Container
  • 显示如下
[root@master pod]# kubectl describe namespace default-mem-example
Name:         default-mem-example
Labels:       kubernetes.io/metadata.name=default-mem-example
Annotations:  <none>
Status:       Active

No resource quota.

Resource Limits
 Type       Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
 ----       --------  ---    ---  ---------------  -------------  -----------------------
 Container  cpu       600m   2    800m             1              -
 Container  memory    200Mi  1Gi  256Mi            512Mi          -
[root@master pod]#
  • pod中的容器不指定cpu,内存的限制和请求时,将使用命名空间设置的默认值;
  • pod中的容器只设置cpu或者内存的请求时,容器的 CPU 和内存的限制被设置为命名空间的默认 CPU CPU 和内存限制值;
  • pod中的容器只设置cpu或者内存的限制时,容器的 CPU 与内存请求,和 ,CPU 与内存限制设置相同;
  • 命令空间的配额限制的是该空间中所有pod资源的总和不能超过配额;

到了这里,关于【云原生|Kubernetes】10-Namespace的cpu和内存的请求与限制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker】限制已运行容器的Cpu和内存

    docker限制已运行容器的Cpu和内存 本文首发于 慕雪的寒舍 最近云服务器的内存经常不够用,而且是 莫名其妙 的增多,在腾讯云的控制台里面看,4g的内存占用了3.2g,就卡到连ssh都连不上了 PS: 已换过网络和设备,确认不是网络问题导致无法ssh 实在没辙了,只能把我的几个不

    2023年04月25日
    浏览(26)
  • 【云原生】kubernetes中容器的资源限制

    目录 1 metrics-server 2 指定内存请求和限制 3 指定 CPU 请求和限制 资源限制 在k8s中对于容器资源限制主要分为以下两类: 内存资源限制: 内存 请求 (request)和内存 限制 (limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。 官网参

    2024年02月14日
    浏览(29)
  • k8s pod “cpu和内存“ 资源限制

    转载用于收藏学习:原文 为了保证充分利用集群资源,且确保重要容器在运行周期内能够分配到足够的资源稳定运行,因此平台需要具备 Pod的资源限制的能力。 对于一个pod来说,资源最基础的2个的指标就是:CPU和内存。 Kubernetes提供了个采用requests和limits 两种类型参数对资

    2024年02月13日
    浏览(49)
  • 如何在Linux上通过cgroup限制一个进程使用CPU和内存

    Cgroup(Control Group)是 Linux 内核的一个功能,可以通过它来限制进程的 CPU 和内存占用。Cgroup 实现了对系统资源的细粒度控制和管理,可以将一组进程放入同一个 Cgroup 中,并对该 Control Group 中的所有进程共享相应的资源配额。 下面举个实际的例子,演示如何使用 Cgroup 限制一

    2024年02月15日
    浏览(26)
  • 云原生之深入解析如何正确计算Kubernetes容器CPU使用率

    使用 Prometheus 配置 kubernetes 环境中 Container 的 CPU 使用率时,会经常遇到 CPU 使用超出 100%,现在来分析一下: container_spec_cpu_period:当对容器进行 CPU 限制时,CFS 调度的时间窗口,又称容器 CPU 的时钟周期通常是 100000 微秒 container_spec_cpu_quota:是指容器的使用 CPU 时间周期总量

    2024年02月10日
    浏览(52)
  • 在Kubernetes(K8s)中,CPU和内存的单位

    在Kubernetes(K8s)中,CPU和内存的单位有一些特定的表示法,它们是: CPU单位 - millicores (m): m 表示 millicores,即千分之一的 CPU 核心。 例如, 100m 表示 0.1 个 CPU 核心,而 500m 表示 0.5 个 CPU 核心。 这种表示法用于将 CPU 资源分配为相对小的单位,使得可以更精确地定义容器对

    2024年01月24日
    浏览(28)
  • [3D数据深度学习] (PC/服务器集群cluster)CPU内存/GPU显存限制及解决办法

    3D数据的深度学习目前研究远不如2D深度学习成熟,其中最大的一个原因之一就是收到硬件条件的限制。3D数据虽说只比2D数据增加了一个维度,但所占据的内存却是成倍的增长。对于3D数据的深度学习,我们会分析其在CPU内存和GPU显存两方面的限制,希望大家能够充分利用自己

    2024年02月10日
    浏览(38)
  • K8S 1.27 动态调整容器CPU和内存资源限制,无需重启应用程序

    如果您在部署Pod时指定了 CPU 和内存资源,更改资源大小需要重新启动 Pod。到目前为止,重启对于正在运行工的作负载是一种破坏性操作。 Kubernetes 1.27 中的 alpha 功能发布。其中一项能够自动调整 Pod 的 CPU 和内存限制的大小,只需修补正在运行的 Pod 定义即可更改它们,而无

    2024年02月07日
    浏览(36)
  • 云原生之深入解析K8S的请求和限制

    在 Kubernetes 中使用容器时,了解涉及的资源是什么以及为何需要它们很重要。有些进程比其它进程需要更多的 CPU 或内存,这很关键,永远不应该让进程饥饿,知道了这一点,那么应该正确配置容器和 Pod,以便充分利用两者。 使用 Kubernetes 时,限制和请求是重要的设置。Ku

    2024年02月13日
    浏览(27)
  • 【电脑优化】win10、win11限制cpu处理器最大频率

    win+r输入regedit打开注册表 在注册表地址栏输入如下: 进入cpu相关设置页面,修改Attributes为2 3.此时电源计划设置页面,多出了处理器频率设置选项,可以设置适中点,限制3.8Ghz就输入3800就ok(不太严谨,见谅)。 此后,打开个大点的游戏,你会发现就算核心全部跑满,也不

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包