标准答案

  1. 无状态 HTTP 服务通常使用 Deployment,副本可互换,发布和扩缩容更简单。
  2. 需要稳定 hostname、ordinal、PVC 或有序启动/停止的工作负载可考虑 StatefulSet。
  3. StatefulSet 不自动解决复制协议、选主、备份、扩缩容安全和数据迁移。
  4. 两者都需要探针、资源、反亲和、终止排空和故障恢复测试。

题目解析

Deployment 假设副本可互换,适合无状态服务;StatefulSet 为每个副本提供稳定身份、顺序操作和可关联的 PVC,适合需要成员身份或独立存储的工作负载。选择依据是状态和生命周期,不是“数据库”或“Web”这样的名称。

StatefulSet 仍只是 Kubernetes 控制器,不理解数据库日志、复制、选主、仲裁和数据迁移。即使服务没有持久化数据库,本地缓存、临时会话或连接状态也可能让副本不可互换,必须明确重建后的恢复语义。

常见误区

  • 误区:数据库换成 StatefulSet 就完成高可用。改正:补充复制、选主、备份、恢复和一致性验证。
  • 误区:把有本地缓存或会话状态的服务直接当成无状态。改正:确认副本能否随时替换,以及状态是否外置或可重建。

作者信息