[转帖]轻松快速地调整Kubernetes的CPU和内存

轻松,快速,调整,kubernetes,cpu,内存 · 浏览次数 : 0

小编点评

## Kubernetes 资源和限制 **CPU 和内存单位** * CPU:1 AWS vCPU、1 GCP Core、1 Azure vCore、1 Hyperthread * Memory:128 Mi、256 Mi、512 Mi **CPU 和内存资源限制** * **requests:** 容器请求的 CPU 和内存需求。 * **limits:** 容器限制的 CPU 和内存需求。 **资源配额** * 在 namespace 中定义的资源限制,用于限制特定类型的资源数量或总量。 * 可以用于限制命令空间中的 Pod 的 CPU 和内存使用。 **Limit Ranges** * 配置默认的 CPU 请求和限制。 * 限制存储请求大小的最小和最大值。 **示例** ```yaml apiVersion: apps/v1kind: Deploymentmetadata: 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 ``` **其他工具** * Popeye:扫描集群中资源和网络漏洞。 * Goldilocks:扫描Pod中的资源限制。 * K9s+benchmark:提供命令行界面,使您可以轻松地管理、监视甚至对您喜欢的终端软件中的集群进行基准测试。 * Datadog,Grafana + Prometeus,Azure Monitor:可用于改善资源并限制监视。

正文

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)分配给一个容器。

apiVersion: apps/v1kind: Deploymentmetadata:  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

更详细的信息和代码段:

  • 将内存资源分配给容器和Pod

  • 将CPU资源分配给容器和Pod

  • Kubernetes最佳实践资源要求和限制

  • 应用程序开发人员在Azure Kubernetes Service(AKS)中管理资源的最佳实践

     

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: v1kind: ResourceQuotametadata:  name: backend-storage-quotaspec:  hard:    persistentvolumeclaims: "2"    requests.storage: "1Gi"   --apiVersion: v1kind: ResourceQuotametadata:  name: backend-namespace-quotaspec:  hard:    request.cpu: 400m    request.memory: 9600Mi    limits.cpu: 1200m    limits.memory: 11600Mi

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

kubectl apply -f resource-quota.yamlnamespace backend

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

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

     

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

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

图片

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

apiVersion: v1kind: LimitRangemetadata:  name: backend-limit-rangespec:  limits:  - default:    memory: 110Mi    cpu: 500m  defaultRequest:    memory: 20Mi    cpu: 100m  type: Container--apiVersion: v1kind: LimitRangemetadata:  name: backend-storage-limitsspec:  limits:  - type: PersistentVolumeClaim    max:      storage: 5Gi     min:      storage: 2Gi

更详细的信息和代码段。

  • 为namespace配置默认的 CPU 请求和限制

  • 限制名称空间的存储使用量

  • Kubernetes中的 Limit Range

     

工具:管理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. 使用配额(不建议在生产环境中应用配额)

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览6887 人正在系统学习中

与[转帖]轻松快速地调整Kubernetes的CPU和内存相似的内容:

[转帖]轻松快速地调整Kubernetes的CPU和内存

在Kubernetes中分配和管理CPU和内存资源可能很棘手,但也很容易。本文,我将向你展示什么是Kubernetes资源和限制以及如何管理它们。 本文的目标是简单–如何帮助你快速调整项目中的Kubernetes资源信息,主要通过三种方式: 1. 为容器和 Pod 分配CPU和内存资源 2. Res

[转帖]调优"四剑客"的实战演练,福尔摩斯•K带你轻松优化性能

前言 天下武功,唯快不破。在侦探的世界中,破案效率永远是衡量一名侦探能力的不二法门。作为推理界冉冉升起的新星,大侦探福尔摩斯·K凭借着冷静的头脑、严谨的思维,为我们展现了一场场华丽而热血的推理盛宴。 接下来,我们不仅仅是看客,还将追随福尔摩斯·K的脚步,体验一场身临其境的冒险。一起寻访产生数据库性能

[转帖]运维必会神技能:轻松解决rpm软件包的依赖问题

https://zhuanlan.zhihu.com/p/504348343 在公司的网络或者是客户的网络环境中,经常会有只能使用局域网而不能使用访问互联网的情况,其目的也很显然,为了更好的保护数据安全。 但在这种情况下,对于运维而言,如果突然要安装一款软件的话,就会变得很困难,因为它往往有很多依赖

[转帖]基于腾讯云微服务引擎(TSE) ,轻松实现云上全链路灰度发布

https://my.oschina.net/u/4587289/blog/8570699 1. 概述 软件开发过程中,应用发布非常频繁,通常情况下,开发或运维人员会将系统里所有服务同时上线,使得所有用户都使用上新版本。这样的操作时常会导致发布失败,或因发布前修改代码,线上出现 Bug。 假设一个在

[转帖]xsos:一个在 Linux 上阅读 SOSReport 的工具

https://www.sohu.com/a/315931829_100034897 xsos 是一个帮助用户轻松读取 Linux 系统上的 sosreport 的工具。另一方面,我们可以说它是 sosreport 考官。 -- Magesh Maruthamuthu(作者) 我们都已经知道 SOS

[转帖].NET 7 正式发布

https://www.oschina.net/news/216967/dotnet-7-released 微软宣布正式推出 .NET 7 ,使用 .NET 7 可以轻松地将 .NET 7 项目容器化,在 GitHub 操作中设置 CI/CD 工作流,并实现云原生可观察性。 .NET 7 是标准期限

[转帖]IDM UltraCompare Professional 22.10.0.3破解版

https://www.ittel.cn/archives/7834.html IDM UltraCompare Professional破解版是功能强大的文件比较/合并工具,提供一系列的文件、文本文档、文件夹等的对比比较,轻松获得准确的报告,支持对比压缩文件和jar文件,支持两个以及三个文件比较,

[转帖]VMware vSphere 8.0 IA - 企业级工作负载平台

https://sysin.org/blog/vmware-vsphere-8/ vSphere 8.0 在发布数周后,终于可以下载正式版了,了解新增功能请访问:VMware vSphere 8 新增功能。 vSphere+:多云工作负载平台 通过部署高价值云服务,轻松构建、运行、管理和保护传统应用

[转帖]NetworkManager服务(nmcli)

一、简介 NetworkManager服务是管理和监控网络设置的守护进程,是2004年RedHat启动的项目,皆在能够让Linux用户更轻松的处理现代网络需求,尤其是无线网络,能够自动发现网卡并配置IP地址。Centos7之前的版本都是通过network.service管理网络配置。到了Centos

[转帖]第一章 MySQL 8.0 介绍及安装配置

第一章 MySQL 8.0 介绍及安装配置 https://www.jianshu.com/p/d190c6b3520d 本课程,适合具备一定Linux运维或者开发基础的朋友,课程定级中、高级DBA。只要掌握80%,轻松助力薪资15k-25K。课程内容均来自与MySQL官网+MySQL源码。配套精品