k8s蓝绿发布简介
k8s蓝绿发布简介什么是蓝绿部署K8S中如何实现蓝绿部署方法1: 通过k8s service label标签来实现蓝绿发布方法2: 通过Ingress 控制器来实现蓝绿发布方法3: 通过Istio实现蓝绿发布k8s蓝绿部署流程图1. 蓝绿发布流程2. 核心配置详解3. 方案优势4. 方案对比与生产建议什么是蓝绿部署参考: https://youtu.be/CLq_hA0lAd0https://help.coding.net/docs/cd/best-practice/blue-green.html蓝绿部署最早是由马丁·福勒2010年在他的博客中提出.蓝绿部署是一种软件部署策略,用于在生产环境中无缝发布和切换应用程序的新版本.蓝绿(blue/green)(绿色)新版本与(蓝色)旧版本一起存在万一新版本有bug,方便随时回滚老版本.蓝色: 表示旧版本绿色: 表示新版本优点: 零停机部署和回滚缺点: 同时运行两套环境,硬件资源需要2倍.K8S中如何实现蓝绿部署方法1: 通过k8s service label标签来实现蓝绿发布https://blog.csdn.net/omaidb/article/details/147163202方法2: 通过Ingress 控制器来实现蓝绿发布https://blog.csdn.net/omaidb/article/details/147166010方法3: 通过Istio实现蓝绿发布基于 Istio 实现蓝绿发布核心在于利用其强大的流量管理能力尤其是VirtualService和DestinationRule在不依赖副本数的情况下精准地将生产流量在“蓝”旧版本与“绿”新版本环境间一键切换。这样不仅安全、服务不中断而且能随时快速回滚。k8s蓝绿部署流程图1. 蓝绿发布流程通常由 CI/CD 流水线如 Argo Rollouts、PipeCD编排关键步骤如下准备环境部署“绿环境”新版本 v2此时所有流量仍在“蓝环境”旧版本 v1。切换流量通过调整 Istio 路由规则将所有流量一次性从 v1 切到 v2。验证与收尾验证新版本稳定后清理旧版本资源如有问题立即切回蓝环境完成回滚。2. 核心配置详解实现蓝绿发布需操作以下关键资源Deployment Service准备两个不同标签如version: v1和version: v2的 Deployment并通过同一个 Kubernetes Service 暴露。DestinationRule (目标规则)定义 v1 和 v2 两个子集subset作为路由的后端。apiVersion:networking.istio.io/v1beta1kind:DestinationRulemetadata:name:myapp-destinationspec:host:myapp-servicesubsets:-name:v1labels:version:v1-name:v2labels:version:v2VirtualService (虚拟服务)这是控制蓝绿切换的核心。通过修改路由的weight权重字段实现一键切流。蓝环境v1 全量http:-route:-destination:{host:myapp-service,subset:v1}weight:100-destination:{host:myapp-service,subset:v2}weight:0切换至绿环境v2 全量只需将 v1 的 weight 改为 0v2 改为 100 即可。3. 方案优势流量与实例解耦无需通过调整 Pod 数量来控制流量即使 1% 的流量也不需要维持 100 个 Pod。无侵入性应用代码无需关心发布策略Istio 通过 Sidecar 透明接管流量。回滚极速一旦新版本异常通过 Git 或 UI 将流量权重瞬间切回旧版本即可。4. 方案对比与生产建议Ingress 规则早期方案利用 Ingress 切换 Service 后端标签选择器但这种方式缺乏细粒度控制且切换不够平滑。推荐使用VirtualService。生产落地建议结合Argo Rollouts等高级部署控制器它原生支持 Istio能以蓝绿/金丝雀策略自动化更新并提供可视化的“一键切换”和“一键回滚”操作。