资源控制

推荐在 YAML 清单中针对所有 pod 设置 pod 请求和限制:

  • pod 请求定义 pod 所需的 CPU 和内存量。Kubernetes 基于这些请求量进行节点调度。

  • pod 限制是 pod 可以使用的最大 CPU 和内存量,用于防治失控 Pod 占用过多资源。

如果不包含这些值,Kubernetes 调度程序将不知道需要多少资源。 调度程序可能会在资源不足的节点上运行 pod,从而无法提供可接受的应用程序性能。

群集管理员也可以为需要设置资源请求和限制的命名空间设置资源配额。

Dynamic Resource Allocation (DRA) 资源管理

从 Kubernetes v1.26 开始,DRA 提供了一种全新的资源分配和管理方式,特别适用于 GPU、FPGA 等特殊设备资源。

DRA 资源管理优势

相比传统的资源限制方式,DRA 提供了:

  1. 动态分配 - 资源按需分配,而非启动时预留

  2. 细粒度控制 - 支持设备的分区和共享

  3. 更好的利用率 - 通过智能调度提高资源利用率

  4. 灵活配置 - 支持复杂的设备配置需求

资源管理最佳实践

1. 资源类定义

创建 ResourceClass 定义可用的设备类型:

2. 资源配额管理

在命名空间级别控制 DRA 资源使用:

3. 优先级列表配置

利用 v1.33 的优先级列表特性提供设备备选方案:

4. 设备污点和容忍度

使用 v1.33 的设备污点特性进行设备维护:

5. 资源监控和度量

监控 DRA 资源使用情况:

故障恢复和错误处理

自动故障恢复

DRA 提供了更好的错误处理机制:

资源清理策略

配置资源的清理策略:

成本优化

资源池管理

通过资源池提高利用率:

预算控制

结合 ResourceQuota 进行预算控制:

群集管理员也可以为需要设置资源请求和限制的命名空间设置资源配额。

原地 Pod 资源调整最佳实践

从 Kubernetes v1.33 开始,原地 Pod 资源调整功能升级为 Beta 版本,为资源管理带来了新的可能性。

何时使用原地调整

适用场景

  • 长运行服务:Web 服务、数据库等需要根据负载动态调整资源

  • 机器学习工作负载:训练任务在不同阶段需要不同的资源配置

  • 批处理作业:根据数据量动态调整处理资源

  • 开发测试环境:频繁调整资源配置进行性能调优

不适用场景

  • 有状态应用的重要组件:数据库主节点等关键组件

  • 资源敏感应用:对资源变化敏感的实时系统

  • 短期任务:生命周期短暂的 Pod

调整策略配置

CPU 调整策略

CPU 资源通常可以不重启容器直接调整:

内存调整策略

内存调整通常需要更谨慎的处理:

与 VPA 集成

配置 VPA 原地调整模式

VPA 原地调整监控

监控 VPA 的调整行为:

资源调整最佳实践

1. 渐进式调整

避免大幅度的资源变更,采用渐进式调整:

2. 资源调整验证

调整后验证 Pod 状态和性能:

3. 回滚策略

准备资源调整的回滚方案:

监控和告警

资源调整监控

创建 ServiceMonitor 监控资源调整事件:

告警规则

配置资源调整相关的告警:

性能考量

调整频率控制

避免过于频繁的资源调整:

节点资源考量

确保节点有足够资源支持调整:

使用 kube-advisor 检查应用程序问题

你可以定期运行 kube-advisor 工具,检查应用程序的配置是否存在问题。

运行 kube-advisor 示例:

参考文档

最后更新于