轻松快速地调整Kubernetes的CPU和内存

简介: 轻松快速地调整Kubernetes的CPU和内存

目录

为容器和 Pod 分配CPU和内存资源

CPU和内存单位

Resources Quota: 限制namespace的资源消耗

Limit Ranges:配置默认的CPU请求和限制

工具:管理Kubernetes的CPU和内存

总结



Kubernetes中分配和管理CPU和内存资源可能很棘手,但也很容易。本文,我将向你展示什么是Kubernetes资源和限制以及如何管理它们。

 

本文的目标是简单--如何帮助你快速调整项目中的Kubernetes资源信息,主要通过三种方式:

  1. 为容器和 Pod 分配CPU和内存资源
  2. Resources Quota: 限制namespace的资源消耗
  3. Limit Ranges:配置默认的CPU请求和限制


为容器和 Pod 分配CPU和内存资源

下图,解释了Kubernetes资源的度量单位,资源状态工作流以及如何使用资源限制。

 


CPU和内存单位

 

Kubernetes 中的一个 cpu 等于:

  • 1 AWS vCPU
  • 1 GCP Core
  • 1 Azure vCore
  • 1 Hyperthread 在带有超线程的裸机 Intel 处理器上

以下,Deployment使用了内存资源和CPU资源的请求和限制

将CPU和内存 请求 (request)和内存 限制 (limit)分配给一个容器。

我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的CPU和内存 。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aks-application 
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aks-application
  template:
  metadata:
    labels:
      app: aks-application
  spec:
    containers:
    - name: aks-application
      image: hubname/aks-application-image:1.0.0 
      resources:
      requests:
        cpu: 100m 
        memory: 128Mi
      limits:
        cpu: 250m 
        memory: 256Mi


更详细的信息和代码段:


Resources Quota: 限制namespace的资源消耗

资源配额,通过 ResourceQuota 对象来定义,对每个namespace的资源消耗总量提供限制。 它可以限制namespace中某种类型的对象的总数目上限,也可以限制命令空间中的 Pod 可以使用的计算资源的总上限。

 

资源配额的工作方式如下:

  • 不同的团队可以在不同的namespace下工作,目前这是非约束性的,在未来的版本中可能会通过 ACL (Access Control List 访问控制列表) 来实现强制性约束。
  • 集群管理员可以为每个namespace创建一个或多个 ResourceQuota 对象。
  • 当用户在namespace下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会 跟踪集群的资源使用情况,以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。
  • 如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。
  • 如果namespace下的计算资源 (如 cpu 和 memory)的配额被启用,则用户必须为 这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用 LimitRanger 准入控制器来为没有设置计算资源需求的 Pod 设置默认值。


以下,是对持久卷声明和namespace资源的配额定义。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: backend-storage-quota
spec:
  hard:
    persistentvolumeclaims: "2"
    requests.storage: "1Gi"   
--
apiVersion: v1
kind: ResourceQuota
metadata:
  name: backend-namespace-quota
spec:
  hard:
    request.cpu: 400m
    request.memory: 9600Mi
    limits.cpu: 1200m
    limits.memory: 11600Mi


你可以使用该kubectl apply命令来设置namespace的配额限制。

kubectl apply -f resource-quota.yaml — namespace backend

如何使用配额的详细说明,请参考


Limit Ranges:配置默认的CPU请求和限制

如果你的namespace有资源配额,那么默认内存限制是很有帮助的。

 

将 LimitRange 添加到namespace,不仅会限制cpu和内存,还会为存储请求大小强制设置最小值和最大值。 存储是通过 PersistentVolumeClaim 来发起请求的。 执行限制范围控制的准入控制器会拒绝任何高于或低于管理员所设阈值的 PVC。

apiVersion: v1
kind: LimitRange
metadata:
  name: backend-limit-range
spec:
  limits:
  - default:
    memory: 110Mi
    cpu: 500m
  defaultRequest:
    memory: 20Mi
    cpu: 100m
  type: Container
--
apiVersion: v1
kind: LimitRange
metadata:
  name: backend-storage-limits
spec:
  limits:
  - type: PersistentVolumeClaim
    max:
      storage: 5Gi
     min:
      storage: 2Gi


更详细的信息和代码段。


工具:管理Kubernetes的CPU和内存

  • Popeye 会扫描集群中是否存在与配置,资源和网络漏洞有关的问题,并生成有关所有问题的详细报告。
  • Goldilocks 扫描Pod中的资源限制,并使用建议的资源创建报告。
  • Kube-advisor 来自Azure团队的工具,可扫描容器中缺少的资源并限制请求。
  • K9s+benchmark 提供了一个命令行界面(CLI),使你可以轻松地管理,监视甚至对 你喜欢的终端软件中的集群进行基准测试

你还可以将这些工具与 Datadog Grafana + Prometeus,Azure Monitor结合使用,以改善资源并限制监视。


总结

  1. 设置资源请求:获取有关特定应用程序/容器的CPU和内存使用情况的信息。
  2. 设置资源限制:运行负载测试以检测高负载下容器的CPU和内存。
  3. 监视容器的CPU和内存使用情况。
  4. 监视持久卷使用情况。
  5. 检查是否可以使用Limit Range应用资源限制
  6. 使用配额(不建议在生产环境中应用配额)


译文链接: https://dzone.com/articles/easy-and-fast-adjustment-of-kubernetes-cpu-and-mem



相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
运维 Kubernetes 监控
K8S异常诊断之俺的内存呢
本文讲述作者如何解决客户集群中出现的OOM(Out of Memory)和Pod驱逐问题。文章不仅详细记录了问题的发生背景、现象特征,还深入探讨了排查过程中的关键步骤和技术细节。
888 108
K8S异常诊断之俺的内存呢
|
7月前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
1094 0
|
7月前
|
存储 消息中间件 缓存
从纳秒到毫秒的“时空之旅”:CPU是如何看待内存与硬盘的?
在数据爆炸的时代,如何高效存储与管理海量数据成为系统设计的核心挑战。本文从计算机存储体系结构出发,解析B+树、LSM树与Kafka日志结构在不同数据库中的应用与优化策略,帮助你深入理解高性能存储背后的原理。
237 0
|
9月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
2970 0
|
6月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
688 11
|
8月前
|
弹性计算 前端开发 NoSQL
2025最新阿里云服务器配置选择攻略:CPU、内存、带宽与系统盘全解析
本文详解2025年阿里云服务器ECS配置选择策略,涵盖CPU、内存、带宽与系统盘推荐,助你根据业务需求精准选型,提升性能与性价比。
|
9月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
1201 0
|
11月前
|
数据可视化 Linux iOS开发
Python测量CPU和内存使用率
这些示例帮助您了解如何在Python中测量CPU和内存使用率。根据需要,可以进一步完善这些示例,例如可视化结果或限制程序在特定范围内的资源占用。
430 22
|
运维 Kubernetes 监控
K8S异常诊断之俺的内存呢
K8S异常诊断之俺的内存呢

推荐镜像

更多