Kubernetes集群中如何利用北极星因果指标设置正确的POD规格——CPU篇
在 Kubernetes 容量规划中,追求的是集群的稳定性和资源使用效率之间的平衡:
- 资源分配过多会造成浪费。
- 资源分配过少则会导致用户请求时延上升,影响集群的稳定性。
背景
公众号之前翻译了一篇 Sysdig 的文章,Kubernetes 容量规划:如何合理设置集群资源介绍了如何设置合理的资源参数。
虽然按照那篇文章设置可以有一定的帮助,但仍然可能存在风险。本文将详细说明这些风险,并介绍如何通过北极星指标对 POD 的规格进行调整,以达到时延和资源的完美平衡。
Kubernetes 中的 POD CPU 规格参数
在 Kubernetes 中,POD 的 CPU 规格主要包括以下两个参数:
-
requests: POD 启动时请求的 CPU 资源量。Kubernetes 调度器会根据这个参数将 POD 调度到能够满足资源需求的节点上。
-
limits: POD 运行时能够使用的最大 CPU 资源量。如果 POD 尝试使用超过这个限制的 CPU 资源,会被限制在定义的 limit 值内。
Kubernetes 中的现存指标
要判断 POD 规格是否合适,需通过合适的指标来评估。当前 Kubernetes 中常见的 CPU 指标包括:
- CPU 利用率(container_cpu_usage_seconds_total): 通过类似 PQL 语句获得:
irate(container_cpu_usage_seconds_total{namespace="XXXX", container="XXXX"}[5m])
该指标反映了 CPU 利用率。
-
系统负载:node_load1、node_load5、node_load15 表示系统在 1 分钟、5 分钟和 15 分钟内的平均负载。一般认为负载与 CPU 核数相当即可。
-
CPU 节流(throttle):container_cpu_cfs_throttled_seconds_total, 通过类似 PQL 语句获得:
irate(container_cpu_cfs_throttled_seconds_total{namespace="XXXX", container="XXXX"}[5m])
该指标表示容器由于 CPU 配额不足而被节流的 CPU 核心时间总量。
尽管这些指标对了解 CPU 资源使用情况有帮助,但各自存在局限性,难以单独作为唯一且关键的指标。
北极星指标的应用
所谓北极星指标,是指唯一且最关键的指标。在 Kubernetes 中,该用哪个指标来衡量容器的 CPU 资源是否充足呢?
CPU 利用率指标的局限性
CPU 利用率指标的主要局限性在于:
- 单一性: CPU 利用率反映了容器对 CPU 资源的需求和使用情况。如果利用率持续高企,可能表明容器需要更多的 CPU 资源。然而,仅凭这一指标无法全面反映系统的性能状态。
- 响应时间和性能: 需要考虑容器内应用的响应时间和性能。如果响应时间变长或性能下降,即使 CPU 利用率不高,也可能意味着 CPU 资源不足。
- 并发负载: 在高并发场景下,瞬时的负载高峰可能导致性能问题。CPU 利用率可能无法及时反映这些短期高峰负载的影响。
Load指标的局限性
Load 指标代表有多少执行单元等待调度器执行,但它无法单独衡量 CPU 资源是否充足。