javascript - GKE 流量管理
问题描述
我有以下问题。我们在GKE上部署了一个网站,其中包含 10 个 Pod,并且在我们使用的新部署上MAXsurge=1
MAXunavailable=0
。
有时,当我在部署新版本期间尝试加载网站时,我在浏览器中只看到标题,并且在加载静态块时遇到了一些错误......我假设负载均衡器正在将我发送到旧 pod 或尝试加载旧的缓存静态文件......部署后,但这不是 100% 的帮助.....
我相信它可以配置为仅将流量发送到新版本的 pod 或类似的东西,但我是 GKE 新手,不确定
或者我们的css或浏览器缓存控制的时间戳有问题.....它正在寻找不存在的文件...... 浏览器错误
解决方案
负载均衡器会将流量发送到任何被认为是健康的 pod(通过就绪探测)。此分发由 k8s 服务处理。根据您当前的推出计划,将在删除任何旧 pod 之前创建一个具有新版本的新 pod。在新 pod 准备好(通过 readinessProbe)之前,不会移除旧 pod。如果在此窗口期间向您的应用程序发送请求,则流量很可能会流向您的旧应用程序。
如果您有多个 pod,则此过程将花费更长的时间,因为新的 pod 一次推出 1 个,而旧的 pod 以相同的速度被移除。只要有一个 Pod 在就绪状态下运行旧版本,就有可能将流量定向到该 Pod。
确保所有流量都流向新应用程序的唯一真正方法是立即执行完全部署(如果有 3 个 pod,请将 maxUnavailable 设置为 3)。这将导致短暂的停机时间(持续时间与您的 pod 准备就绪所需的时间一样长),但会确保没有流量流向您的旧版本。
或者,您可以通过使用不同标签(例如version=1.1
)使用新版本创建第二个部署来进行蓝/绿部署。准备好所有 pod 后,更新您的服务定义以指向新标签。所有流量将立即切换,无需停机。
推荐阅读
- django - Django 模型中的保存方法何时不运行?
- javascript - 打字稿:如何输入 ForwardRefExoticComponent + ComponentType
- android - 如何从嵌套的可组合 Jetpack Compose 访问 NavHostController
- java - 将 RestHighLevelClient 与 OAuth2 一起使用
- python - 模拟复合随机变量 S
- mysql - Formio-sql 在本地系统中尝试使用 yarn run 和 docker 时无法运行项目
- java - SLF4j 记录器中的字符串是否消耗堆空间
- amazon-web-services - 主机名/IP 与证书的替代名称不匹配
- cockroachdb - 用于 sql 转储导入的 Cockroach DB 多租户 IMPORT 错误
- python - 覆盖在我的项目中找不到模块