游乐游手机版
首页/AI教程/文章详情

Kubernetes金丝雀升级操作指南

时间:2026-06-08 16:03
金丝雀升级先让小部分用户试用新版本,平稳后逐步扩大范围,最终全量切换。通过控制新旧版本实例数量比例实现流量引流,支持随时观察和回退,保障系统稳定与快速发现问题。

在项目持续迭代与研发交付过程中,上线部署几乎是每个团队都必须面对的关键环节。当前主流的部署策略主要包括三种:金丝雀升级(又称灰度部署)、蓝绿升级与滚动升级。本文将重点聚焦金丝雀升级,并深入讲解它在 Kubernetes 环境中的具体落地实践。

金丝雀部署,也常被称为灰度发布,其核心思路是:在版本升级时,先让一小部分用户试用新版本,而大多数用户仍然使用稳定版。如果新版本运行顺畅、无异常,便逐步扩大使用范围,直到所有用户都平滑迁移到新版本。这种策略的最大价值在于:既能最大限度保障系统整体稳定性,又能在早期快速发现风险、及时控制损失,避免因一次升级导致整个项目出现重大故障。下面这张图清晰地展示了整个过程。

![image.png](https://developer.qcloudimg.com/http-sa ve/yehe-5642295/f5a753326e79cb7c2f1e4d77b164acd0.png)

光看理论还不够直观,我们通过一个真实案例,演示如何在 Kubernetes 中一步步操作金丝雀升级。

实战演示:在 Kubernetes 中实现金丝雀升级

(1)创建文件 canary-demo-v1.yaml,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: canary-demo
  labels:
    app: canary-demo
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: canary-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: canary-demo-v1
  labels:
    app: canary-demo
spec:
  replicas: 10
  selector:
    matchLabels:
      app: canary-demo
      version: v1.0.0
  template:
    metadata:
      labels:
        app: canary-demo
        version: v1.0.0
    spec:
      containers:
      - name: canary-demo
        image: collenzhao/k8s-deployment-strategies
        ports:
        - name: http
          containerPort: 8080
        env:
        - name: VERSION
          value: v1.0.0
# 这里利用 Service 的标签选择器实现了多个 Deployment 之间的负载均衡。

(2)应用该文件:

kubectl apply -f canary-demo-v1.yaml

(3)查看 Service 信息:

kubectl get service canary-demo
# 输出:
NAME          TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
canary-demo   NodePort   10.1.119.250           80:30952/TCP   4s

(4)通过 Service 访问 Deployment 验证当前版本:

curl 10.1.119.250:80
# 输出:
Host: canary-demo-v1-78b6cd78db-skjng, Version: v1.0.0
# 可以看到当前运行的是 v1.0.0 版本。

(5)准备进行金丝雀升级,创建 canary-demo-v2.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: canary-demo-v2
  labels:
    app: canary-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: canary-demo
      version: v2.0.0
  template:
    metadata:
      labels:
        app: canary-demo
        version: v2.0.0
    spec:
      containers:
      - name: canary-demo
        image: collenzhao/k8s-deployment-strategies
        ports:
        - name: http
          containerPort: 8080
        env:
        - name: VERSION
          value: v2.0.0

(6)开启两个命令行窗口,分别实时监控 Deployment 和 Pod 的变化:

kubectl get --watch deployment
kubectl get --watch pod

(7)执行升级操作:

kubectl apply -f canary-demo-v2.yaml

(8)观察 Deployment 和 Pod 的动态变化,效果如下图所示:

![image.png](https://developer.qcloudimg.com/http-sa ve/yehe-5642295/2c99baaa4a61787d5b84d44f70edd361.png)

注意观察:v1.0.0 版本有 10 个实例,而 v2.0.0 版本只有 1 个实例——这正是金丝雀部署中“一小撮”用户尝鲜的体现。

(9)编写一个脚本模拟请求,看看流量如何分配:

for a in {1..11}
do 
  sleep 1;
  curl "10.1.119.250:80";
done
# 输出:
Host: canary-demo-v1-78b6cd78db-nbbjx, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-nbbjx, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-67cg5, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-gd9kf, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-7zjwf, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-gd9kf, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-dskpc, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-gd9kf, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-67cg5, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-fdrwp, Version: v1.0.0
Host: canary-demo-v2-7c4c5f5444-g69jr, Version: v2.0.0
# 循环 11 次请求中,10 次命中 v1.0.0,1 次命中 v2.0.0,流量比例正好是 10:1。

(10)确认新版本运行正常后,逐步调整实例比例。将 v2.0.0 扩容到 5 个,同时将 v1.0.0 缩容到 5 个:

kubectl scale --replicas=5 deploy canary-demo-v2
kubectl scale --replicas=5 deploy canary-demo-v1

(11)观察 Deployment 变化:

kubectl get --watch deployment
![image.png](https://developer.qcloudimg.com/http-sa ve/yehe-5642295/2b5f7e9cbdb4ce9fd35142dafcf4e2f0.png)

(12)再次执行脚本,验证流量分配是否变成 1:1:

for a in {1..10}
do 
  sleep 1;
  curl "10.1.119.250:80";
done
# 输出:
Host: canary-demo-v1-78b6cd78db-67cg5, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-9dphd, Version: v1.0.0
Host: canary-demo-v2-7c4c5f5444-lcbhw, Version: v2.0.0
Host: canary-demo-v1-78b6cd78db-hr9x8, Version: v1.0.0
Host: canary-demo-v1-78b6cd78db-7zjwf, Version: v1.0.0
Host: canary-demo-v2-7c4c5f5444-lcbhw, Version: v2.0.0
Host: canary-demo-v1-78b6cd78db-fdrwp, Version: v1.0.0
Host: canary-demo-v2-7c4c5f5444-9hbwr, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-9hbwr, Version: v2.0.0
Host: canary-demo-v1-78b6cd78db-hr9x8, Version: v1.0.0
# 10 次请求中,v1 和 v2 各占一半,符合预期。

(13)确认新版本完全稳定后,删除旧版本,并将 v2.0.0 扩容到 10 个实例:

kubectl delete deployment.apps/canary-demo-v1
kubectl scale --replicas=10 deploy canary-demo-v2
# 此时应用已全部升级到 v2.0.0。再执行 for 循环,所有请求均返回:
Host: canary-demo-v2-7c4c5f5444-g69jr, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-lcbhw, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-hs4k2, Version: v2.0.0
... 全部为 v2.0.0

(14)最后清理测试数据:

kubectl delete all -l app=canary-demo

纵观整个流程,核心思想其实非常简单:通过动态调整新旧版本的实例数量比例,逐步将流量从旧版本平滑引导到新版本。每一步都可以实时观察、随时回滚,这正是生产环境中真正可靠的部署方式。

来源:https://cloud.tencent.com.cn/developer/article/2684211
上一篇SK海力士2031年DRAM月产能将达百万片 下一篇多模型聚合趋势:GPT-Image接入与AI选型攻略
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
年最新JetBrains AI助手Windows本地详细安装配置教程(含下载与环境要求)
AI教程 · 2026-07-03

年最新JetBrains AI助手Windows本地详细安装配置教程(含下载与环境要求)

JetBrainsAIAssistant可在Windows上通过IDE内置市场或离线包安装,需匹配新版JetBrainsIDE、账号登录与稳定网络。配置时应关注版本兼容、隐私设置、项目索引、快捷键和代码提交前复核,避免上传密钥与敏感业务资料。

Amazon Q Developer新手安装指南:从下载到首次运行的保姆级教程
AI教程 · 2026-07-03

Amazon Q Developer新手安装指南:从下载到首次运行的保姆级教程

AmazonQDeveloper可为编码、调试、解释项目和生成测试提供辅助。安装前需确认账号、开发环境和插件来源,按IDE或命令行路径完成配置,并在首次运行时注意权限、数据与项目安全。

Amazon Q Developer安装失败怎么办?报错日志排查与升级回滚方案
AI教程 · 2026-07-03

Amazon Q Developer安装失败怎么办?报错日志排查与升级回滚方案

AmazonQDeveloper安装失败通常与版本兼容、网络连接、身份登录、插件残留或权限配置有关。排查时应先确认环境,再查看IDE与终端日志,必要时采用清理重装、固定版本升级或回滚方案。

Amazon Q Developer本地模型运行:下载、路径与性能优化
AI教程 · 2026-07-03

Amazon Q Developer本地模型运行:下载、路径与性能优化

AmazonQDeveloper以云端能力为主,本地模型方案更适合离线补充、代码检索和私有环境辅助。配置时需确认版本、模型来源、路径权限、硬件资源与IDE集成方式,并通过量化、上下文控制和缓存策略优化性能。

Amazon Q Developer插件安装全流程:浏览器编辑器扩展市场配置
AI教程 · 2026-07-03

Amazon Q Developer插件安装全流程:浏览器编辑器扩展市场配置

AmazonQDeveloper可在浏览器控制台、VSCode、JetBrains等环境中辅助写代码、解释项目和生成测试。安装前需确认账号权限、编辑器版本与网络环境,配置时重点关注登录授权、工作区信任、数据权限和团队使用规范。