Kubernetes配置 Pods 和容器—调整分配给容器的 CPU 和内存资源

这篇具有很好参考价值的文章主要介绍了Kubernetes配置 Pods 和容器—调整分配给容器的 CPU 和内存资源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本页说明如何在不重启 Pod 或其容器的情况下调整分配给运行中 Pod 容器的 CPU 和内存资源。 Kubernetes 节点会基于 Pod 的 requests 为 Pod 分配资源, 并基于 Pod 的容器中指定的 limits 限制 Pod 的资源使用。

对于原地调整 Pod 资源而言:

  • 针对 CPU 和内存资源的容器的 requests 和 limits 是可变更的
  • Pod 状态中 containerStatuses 的 allocatedResources 字段反映了分配给 Pod 容器的资源。
  • Pod 状态中 containerStatuses 的 resources 字段反映了如同容器运行时所报告的、针对正运行的容器配置的实际资源 requests 和 limits
  • Pod 状态中 resize 字段显示上次请求待处理的调整状态。此字段可以具有以下值:
    • Proposed:此值表示请求调整已被确认,并且请求已被验证和记录。
    • InProgress:此值表示节点已接受调整请求,并正在将其应用于 Pod 的容器。
    • Deferred:此值意味着在此时无法批准请求的调整,节点将继续重试。 当其他 Pod 退出并释放节点资源时,调整可能会被真正实施。
    • Infeasible:此值是一种信号,表示节点无法承接所请求的调整值。 如果所请求的调整超过节点可分配给 Pod 的最大资源,则可能会发生这种情况。

准备开始

你必须拥有一个 Kubernetes 的集群,同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。

你的 Kubernetes 服务器版本必须不低于版本 1.27. 要获知版本信息,请输入 kubectl version.

容器调整策略

调整策略允许更精细地控制 Pod 中的容器如何针对 CPU 和内存资源进行调整。 例如,容器的应用程序可以处理 CPU 资源的调整而不必重启, 但是调整内存可能需要应用程序重启,因此容器也必须重启。

为了实现这一点,容器规约允许用户指定 resizePolicy。 针对调整 CPU 和内存可以设置以下重启策略:

  • NotRequired:在运行时调整容器的资源。
  • RestartContainer:重启容器并在重启后应用新资源。

如果未指定 resizePolicy[*].restartPolicy,则默认为 NotRequired

说明:

如果 Pod 的 restartPolicy 为 Never,则 Pod 中所有容器的调整重启策略必须被设置为 NotRequired

下面的示例显示了一个 Pod,其中 CPU 可以在不重启容器的情况下进行调整,但是内存调整需要重启容器。

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-5
  namespace: qos-example
spec:
  containers:
    - name: qos-demo-ctr-5
      image: nginx
      resizePolicy:
        - resourceName: cpu
          restartPolicy: NotRequired
        - resourceName: memory
          restartPolicy: RestartContainer
      resources:
        limits:
          memory: "200Mi"
          cpu: "700m"
        requests:
          memory: "200Mi"
          cpu: "700m"

说明:

在上述示例中,如果所需的 CPU 和内存请求或限制已更改,则容器将被重启以调整其内存。

创建具有资源请求和限制的 Pod

​你可以通过为 Pod 的容器指定请求和/或限制来创建 Guaranteed 或 Burstable 服务质量类的 Pod。

考虑以下包含一个容器的 Pod 的清单。

pods/qos/qos-pod-5.yaml

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-5
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-ctr-5
    image: nginx
    resources:
      limits:
        memory: "200Mi"
        cpu: "700m"
      requests:
        memory: "200Mi"
        cpu: "700m"

在 qos-example 名字空间中创建该 Pod:

kubectl create namespace qos-example
kubectl create -f https://k8s.io/examples/pods/qos/qos-pod-5.yaml --namespace=qos-example

此 Pod 被分类为 Guaranteed QoS 类,请求 700m CPU 和 200Mi 内存。

查看有关 Pod 的详细信息:

kubectl get pod qos-demo-5 --output=yaml --namespace=qos-example

另请注意,resizePolicy[*].restartPolicy 的值默认为 NotRequired, 表示可以在容器运行的情况下调整 CPU 和内存大小。

spec:
  containers:
    ...
    resizePolicy:
    - resourceName: cpu
      restartPolicy: NotRequired
    - resourceName: memory
      restartPolicy: NotRequired
    resources:
      limits:
        cpu: 700m
        memory: 200Mi
      requests:
        cpu: 700m
        memory: 200Mi
...
  containerStatuses:
...
    name: qos-demo-ctr-5
    ready: true
...
    allocatedResources:
      cpu: 700m
      memory: 200Mi
    resources:
      limits:
        cpu: 700m
        memory: 200Mi
      requests:
        cpu: 700m
        memory: 200Mi
    restartCount: 0
    started: true
...
  qosClass: Guaranteed

更新 Pod 的资源

​假设要求的 CPU 需求已上升,现在需要 0.8 CPU。这通常由 VerticalPodAutoscaler (VPA) 这样的实体确定并可能以编程方式应用。

说明:

尽管你可以更改 Pod 的请求和限制以表示新的期望资源, 但无法更改 Pod 创建时所归属的 QoS 类。

现在对 Pod 的 Container 执行 patch 命令,将容器的 CPU 请求和限制均设置为 800m

