首页 > 解决方案 > 来自外部的 K8S 流量到达已删除的 pod

问题描述

我有 2 个带有简单 echo 应用程序的 pod,它们已注册到在 AWS 中公开 ELB 的服务。我从我的笔记本电脑开始循环 curl 以点击 echo 应用程序,然后我将kubectl delete pod echo-xyz 结果连接起来,因为接下来的几秒钟流量仍被路由到已删除的 pod。不过,Pod 已从端点列表中正确删除。相同的测试,但从集群内部发出 curl 以绕过 ELB 正在按预期工作 - 在我删除 pod 的那一刻,流量被路由到剩余的单个 pod,直到创建新的 pod。
在附图中,您可以在左侧看到来自集群内部的测试,在右侧通过 ELB 从外部看到测试。

卷曲比较

通过 AWS 上的 kops 安装 K8s 1.16.8。

任何提示将不胜感激。

标签: amazon-web-serviceskubernetesroutes

解决方案


pod 的删除不是立即的。一旦发生中断,kubelet 会执行一系列事件(等待宽限期、preStop 挂钩等)以关闭 pod。此处的文档:https ://kubernetes.io/docs/concepts/workloads/pods/disruptions/

这个优雅终止的过程是 Kubernetes 不发送KILL命令的设计,而是使用TERM(终止)信号。

参考文档:https ://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination

此外,--force不建议删除,因为它会在不等待资源被删除的情况下更新 API 服务器。


推荐阅读