代码之家  ›  专栏  ›  技术社区  ›  Jesse Shieh José Valim

Kubernetes服务,部署时只有一个吊舱?

  •  0
  • Jesse Shieh José Valim  · 技术社区  · 6 年前

    我有一个k8s部署,其中有3个pod,我设置了一个NodePort服务来将SSH(端口22)转发到3个pod。一切都按预期工作,但每次我SSH进去,我都会得到一个随机的pod。我想让它变粘,这样我总是得到相同的豆荚,但我不确定这是否可能。

    根据 the documentation ,设置 sessionAffinity: ClientIP 可能不适用于nodeport。我不认为 externalTrafficPolicy: Local 将工作,因为您需要使用负载平衡器服务。我不认为LoadBalancer服务对我来说是可行的,因为我需要创建数百个这样的服务,而且每个LoadBalancer都要花钱,而且会耗尽配额。

    我想知道的是,是否可以创建一个服务,它不指向部署中的所有3个pod,而恰恰指向1个pod。这对我的情况有帮助。我可以手动将一个特殊的标签贴在一个吊舱上,并将服务选择器设置到该标签上,但如果吊舱死掉并被更换,我会感到很脆弱。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Radek 'Goblin' Pieczonka    6 年前

    解决这个问题的一种方法是使用StatefulSet而不是部署来创建pod。然后,您的pod有一个确定的名称,当重新启动时,将保留它们的名称。这样您就可以创建一个指向 myapp-0 , myapp-1 等等,并合理地确保当pod重新安排/重新启动时,中断将中断一段时间,同时也将恢复到工作状态。不过,在扩展StatefulSet时,您需要处理此类服务创建的自动化,并且您的“关联性”将基于客户端连接到的服务端口(不能在同一端口上有多个服务)

    也就是说,这绝对不是一个好的模式。您应该确保您的客户机可以连接到任何pod,并通过他们都使用的另一个服务或共享的RWX卷(如果是关于文件的话)共享所需状态。