我与Karpenter及其伙伴们使用的PodDisruptionBudget宝典

我与Karpenter及其伙伴们使用的PodDisruptionBudget宝典

💡 原文英文,约1400词,阅读约需5分钟。
📝

内容提要

Karpenter在Kubernetes中处理节点中断时,常遇到节点无法终止的问题,导致资源浪费。PodDisruptionBudget(PDB)用于管理应用可用性,确保在中断时保持一定数量的健康副本。PDB有两个主要配置:minAvailable和maxUnavailable,二者不可同时设置。选择合适的策略对不同应用场景至关重要。此外,K8s 1.27引入的UnhealthyPodEvictPolicy可帮助处理不健康的Pod,减少资源浪费。

🎯

关键要点

  • Karpenter在处理节点中断时常遇到节点无法终止的问题,导致资源浪费。
  • PodDisruptionBudget(PDB)用于管理应用可用性,确保在中断时保持一定数量的健康副本。
  • PDB有两个主要配置:minAvailable和maxUnavailable,二者不可同时设置。
  • 选择合适的策略对不同应用场景至关重要。
  • K8s 1.27引入的UnhealthyPodEvictPolicy可帮助处理不健康的Pod,减少资源浪费。
  • PDB只能在有控制器的Pod上定义,独立创建的Pod不能在PDB清单中引用。
  • minAvailable设置应用的绝对最小副本数,而maxUnavailable则限制在任何时刻不健康副本的数量。
  • 在进行滚动升级时,Pod的删除会计入中断预算,但工作负载资源在滚动升级时不受PDB限制。
  • 对于静态1副本的应用,不建议设置PDB,因为无法确保100%可用性。
  • 对于静态2副本的应用,可以使用minAvailable: 1或maxUnavailable: 1,效果相同。
  • 在1到2副本之间的水平自动扩展应用中,设置minAvailable: 1会导致应用无法被驱逐。
  • 对于至少2个副本和水平自动扩展的应用,可以选择优化快速修复或稳定性/可用性。
  • UnhealthyPodEvictPolicy是K8s 1.27引入的功能,可以在不健康状态下处理PDB的行为。

延伸问答

什么是PodDisruptionBudget(PDB)?

PodDisruptionBudget(PDB)用于管理应用可用性,确保在节点中断时保持一定数量的健康副本。

PDB的主要配置选项有哪些?

PDB有两个主要配置选项:minAvailable和maxUnavailable,二者不可同时设置。

在K8s中,如何处理不健康的Pod?

K8s 1.27引入了UnhealthyPodEvictPolicy,可以在不健康状态下处理PDB的行为,允许驱逐不健康的Pod。

对于静态1副本的应用,是否建议设置PDB?

不建议设置PDB,因为无法确保100%可用性,可能导致应用不可用。

在进行滚动升级时,Pod的删除会计入中断预算吗?

是的,Pod的删除会计入中断预算,但工作负载资源在滚动升级时不受PDB限制。

如何选择适合不同应用场景的PDB策略?

选择minAvailable或maxUnavailable取决于应用的需求,minAvailable适合稳定副本数的应用,而maxUnavailable适合需要考虑自动扩展的应用。

➡️

继续阅读