如何优雅的关闭 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

相关推荐

  • 网络总是宕机,这个绝招必须收藏!

    下午好,我的网工朋友。 众所周知,后台服务可以划分为两类,有状态和无状态。 高可用对于无状态的应用来说是比较简单的,无状态的应用,只需要通过 F5 或者任何代理的方式就可以很好的解决。 而本篇文章描述的主要是针对有状态的服务进行分析。 服务端进行状态维护主要是通过磁盘或内存进行保存,比如 MySQL 数据库,redis 等内存数据库。 除了这两种类型的维护方…

    2024年1月9日
    10500
  • HTTPS为什么比HTTP更安全?

    一、安全性 HTTP在通信中: 通信使用明文,不对内容进行加密,容易被窃听 不验证通信方的身份,内容可能被伪装分子窃取 HTTPS则解决了上述问题: 内容加密,建立一个信息安全通道,来保证数据传输的安全 身份认证,确认网站的真实性 数据完整性,防止内容被第三方冒充或者篡改 HTTPS=HTTP+SSL/TLS ,如今SSL已废弃,所以只关注HTTP+TLS,…

    2022年8月19日
    37900
  • docker-compose部署zabbix

    我们直接利用docker环境安装compose功能。compose的安装很方式有多种,下面我们使用二进制方式进行安装。下载地址为https://github.com/docker/compose/releases 输入docker-compose可以显示帮助信息表示安装成功。 下面我们就可以通过编写docker-compose.yml文件来部署服务了。 接下…

    2023年3月21日
    40200
  • Nginx升级版本

    一:宝塔Nginx升级 在宝塔界面点击软件管理->运行环境->Nginx的设置 选择切换版本->选择想要升级的版本,点击切换等待安装成功 二:Linux下升级nginx版本(源码包方式) 方式:使用源码包的方式 老版本:nginx/1.13.0 新版本:nginx/1.22.0 一:下载源码包 wget http://nginx.org/d…

    2022年8月2日
    47500
  • 常用Centos 7防火墙配置教程

    如果我们用的可视化面板建站环境的,防火墙的设置还是相对简单,我们直接在可视化面板上面添加放行或者限制的端口。当然提醒大家也不要忘记在服务器端安全组的设置,有些服务商是必须强制使用安全组的。 在这篇文章中,记录CentOS7防火墙的开放端口设置方法,比如我们有一些常用的端口是如何设置。当然这个是针对直接在服务器端SHELL命令设置的,如果我们有直接可视化设置那…

    2022年6月8日
    1.7K10

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信