amazon-web-services - 来自外部的 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。
任何提示将不胜感激。
解决方案
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 服务器。
推荐阅读
- c++ - 这行代码中“转”的目的是什么?
- r - 从闰年的数据中引导/模拟
- npm - NPM 过时的命令未显示完整列表
- javascript - 为什么在 JavaScript 中运行时输出“未定义”?
- html - 如何在 create-react-app 中为 index.html 指定 Cache-Control 标头
- memory - 如何将函数复制到内存中的缓冲区中?
- micrometer - 通过 Micrometer 使用 Servlet 过滤器的 HTTP 指标
- nodemcu - Expressif esp8266 开发套件 c 的 GPIO 映射
- javascript - 自动更新定时器/自动重置定时器
- machine-learning - 究竟包含 Word2Vec 的词向量(或通常是词嵌入,但我们可以保留 Word2Vec)