如何优雅的关闭 Kubernetes 中运行的 Pod

当我们使用命令 kubectl delete pod,Pod 就会被删除,端点控制器会从服务和 etcd 中移除其 IP 地址和端口(端点)。

你可以使用 kubectl describe service 命令来观察这个过程。

如何优雅的关闭 Kubernetes 中运行的 Pod

但这还不够!

有几个组件同步本地的端点列表:

  • kube-proxy 保留了一个本地的端点列表,用于编写 iptables 规则。
  • CoreDNS 使用端点来重新配置 DNS 条目。

对于 Ingress 控制器、Istio 等也是如此。

如何优雅的关闭 Kubernetes 中运行的 Pod

所有这些组件都会(最终)移除之前的端点,以便再也没有流量可以到达它。同时,kubelet 也会被通知更改并删除 Pod。

那么,当 kubelet 在其他组件之前删除 Pod 时会发生什么呢?

如何优雅的关闭 Kubernetes 中运行的 Pod

不幸的是,你会经历停机时间,因为像 kube-proxy、CoreDNS、ingress 控制器等组件仍然使用该 IP 地址来路由流量。

那么你能做什么呢?

等待!

如何优雅的关闭 Kubernetes 中运行的 Pod

如果你在删除 Pod 之前等待足够长的时间,正在进行的流量仍然可以处理的,新的流量可以被分配给其他 Pods。

那么应该如何等待呢?

如何优雅的关闭 Kubernetes 中运行的 Pod

当 kubelet 删除一个 Pod 时,它会经历以下步骤:

  • 触发 preStop 钩子(如果有的话)。
  • 发送 SIGTERM 信号。
  • 发送 SIGKILL 信号(30 秒后)。
如何优雅的关闭 Kubernetes 中运行的 Pod

你可以使用 preStop 钩子来插入人为的延迟。

如何优雅的关闭 Kubernetes 中运行的 Pod

你可以在你的应用程序中监听 SIGTERM 信号并等待。

此外,你可以在等待结束时优雅地停止进程并退出。

Kubernetes 会给你 30 秒来做这件事(可配置),如下代码所示:

如何优雅的关闭 Kubernetes 中运行的 Pod

那么你应该等待 10 秒、20 秒还是 30 秒呢?

事实上这并没有统一的答案。

虽然传播端点可能只需要几秒钟,但 Kubernetes 并不保证任何时间,也不保证所有组件都会在同一时间完成。

如何优雅的关闭 Kubernetes 中运行的 Pod

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/9142

(0)
郭靖的头像郭靖
上一篇 2023年7月17日 下午5:19
下一篇 2023年7月20日 下午4:45

相关推荐

  • 如何通过宝塔面板配置ssl证书

    至于宝塔的安装以及如何安装环境搭建网站,大家可以看我们的另一篇文章: Centos7.6下宝塔安装及资产管理系统部署 基于宝塔面板配置网站ssl证书支持https访问其实很简单,不需要你懂什么技术知识。接下来你跟着我的步骤,就能成功配置网站ssl。 宝塔面板后台设置成功如图所示: 第一步:点击设置 第二步:点击右侧的SSL,选择宝塔SSL,点击申请证书 第三…

    2022年6月14日
    2.0K00
  • Docker部署漏洞扫描工具Nessus

    部署漏洞扫描工具Nessus详细过程分享(下载+安装+注册+激活)​ 安装 配置 添加用户 以下操作在容器内进行: 获取Challenge code以下操作在容器内进行: 获取插件和许可证使用从www.tenable.com/products/ne…注册发送到邮箱的Activation Code和上一步获取的challenge Code在plugins.ne…

    2024年9月19日
    2.2K00
  • AutoGPT 安装教程! 保姆级的演示过程,一步一步教你完成本地部署!

    1.AutoGPT 安装之前,请确保已经具备以下几项条件: 2.下载项目代码,在一个文件夹下打开终端,克隆项目 下载完成后,cd 到项目路径下 安装依赖 运行以下代码安装所需要的依赖 3.获取自己的OpenAI的密钥,【点击获取】, 创建自己的密钥以后,在AutoGPT文件下找到配置文件:.env.template ,在里面替换自己的openAI key 4…

    2023年4月20日
    2.0K00
  • Docker神器NPM的安装

    准备工作 目录管理 配置yml文件 创建新文件docker-compose.yml并添加内容如下: 你可以使用默认端口或者自定义。 一般地,对于VPS来说,80和443端口应该使用默认的。可以使用80和443端口也是玩VPS的优势之一呀!想想你每次访问互联网服务都要加个端口号,看着就很难受。你的家用NAS一般是你或者你的家人等少数人用,有一些端口号也无伤大雅…

    2023年4月26日
    1.7K00
  • Centos7.6下SSH服务默认端口修改

    一般服务端的ssh端口默认是22,我们可以通过修改服务端的ssh配置文件,来修改ssh访问服务端的端口号 1、连接linux服务器 2、用编辑器(Vim,Emacs,Nano…)打开服务器上的/etc/ssh/sshd_config文件 vi /etc/ssh/sshd_config 2、修改对应位置的端口为你想要端口,修改完成后先按ESC键,再按shift…

    2022年6月8日
    1.4K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信