k8s是如何保障滚动升级时下线的pod不被访问
Kubernetes (k8s) 通过一系列机制保障在滚动升级时,下线的 Pod 不再被访问。以下是一些主要的保障措施:
- Service 抽象:在 Kubernetes 中,Pod 通常不是直接暴露给外部访问的,而是通过 Service 来抽象和暴露。Service 提供一个稳定的网络端点,无论背后的 Pod 如何变化,Service 的 IP 和端口都是不变的。
- Endpoint 控制:当 Pod 发生变化时(比如滚动升级),Kubernetes 会自动更新与 Service 关联的 Endpoint 对象。Endpoint 对象包含了所有属于该 Service 的 Pod 的 IP 地址和端口。Kubernetes 会确保在下线的 Pod 从 Endpoint 列表中移除之前,不会有新的流量被路由到这些 Pod。
- Readiness Probes:Pod 可以通过配置 Readiness Probes 来告诉 Kubernetes 它是否已经准备好接受流量。在滚动升级过程中,如果一个 Pod 的 Readiness Probe 失败,Kubernetes 会将其从 Service 的 Endpoint 列表中移除,直到 Probe 成功为止。
- 流量调度:Kubernetes 的 Service 使用 iptables 或 IPVS 等技术来实现流量转发。在滚动升级过程中,Service 会动态更新这些转发规则,确保流量只被路由到处于 Ready 状态的 Pod。
- 滚动更新策略:在部署时,可以通过配置滚动更新策略来控制 Pod 的升级顺序和速度。例如,可以设置最大不可用 Pod 的数量或最大涌浪(surge)数量,以确保在升级过程中有足够的 Pod 来处理流量。
- Ingress 控制器:对于外部访问的流量,通常通过 Ingress 控制器来管理。Ingress 控制器会根据配置的规则将外部流量路由到相应的 Service。在滚动升级时,Ingress 控制器也会配合 Kubernetes 的机制,确保流量只被路由到可用的 Pod。
综上所述,Kubernetes 通过 Service、Endpoint、Readiness Probes、流量调度、滚动更新策略和 Ingress 控制器等多种机制来保障在滚动升级时下线的 Pod 不再被访问。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18042108
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略