确保有状态工作负载可应对中断


在 Google Kubernetes Engine (GKE) 集群中运行的应用必须准备好应对节点升级和其他维护事件等中断。有状态应用通常需要时间来完全停止 I/O 并从存储中卸载,因此特别容易受到中断的影响。您可以使用 Pod 中断预算 (PDB) 和就绪性探测等 Kubernetes 功能来帮助确保应用在升级期间可用。

GKE 会监控集群,并使用 Recommender 服务来提供有关如何优化平台使用的指导。GKE 会检测准备好工作负载应对中断的机会,并提供有关如何更新 PDB 或就绪性探测以最大限度地提高工作负载应对中断能力的指导。例如,如果 StatefulSet 不受 PDB 的保护,则集群可能会在节点升级期间一次性移除所有 Pod。为避免这种情况,GKE 提供了创建 PDB 的指导,以便大多数 Pod 在升级期间可以保持运行。

如需查看 GKE 提供中断相关指导的特定条件,请参阅 GKE 何时确定容易受中断影响的工作负载

如需详细了解如何管理 Recommender 提供的数据分析和建议,请参阅利用数据分析和建议优化 GKE 使用

确定容易受中断影响的工作负载

GKE 会生成数据分析,以确定集群容易受中断影响的工作负载。如需获取这些数据分析,请按照说明使用 Google Cloud CLI 或 Recommender API 查看数据分析和建议。使用以下部分中列出的子类型来过滤特定数据分析。Google Cloud 控制台中不提供这些数据分析。

GKE 何时确定容易受中断影响的工作负载

请参阅下表,了解 GKE 提供数据分析和建议的场景以及相关子类型:

提示子类型 说明 操作
PDB_UNPROTECTED_STATEFULSET 当 StatefulSet 已存在,但不存在与 StatefulSet 的 Pod 选择器标签匹配的 PDB 标签时发出提醒。这意味着 StatefulSet 中的所有 Pod 在节点升级等事件期间可能会被移除。 添加 PDB,其标签与 StatefulSet 的 Pod 选择器字段中的标签相匹配。在该 PDB 中指定 StatefulSet 可以容忍多少次中断。与此数据分析关联的建议会建议 PDB 应设置哪些标签来涵盖提及的 StatefulSet。
PDB_UNPERMISSIVE 当与 Pod 匹配的 PDB 无法执行任何维护活动(例如节点升级)时发出提醒。PDB 必须允许至少一个 Pod 中断,因此 GKE 会在一小时后违反此 PDB 以进行必要的维护。 将 PDB 的 minAvailable 设置调整为小于 Pod 总数,或者将 maxUnavailable 设置调整为大于零。
PDB_STATEFULSET_WITHOUT_PROBES 当 StatefulSet 配置了 PDB 但未配置就绪性探测,因而使 PDB 在衡量应用就绪性方面的效率不高时发出提醒。PDB 在查看哪些 Pod 可以视为健康状况良好时遵循就绪性探测。因此,如果 PDB 涵盖的 Pod 未配置就绪性探测,则 PDB 对 Pod 是健康状况良好还是刚刚启动且正在运行的了解有限。 为 StatefulSet 中的 Pod 添加就绪性探测以涵盖数据分析中提及的 PDB。我们还建议您添加活跃性探测

实施指导以改进中断就绪性

如果您已收到有关集群中工作负载的数据分析和建议,并且希望改进其就绪性,请执行建议中所述的说明以及该数据分析子类型对应的操作,如上一部分中所示。

建议每天进行一次评估,因此在更改实施后,建议最长可能需要 24 小时才能解决。如果您自实施建议指导以来不到 24 小时,则可以将建议标记为已解决。如果您不想实施建议,则可以忽略它。

后续步骤

  • 如需详细了解如何确保 GKE 集群的可靠性和正常运行时间,请参阅 GKE 投产后运维最佳实践
  • 如需详细了解 Kubernetes 中 Pod 可能中断的情况,请参阅中断