使用节点弹性大盘

随着集群规模扩大和频繁自动伸缩弹性,仅凭人工手动方式很难快速定位及发现问题,也很难追溯历史,基本不可能发现在长时间线上统计才能发现的异常。本文介绍如何通过节点弹性大盘上展示的Pod、Node详情及变化图表,快速排查定位问题。

前提条件

节点弹性大盘详情

节点弹性大盘目前分为4个部分,下面详细介绍大盘每个组成部分的展示数据及图表的含义。

总览表盘

74

总览部分由5组数据组成,也是弹性运维最关心的5组数据。

  • 总节点数: 集群中所有节点的数目,反映集群容量水位。

  • 可用节点数:集群中KubeletReady的节点数目,如果与总节点数不一致则说明有些节点处于KubeletNotReady状态,如果这些节点并非正在加入,那有可能是故障,需要特别关注。

  • 集群可扩容:集群是否处于可扩容的状态,如果这里显示NO,表示集群中未达Ready状态的节点数目大于设置的上限,则一切扩容活动都不会进行。

  • 最近扩容活动:在所选择的时间范围内的集群发生节点扩容活动总数。

  • 最近缩容活动:在所选择的时间范围内的集群发生节点缩容活动总数。

Pod详情

73

Pod详情由两种图表构成:

  • 不可调度Pod趋势图:展示的是集群中状态为Pending的Pod总数在时间维度的曲线图,不可调度Pod往往可以反映一个集群中的扩容压力。

  • 驱逐Pod趋势图:展示的是集群中发生eviction的Pod总数在时间维度的曲线。驱逐Pod的出现,说明对应Node上的资源使用水位已经下降到阈值之下。

节点详情

72

  • 节点状态趋势图:展示了总节点数、KubeletReady节点数和KubeletNotReady节点数。其中KubeletNotReady节点数是排除了当前时刻距离creationTimeStamp 10分钟内的新加入节点的。

  • 节点弹性扩容趋势图和节点弹性缩容趋势图:这两个图展示了节点扩容事件和缩容事件在时间维度下的图表。扩容事件是每次cluster-autoscaler触发弹性时会产生的ScaledUpGroup,数据是总数。缩容事件是采集每次缩容时cluster-autoscaler的ScaleDown events。

弹性活动列表

71

弹性活动列表是扩缩相关的Event的表,主要是给用户提供关于扩、缩活动的搜索功能,方便问题定位。

节点弹性大盘使用方法

发现问题

  • 是否存在异常节点:总节点数是否等于可用节点数,如果不等则说明可能有节点异常。

  • 集群容量规划是否合理:大多数的线上业务都存在业务高峰和低峰,在集群中使用自动伸缩的最重要目的之一就是让自动伸缩帮助集群容量曲线尽量贴合业务压力曲线。您可以根据需要选定时间范围,然后通过上文节点详情中的数据,与业务压力做比较,看看波峰波谷的差异是否符合预期并找出优化点。

问题排查

  • 存在状态为pending的Pod,但是没有节点弹出。则根据上文集群可扩容的数据,判断集群是否可以扩容。

    • 如果这项数据显示不可扩容,则cluster-autoscaler不会执行任何扩容活动,排查结束,需要解决集群健康问题。

    • 如果集群可扩容,则通过上文弹性活动列表搜索Pod Name和NotTriggerScaleUp事件,通过reason字段查看具体没有触发扩容的原因。

  • 定位Pod触发扩容的时间:通过上文弹性活动列表搜索Pod Name和TriggeredScaleUp事件,查看具体触发扩容的时间。

  • 扩容失败原因:通过上文弹性活动列表搜索FailedToScaleUpGroup事件,查看reason可定位到cluster-autoscaler触发的扩容活动失败的具体原因。

  • 节点缩容时间点:通过上文弹性活动列表搜索Node Name和ScaleDown事件,查看具体触发缩容的时间。

  • 节点缩容失败原因:通过上文弹性活动列表搜索Node Name和ScaleDownFailed事件,查看具体触发缩容的原因。