如何从服务中移除pod而不删除它

时间:2017-05-29 14:32:19

标签: kubernetes

我正在寻找一个从部署/复制中删除pod而不删除它的选项。我找到了一个很好的解决方案 using selector and labels here,但在我的情况下这是不可能的,因为我不是pod /服务创建者所以我不能强制选择器创建。我的应用程序只是操纵现有服务的pod。

非常感谢您的帮助

3 个答案:

答案 0 :(得分:1)

AFAIK服务应该有一个选择器(例如,标签),否则,服务如何知道哪些pod提供了所需的服务?即使您可能无法更改服务本身的选择机制,也可以尝试更改窗格中的标签。如果您可以操作窗格,则可以删除其标签,从而使服务无法选择它。

答案 1 :(得分:0)

哈维尔所说的差不多,但还有更多细节。

首先在您的Pod前面找到服务,然后找到选择器(用Kubectl描述svc):

  

选择器:
      component = my-app

选择器将与某些标签关联。标签与每个吊舱规格中的标签匹配。

在服务空间中删除与选择器相关的标签,找到要退出服务的容器并编辑其容器规格:

Kubectl编辑窗格

  

标签:
     环境:我的环境
     组件:my-app#删除或注释掉

部署将启动一个新的Pod,但是该Pod将不再有流量路由到该Pod。您可以使用kubectl get端点进行验证,以确保podIP不在服务规范中。

答案 2 :(得分:0)

您可以在Pod上使用就绪探针。然后找到使该探测失败的自己的方法。服务一旦检测到Pod尚未准备就绪,就会将其从服务将转发到的Pod集合中删除。这不会杀死Pod,也不会导致它重新启动(活动性探针会这样做)。它还不会断开当前客户端的连接。如果您计划最终重新启动Pod,则可能要等待那些连接的客户端耗尽。

这样做的一个想法是:在特定Pod的ip上使用jmx或rest调用,并使该实现实现告诉应用程序为就绪实现返回未就绪状态。同样的技巧可以将其切换回就绪状态,或在启动之前延迟准备工作,直到您手动触发该Pod(例如,如果您让Pod进行一些昂贵的启动,例如DB扫描/更新)。