kubernetes 为什么在无状态应用中不推荐无头服务?

nuypyhwy  于 2022-12-26  发布在  Kubernetes
关注(0)|答案(2)|浏览(143)

我是一个kubernetes的初学者,我发现headless服务通常被推荐用于有状态的应用程序,所以我想知道为什么它不能再次用于无状态应用程序?如果请求直接进入Pod而不通过服务,那么请求应该更快,这是不是很糟糕?

koaltpgm

koaltpgm1#

1.首先,Headless服务被模糊地用于直接访问所有Pod副本,而不是使用服务
1.在部署(无状态服务)的情况下,Pod是可互换的,因为如果Pod需要重新调度,它将不会保持与前一个Pod相同的ID。
1.而
Statefulsets
为每个Pod维护一个唯一ID。Statefulsets为每个Pod提供2个唯一标识。第一个是网络标识,它帮助我们为Pod给予相同的DNS名称,无论是否多次重新启动;第二个是存储标识,它也将保持不变,无论是否重新启动。因此,statefulset不会使用共享卷。

  1. IP地址未分配给headless服务。在内部,它为DNS命名的pod公开构建所需的端点。

结论:有状态应用程序需要具有不同标识的Pod(主机名)。要使一个Pod与其他Pod通信,StatefulSet需要无头服务。具有服务IP的服务是无头服务。因此,它会立即返回相关Pod的IP地址。2这使我们可以直接与Pod通信,而无需使用代理。而在无状态应用程序中,服务需要与其他pod交互。

有关更多详细信息,请参阅本文

x8goxv8g

x8goxv8g2#

常规服务为您提供单一、稳定的IP地址,以访问与该服务关联的任何副本。鉴于应用程序确实是无状态的,您与哪个副本交谈并不重要,因此“隐藏”在单一IP后面。
这将减轻您的负载平衡责任:您可以每次使用相同的IP,而不必处理添加副本、删除副本或重复的DNS查找。
如果您将无头服务用于无状态应用程序(当然这是可能的),您将不得不处理所有这些问题,否则副本将无法按预期提供可伸缩性和/或高可用性的风险。事实上,无头服务在执行DNS循环时会打乱返回记录的顺序,以帮助客户端实现负载平衡。但是你必须为无头服务执行常规的DNS查找,以了解添加和/或删除的示例,而对于有服务IP的常规服务则不是这样。

相关问题