我是一个kubernetes的初学者,我发现headless服务通常被推荐用于有状态的应用程序,所以我想知道为什么它不能再次用于无状态应用程序?如果请求直接进入Pod而不通过服务,那么请求应该更快,这是不是很糟糕?
koaltpgm1#
1.首先,Headless服务被模糊地用于直接访问所有Pod副本,而不是使用服务。1.在部署(无状态服务)的情况下,Pod是可互换的,因为如果Pod需要重新调度,它将不会保持与前一个Pod相同的ID。1.而Statefulsets为每个Pod维护一个唯一ID。Statefulsets为每个Pod提供2个唯一标识。第一个是网络标识,它帮助我们为Pod给予相同的DNS名称,无论是否多次重新启动;第二个是存储标识,它也将保持不变,无论是否重新启动。因此,statefulset不会使用共享卷。
结论:有状态应用程序需要具有不同标识的Pod(主机名)。要使一个Pod与其他Pod通信,StatefulSet需要无头服务。具有服务IP的服务是无头服务。因此,它会立即返回相关Pod的IP地址。2这使我们可以直接与Pod通信,而无需使用代理。而在无状态应用程序中,服务需要与其他pod交互。
有关更多详细信息,请参阅本文
x8goxv8g2#
常规服务为您提供单一、稳定的IP地址,以访问与该服务关联的任何副本。鉴于应用程序确实是无状态的,您与哪个副本交谈并不重要,因此“隐藏”在单一IP后面。这将减轻您的负载平衡责任:您可以每次使用相同的IP,而不必处理添加副本、删除副本或重复的DNS查找。如果您将无头服务用于无状态应用程序(当然这是可能的),您将不得不处理所有这些问题,否则副本将无法按预期提供可伸缩性和/或高可用性的风险。事实上,无头服务在执行DNS循环时会打乱返回记录的顺序,以帮助客户端实现负载平衡。但是你必须为无头服务执行常规的DNS查找,以了解添加和/或删除的示例,而对于有服务IP的常规服务则不是这样。
2条答案
按热度按时间koaltpgm1#
1.首先,Headless服务被模糊地用于直接访问所有Pod副本,而不是使用服务。
1.在部署(无状态服务)的情况下,Pod是可互换的,因为如果Pod需要重新调度,它将不会保持与前一个Pod相同的ID。
1.而Statefulsets为每个Pod维护一个唯一ID。Statefulsets为每个Pod提供2个唯一标识。第一个是网络标识,它帮助我们为Pod给予相同的DNS名称,无论是否多次重新启动;第二个是存储标识,它也将保持不变,无论是否重新启动。因此,statefulset不会使用共享卷。
结论:有状态应用程序需要具有不同标识的Pod(主机名)。要使一个Pod与其他Pod通信,StatefulSet需要无头服务。具有服务IP的服务是无头服务。因此,它会立即返回相关Pod的IP地址。2这使我们可以直接与Pod通信,而无需使用代理。而在无状态应用程序中,服务需要与其他pod交互。
有关更多详细信息,请参阅本文
x8goxv8g2#
常规服务为您提供单一、稳定的IP地址,以访问与该服务关联的任何副本。鉴于应用程序确实是无状态的,您与哪个副本交谈并不重要,因此“隐藏”在单一IP后面。
这将减轻您的负载平衡责任:您可以每次使用相同的IP,而不必处理添加副本、删除副本或重复的DNS查找。
如果您将无头服务用于无状态应用程序(当然这是可能的),您将不得不处理所有这些问题,否则副本将无法按预期提供可伸缩性和/或高可用性的风险。事实上,无头服务在执行DNS循环时会打乱返回记录的顺序,以帮助客户端实现负载平衡。但是你必须为无头服务执行常规的DNS查找,以了解添加和/或删除的示例,而对于有服务IP的常规服务则不是这样。