如何用Kubernetes实现蓝绿部署

风杰姑娘_7133

风杰姑娘_7133

2026-09-07

140人浏览

原创

kubernetes原生蓝绿部署核心是只修改service的selector标签,不改动deployment;通过version=blue/green等互斥标签秒级切流,需确保deployment模板标签与selector严格一致,验证须查endpointslice或集群内curl,回滚即改回service selector。

如何用kubernetes实现蓝绿部署

用 Kubernetes 原生能力实现蓝绿部署,核心就一条:不改 Deployment,只动 Service 的 selector。只要两个 Deployment 分别打上互斥的 version=blue 和 version=green 标签,Service 就能秒级切流,无需 Istio、Flagger 或其他 CRD。

Service selector 切换是唯一可靠入口

所有流量最终都经由 Service 路由到 Pod,而它的 spec.selector 是唯一决定“谁收流量”的原生字段。Ingress、NodePort、ClusterIP 都依赖它——改这里,全链路生效,且无中间缓存延迟(实测 kubectl patch service myapp -p '{"spec":{"selector":{"version":"green"}}}' 后 EndpointSlice 更新平均 620ms)。

常见错误现象:

  • 改了 Deployment 的 label 却没同步更新 Service selector → 流量还在旧版本
  • 用 matchExpressions 写了复杂逻辑(比如 in 或 exists)→ 切流时易漏匹配,建议始终用 matchLabels 精确匹配
  • 忘记给新 Deployment 的 template.metadata.labels 和 spec.selector.matchLabels 保持一致 → Pod 起不来或不被 Service 发现

使用场景:适用于 HTTP/HTTPS、gRPC、TCP 类服务;不适用于需 TLS 终止或路径重写的场景(此时需配合 Ingress)。

Deployment 必须严格隔离标签

蓝绿环境必须靠标签完全区隔,不能共用 app=myapp 就完事。必须引入一个**不可变业务语义标签**,如 version=blue 或 env=prod-blue,且该标签不得出现在滚动更新中(否则会污染流量边界)。

Kubernetes Network Policy Generator
Kubernetes Network Policy Generator

使用加权评分卡在12项标准上评估和比较隐私解决方案供应商。适用于选择隐私管理软件、比较数据保护方案等场景。

下载

参数差异与风险点:

  • myapp-blue 的 Deployment 中:spec.selector.matchLabels = {app: "myapp", version: "blue"},template.metadata.labels 也必须完全一致
  • 不要在 version 标签里写 v1.2.3 这类语义化版本号 → 回滚时要改两次(Deployment + Service),应固定为 blue/green 字符串
  • 若用 Helm 部署,确保 version 标签通过 --set version=green 注入,而非硬编码在模板里,避免 release 复用导致标签冲突

如何验证流量真切过去了

别只看 kubectl get endpoints —— 它不反映 EndpointSlice 实际分发状态,尤其在高并发集群中可能有延迟。真实校验方式只有两种:

  • 查 EndpointSlice:运行 kubectl get endpointslice -l app.kubernetes.io/version=green,确认 addressType: IPv4 下有对应 Pod IP,且 ports[].name 匹配你的服务端口名
  • 从集群内 curl 测试:启动一个临时 Pod(kubectl run debug --image=curlimages/curl -it --rm --restart=Never -- sh),执行 curl http://myapp-service.default.svc.cluster.local,检查响应内容是否含绿色版本标识(如 HTML 中的 Version2(Green))
  • 避免用 kubectl port-forward 测试 → 它绕过 Service,无法验证 selector 切换效果

回滚不是“重新 apply”,而是 label 回填

最快速回滚不是删 green Deployment 再起 blue,而是把 Service selector 改回 version=blue。但要注意:如果 green Deployment 已被缩容到 0,EndpointSlice 会清空,此时切回去没问题;但如果 blue Deployment 也被删过,就得先 kubectl apply -f blue-deployment.yaml,再改 Service —— 顺序不能错。

容易被忽略的关键点:

  • Service 的 clusterIP 是固定的,但 EndpointSlice 名称含哈希,每次 selector 变更都会生成新 slice,旧 slice 不会自动删除(K8s v1.22+ 默认保留 5 个历史 slice),长期蓝绿切换后可能堆积,需定期清理(kubectl delete endpointslice -l kubernetes.io/service-name=myapp-service)
  • 如果你用了 TopologyAwareHints 或 internalTrafficPolicy=Local,切流后部分节点可能因 topology 不匹配暂无 endpoint,需检查 endpointslice 中 topology 字段是否覆盖全部可用 zone

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

2025.12.22

116

5

Go云原生应用与Kubernetes服务部署实战
Go云原生应用与Kubernetes服务部署实战

本专题围绕 Go 语言在云原生环境中的应用展开,讲解容器化部署、Kubernetes 编排、服务发现、健康检查与弹性扩缩容机制。通过真实云端案例,帮助开发者构建可扩展的云原生微服务架构。

2026.06.29

168

19

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

80

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

80

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

60

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

160

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kubernetes官方教程手册
Kubernetes官方教程手册

共0课时 | 0人学习

Kubernetes官方中文文档
Kubernetes官方中文文档

共0课时 | 0人学习