标准答案

  1. 普通 Service 适合客户端只需要一个稳定服务地址并由平台选择后端的场景。
  2. Headless Service 不分配普通 ClusterIP,可让客户端发现具体 Pod 地址,常用于有状态集群的成员发现。
  3. StatefulSet 提供稳定的 ordinal 身份、网络名称和 PVC 关联,但不自动提供数据库共识或备份。
  4. DNS 缓存、TTL、Pod 就绪和客户端重连策略必须一起测试。

题目解析

普通 Service 提供一个虚拟入口,Headless Service 不分配普通 ClusterIP,DNS 可以返回具体后端地址;StatefulSet 则提供稳定的 ordinal、hostname 和 PVC 关联。它们组合后能帮助成员发现,但不会替应用实现选主、复制、仲裁、数据一致性和故障恢复。

客户端应尊重 DNS TTL 和连接失败,处理 Pod 重建、就绪变化和地址更新;有状态协议还要根据角色和拓扑选择正确成员。验证要覆盖单 Pod 重启、节点/可用区故障、数据恢复和网络分区,不能只看 DNS 能返回记录。

常见误区

  • 误区:用 StatefulSet 就认为数据库自动高可用。改正:另外设计数据库复制、选主、备份、恢复和故障域策略。
  • 误区:永久缓存 Headless Service 返回的 Pod IP。改正:按 TTL 和连接失败刷新发现结果,并处理成员角色变化。

作者信息