蛮子哥 蛮子哥
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

蛮子哥

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • 随笔

  • 面试

    • 运维10道基础面试题
    • http状态码
    • 高级运维工程需要掌握的技能
    • 2023年6月运维面试问题总结
    • Kubernetes运维方面的项目经验
    • 运维常见故障排查
    • 面试故障回答案例
    • 运维面试题一
    • 个人简历
    • 问题案例展示
    • 运维面试题二
    • 面试回答技巧
    • kubernetes面试问题总结
    • 发布模式介绍和对比
      • 面试回答
        • 特点
        • 优点
        • 缺点
      • 面试回答
        • 蓝绿发布
        • 灰度发布
        • Istio 灰度发布示例
  • 工具

  • 美食

  • 生活
  • 面试
蛮子哥
2023-06-12
目录

发布模式介绍和对比

# 一、蓝绿发布(Blue-Green Deployment)

蓝绿发布是准备两套完全相同的生产环境:

  • 蓝环境(Blue):当前正在提供服务
  • 绿环境(Green):新版本环境

发布流程:

用户
  │
  ▼
负载均衡
  │
  ├── Blue(V1)← 当前运行
  └── Green(V2)← 提前部署
1
2
3
4
5
6
7

部署完成后:

用户
  │
  ▼
负载均衡
  │
  ├── Blue(V1)
  └── Green(V2)← 切换流量
1
2
3
4
5
6
7

# 特点

# 优点

  • 发布速度快
  • 回滚速度快
  • 风险较低
  • 不影响用户

# 缺点

  • 资源消耗翻倍
  • 需要两套完整环境
  • 数据库升级需要额外处理

# 面试回答

蓝绿发布是同时维护两套生产环境,旧版本运行在蓝环境,新版本部署到绿环境。验证无误后通过负载均衡或Ingress切换流量到绿环境。如果发现问题可以快速切回蓝环境,实现秒级回滚。


# 二、灰度发布(Canary Deployment)

灰度发布是让部分用户先访问新版本。

例如:

90%流量 → V1
10%流量 → V2
1
2

验证稳定后:

70%流量 → V1
30%流量 → V2
1
2

继续扩大:

50%流量 → V1
50%流量 → V2
1
2

最终:

100%流量 → V2
1

# 特点

# 优点

  • 风险最低
  • 可以观察真实用户反馈
  • 发现问题影响范围小

# 缺点

  • 实现复杂
  • 需要流量管理能力
  • 监控要求高

# 面试回答

灰度发布是按照一定比例逐步引流到新版本,例如先放5%流量到V2,观察监控指标、错误率和用户反馈,没有问题再逐步扩大到20%、50%、100%。出现异常时只影响少量用户。


# 三、两者区别

对比项 蓝绿发布 灰度发布
运行版本 两套完整环境 两个版本同时运行
流量切换 一次性切换 按比例逐步切换
回滚速度 非常快 较快
风险 中等 最低
资源消耗 高 较低
实现复杂度 简单 较复杂
用户感知 全量用户同时升级 部分用户先升级

# 四、Kubernetes 中如何实现

# 蓝绿发布

创建两个 Deployment:

deployment-blue
deployment-green
1
2

Service 默认指向 Blue:

selector:
  app: blue
1
2

切换时修改:

selector:
  app: green
1
2

实现秒级切流。


# 灰度发布

最简单方式:

两个 Deployment

v1: 9 Pod
v2: 1 Pod
1
2

Service 同时选择:

selector:
  app: web
1
2

Kubernetes 自动实现:

90% -> V1
10% -> V2
1
2

但这种方式不够精准。


# 五、企业生产环境真实做法

你面试时最好这样回答:

在生产环境中,我们主要使用 Istio 实现灰度发布。通过 VirtualService 配置流量权重,例如先让5%的流量进入新版本,观察 Prometheus 和 Grafana 监控指标,包括响应时间、错误率、CPU和内存使用情况,确认稳定后逐步扩大到20%、50%、100%。如果出现异常,通过修改权重立即回退到旧版本。对于重大版本升级或架构迁移,我们会采用蓝绿发布,提前准备完整的新环境,验证通过后一次性切流,实现快速回滚。

# Istio 灰度发布示例

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: app
spec:
  hosts:
  - app
  http:
  - route:
    - destination:
        host: app
        subset: v1
      weight: 90
    - destination:
        host: app
        subset: v2
      weight: 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

面试官如果继续追问:

“你们生产环境是怎么做不停机发布的?”

可以回答:

我们采用 Kubernetes Deployment RollingUpdate 配合 Istio 灰度发布。普通版本升级使用滚动更新保证不停机;核心业务系统升级采用灰度发布逐步放量;涉及重大架构变更时采用蓝绿发布,确保能够快速回滚,从而保证业务连续性。这样既兼顾资源成本,又能降低发布风险。

微信 支付宝
上次更新: 2026/06/15, 01:53:28

← kubernetes面试问题总结 企业级openvpn搭建→

最近更新
01
victorialogs配置关键字告警
06-03
02
kubernetes部署jaeger
05-30
03
grafana高可用部署
05-26
更多文章>
Theme by Vdoing | Copyright © 2019-2026 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式