Welcome to my blog.
无损滚动更新机制
想要进行无损滚动更新需要保证一下3点 应用支持优雅退出(收到退出信号时不接收新请求并且要处理完已经接收到的请求) k8s正确配置readnessProbe就绪探针 添加生命周期函数preStop添加一定的延时, 比如preStop.exec.commend: ["/bin/sh", “-c”, “sleep 10”] 主要原因为Kubernetes 在终止 Pod 时的操作顺序是 标记 Pod 为 Terminating 状态:当 Kubernetes 接收到删除 Pod 的请求时,它会将 Pod 的状态设置为 Terminating 执行 preStop 钩子:如果 Pod 定义了 preStop 钩子,Kubernetes 会立即同步执行这个钩子 并行更新 Endpoint:在 Kubernetes 标记 Pod 为 Terminating 状态的同时,Endpoint Controller 会异步地从相关的服务端点(endpoints)中移除该 Pod 的 IP 地址。Kube-proxy 也会开始更新其网络规则,以停止向该 Pod 转发流量 发送 SIGTERM 信号:一旦 preStop 钩子完成,Kubernetes 会向 Pod 中的容器发送 SIGTERM 信号,告诉容器开始优雅地关闭 等待或强制终止:如果容器在终止宽限期(terminationGracePeriodSeconds)内没有关闭,Kubernetes 会发送 SIGKILL 信号强制终止容器。 k8s doc %% Kubernetes Pod 终止流程(Endpoint更新与preStop并行) graph TD A[用户/系统删除Pod] --> B(标记Pod为Terminating状态) B --> C[[Endpoint控制器异步移除Pod IP]] B --> D{执行preStop钩子} C --> E[停止流量路由到Pod] D -->|同步等待完成或超时| F[发送SIGTERM信号] F --> G{进程处理SIGTERM} G -->|异步处理| H[等待退出] H --> I{是否在terminationGracePeriod内退出?} I -->|是| J[Pod终止完成] I -->|否| K[发送SIGKILL强制终止] K --> J %% 同步/异步标注 style B fill:#c9f7d4,stroke:#2d8a3e style C fill:#e3f2fd,stroke:#1e88e5 style D fill:#c9f7d4,stroke:#2d8a3e style F fill:#c9f7d4,stroke:#2d8a3e style K fill:#c9f7d4,stroke:#2d8a3e style G fill:#f8e5d4,stroke:#cc6b2c style H fill:#f8e5d4,stroke:#cc6b2c 注: ...