我有一个场景,需要“准备” Kubernetes来起飞/终止/关闭容器,但允许它为 some 请求提供服务,直到发生这种情况为止。
例如,假设存在三种方法:StartAction,ProcessAction和EndAction。我想防止客户端在容器即将关闭时调用StartAction。但是,他们应该能够在该相同容器上使用ProcessAction和EndAction(在完成所有操作之后,该容器将关闭)。
我一直以为这是某种“双重”准备情况调查,我基本上想表示“未准备好”状态,但继续为已经开始的操作提供服务。
我知道有一个PreStop挂钩,但是我不确定这是否有必要,因为根据文档,我怀疑在PreStop期间,吊舱已经从负载均衡器上取下了
- (与3同步)从服务的端点列表中删除Pod,并且不再视为复制控制器正在运行的Pod集合的一部分。缓慢关闭的Pod无法继续为流量提供服务,因为负载均衡器(如服务代理)会将其从轮换中移除。
(https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods)。
假设我必须依靠粘性,并且必须在开始执行操作的容器上继续处理“操作”请求,是否有一些建议的做法?
答案 0 :(得分:1)
我认为您可以在应用程序中实现两个端点:
因此,为了正常关闭,我认为您应该首先调用“关闭准备端点”,这将导致“自定义准备情况探针”返回错误,以便Kubernetes从服务负载平衡器中删除POD(不会出现新的客户端),但是现有的TCP连接将保留(现有的客户端将运行)。在看到一些自定义指标(您的服务应提供的)后,客户端的所有操作都已完成,您应该使用标准的Kubernetes操作关闭容器。所有这些操作都应该使用Kubernetes和您的应用程序API以某种方式实现自动化。