kubectl -n qos-example patch pod qos-demo-5 --patch '{"spec":{"containers":[{"name":"qos-demo-ctr-5", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'

在 Pod 已打补丁后查询其详细信息。

kubectl get pod qos-demo-5 --output=yaml --namespace=qos-example

以下 Pod 规约反映了更新后的 CPU 请求和限制。

spec:
  containers:
    ...
    resources:
      limits:
        cpu: 800m
        memory: 200Mi
      requests:
        cpu: 800m
        memory: 200Mi
...
  containerStatuses:
...
    allocatedResources:
      cpu: 800m
      memory: 200Mi
    resources:
      limits:
        cpu: 800m
        memory: 200Mi
      requests:
        cpu: 800m
        memory: 200Mi
    restartCount: 0
    started: true

观察到 allocatedResources 的值已更新,反映了新的预期 CPU 请求。 这表明节点能够容纳提高后的 CPU 资源需求。

在 Container 状态中,更新的 CPU 资源值显示已应用新的 CPU 资源。 Container 的 restartCount 保持不变,表示已在无需重启容器的情况下调整了容器的 CPU 资源。文章来源地址https://www.toymoban.com/news/detail-544218.html

到了这里,关于Kubernetes配置 Pods 和容器—调整分配给容器的 CPU 和内存资源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【云原生】Docker容器资源限制(CPU/内存/磁盘)

    目录 ​编辑 1.限制容器对内存的使用 2.限制容器对CPU的使用 3.block IO权重 4.实现容器的底层技术 1.cgroup 1.查看容器的ID 2.在文件中查找 2.namespace 1.Mount 2.UTS 3.IPC 4.PID 5.Network 6.User 1.限制容器对内存的使用 ⼀个 docker host 上会运⾏若⼲容器,每个容器都需要 CPU、内存和 IO 资源。对

    2024年02月14日
    浏览(49)
  • K8S学习指南(10)-k8s中为pod分配CPU和内存资源

    Kubernetes(简称K8s)是一种开源的容器编排平台,广泛用于构建、部署和管理容器化应用。在Kubernetes中,Pod是最小的可部署单元,而资源分配是确保Pod正常运行的关键因素之一。本文将深入探讨如何在Kubernetes中为Pod分配CPU和内存资源,并提供详细的示例。 在容器化环境中,多

    2024年02月04日
    浏览(57)
  • 【云计算与虚拟化】第五章 实验一 vCenter Server的高级功能—vMotion、虚拟内存、虚拟CPU、磁盘分配及资源池

    实验一    vCenter Server的高级功能—vMotion、虚拟内存、虚拟CPU、磁盘分配及资源池 1.通过vSphere client 客户端登陆vCenter服务器 (1)再次新建一个共享存储,iSCSI类型的,大小60G,名称为iSCSI-2。 (2)将运行在ESXi01主机上的虚拟机,在关机的状态下,数据存储位置不动,运行的

    2024年02月04日
    浏览(52)
  • Docker网络(网络通信),资源控制(CPU优化,内存优化,磁盘优化),数据管理(数据卷,端口映射,容器互联)

    目录 docker网络 网络实现原理 网络实现实例 网络模式 查看Docker中的网络列表: 指定容器网络模式 模式详解 Host模式(主机模式): Container模式(容器模式): None模式(无网络模式): Bridge模式(桥接模式): 自定义网络: cpu优化概述 1. 资源限制: 2. CPU 实时调度策略:

    2024年01月16日
    浏览(84)
  • 【Docker】Docker Desktop配置资源:cpu、内存等(windows环境下)

    Docker 是指容器化技术,用于支持创建和使用 Linux® 容器(LXC技术) 。 我们在 Window 上安装 Docker Desktop ,需要基于 Linux 环境。 在 Windows上,Docker Desktop 为我们提供通过了两个选项:WSL 与 Hyper-V 。 1.WSL2和hyper-v区别 简单来说: wsl是一个运行在我下面的解释linux命令的程序,可

    2024年02月09日
    浏览(61)
  • 23、hadoop集群中yarn运行mapreduce的内存、CPU分配调度计算与优化

    1、hadoop3.1.4简单介绍及部署、简单验证 2、HDFS操作 - shell客户端 3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件夹属性等)-java 4、HDFS-java操作类HDFSUtil及junit测试(HDFS的常见操作以及H

    2024年02月07日
    浏览(53)
  • Spark内存资源分配——spark.executor.memory等参数的设置方法

    基于论坛上一些关于spark内存设置的文章,我对一个项目中实际运行的任务进行了内存参数分析和优化。如果要了解更多详细设置原理,可见文末的参考文章链接。 已知内存分配存在通过用户提交的参数设置进行静态分配,和yarn进行动态分配两种,所以本文对两种状况都根据

    2023年04月13日
    浏览(113)
  • Linux 查看占用资源cpu、内存最大的进程命令

    1、详细查询命令: 查看cpu最大进程,或者内存最大进程。 命令解析:该命令组合实际上是下面两句命令组合。 其中: 以上组合获得cpu或者内存最大的进程。 2、简单查询命令: 根据以上,也可以简化命令为 命令: 按下交互命令快捷键M(按内存排序),P(按cpu占用排序)

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

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

    2024年02月13日
    浏览(68)
  • 【云原生】kubernetes中容器的资源限制

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

    2024年02月14日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包