我正在寻找一个从部署/复制中删除pod而不删除它的选项。我找到了一个很好的解决方案 using selector and labels here,但在我的情况下这是不可能的,因为我不是pod /服务创建者所以我不能强制选择器创建。我的应用程序只是操纵现有服务的pod。
非常感谢您的帮助
答案 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扫描/更新)。