一文掌握k8s容器的资源限制

简介

在Kubernetes(K8s)中,资源的申请与限制(Resource Requests and Limits)是非常重要的,它们帮助确保集群中资源的合理分配和高效利用。通过为Pod中的容器设置资源请求和限制,你可以控制容器可以使用的最小和最大资源量,从而防止单个应用占用过多资源导致集群其他部分出现问题。

资源类型

Kubernetes主要支持以下类型的资源请求和限制:

  • CPU(核心数)‌:以CPU的核心数来衡量,例如1表示一个核心。
  • 内存(Memory)‌:以字节为单位,例如512Mi(512兆字节)或1Gi(1吉字节)。

如何设置资源请求和限制,资源请求和限制可以通过Pod的spec部分中的容器配置来设置。

样例

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"  # 250 milli-cores
      limits:
        memory: "128Mi"
        cpu: "500m"  # 500 milli-cores

在这个例子中:

  • requests‌ 定义了容器启动和运行所需的最低资源量。
  • limits‌ 定义了容器可以使用的最大资源量。如果容器尝试使用超过这个限制的资源,它可能会被Kubernetes杀死。

注意事项:

  1. 合理设置‌:确保你的资源请求和限制是合理的,既不过度限制以至于影响应用性能,也不过度分配以至于浪费资源。
  2. 监控与调整‌:根据应用的运行情况监控资源使用情况,适时调整资源请求和限制。
  3. 默认值‌:如果没有显式设置,Kubernetes会为容器提供默认的资源请求和限制。通常,这些默认值很低,可能不足以满足大多数生产环境的需求。
  4. 命名空间配额‌:在命名空间级别设置资源配额,可以更好地控制整个命名空间内的资源使用。

设置命名空间配额

复制代码
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resource-quota
spec:
  hard:
    requests.cpu: "4"
    requests.memory: 5Gi
    limits.cpu: "8"
    limits.memory: 10Gi

注:这个配置确保了在特定命名空间中,CPU请求总量不超过4个核心,内存请求总量不超过5GiB,CPU限制总量不超过8个核心,内存限制总量不超过10GiB。通过合理设置资源请求和限制,你可以有效地管理和优化Kubernetes集群的资源使用。
官网文档:

https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/

通过xkube进行设置

通过多集群k8s管理平台xkube的功能可以轻松的进行资源限制,xkube安装部署参考:https://blog.csdn.net/weixin_56364253/article/details/156390146

功能参考下图:

相关推荐
阿里云云原生11 小时前
香港站【企业 AI Agent 工程化实战专场】来啦,邀您7月9日见!
云原生·agent
阿里云云原生14 小时前
研发域与运维域的“数字握手”:通过 Agentic Skills 实现 DevOps 全链路自动化
云原生
运维开发故事3 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
阿里云云原生4 天前
AI 开发新常态:当 Cursor、Claude、Codex 并行,如何统一管理散落的 Skill 资产?
云原生·ai编程
探索云原生5 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Suroy5 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭5 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美5 天前
从edge-trigger到level-trigger,谈谈 Kubernetes controller 的开发范式
云原生
阿里云云原生5 天前
深度解构:当 Append-only 的 SLS 遇上 Update/Delete,是如何实现设计权衡的?
云原生