调整Kubernetes的CPU和内存
大约 3 分钟
如何帮助你快速调整项目中的 Kubernetes 资源信息,主要通过三种方式:
- 为容器和 Pod 分配 CPU 和内存资源
- Resources Quota: 限制 namespace 的资源消耗
- Limit Ranges:配置默认的 CPU 请求和限制
为容器和 Pod 分配 CPU 和内存资源
下图,解释了 Kubernetes 资源的度量单位,资源状态工作流以及如何使用资源限制。
CPU 和内存单位
Kubernetes 中的一个 cpu 等于:
- 1 AWS vCPU
- 1 GCP Core
- 1 Azure vCore
- 1 Hyperthread 在带有超线程的裸机 Intel 处理器上
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 设置默认值。
Limit Ranges:配置默认的 CPU 请求和限制
工具:管理 Kubernetes 的 CPU 和内存
- Popeye 会扫描集群中是否存在与配置,资源和网络漏洞有关的问题,并生成有关所有问题的详细报告。
- Goldilocks 扫描 Pod 中的资源限制,并使用建议的资源创建报告。
- Kube-advisor 来自 Azure 团队的工具,可扫描容器中缺少的资源并限制请求。
- K9s+benchmark 提供了一个命令行界面(CLI),使你可以轻松地管理,监视甚至对 你喜欢的终端软件中的集群进行基准测试 你还可以将这些工具与 Datadog, Grafana + Prometeus,Azure Monitor 结合使用,以改善资源并限制监视。
总结
- 设置资源请求:获取有关特定应用程序/容器的 CPU 和内存使用情况的信息。
- 设置资源限制:运行负载测试以检测高负载下容器的 CPU 和内存。
- 监视容器的 CPU 和内存使用情况。
- 监视持久卷使用情况。
- 检查是否可以使用 Limit Range 应用资源限制
- 使用配额(不建议在生产环境中应用配额)
原文地址