【赵渝强老师】Kubernetes(K8s)中的金丝雀升级

简介: 本文详解Kubernetes中金丝雀(灰度)部署策略:通过分阶段发布新版本(如v2.0.0仅1个Pod起步),逐步扩大流量比例,实时验证稳定性,再平滑全量升级。含完整YAML配置、kubectl操作步骤及效果验证,兼顾安全性与可控性。(239字)

b451.png

在项目迭代开发的过程中,对应用进行上线部署是不可避免的。项目的上线部署策略主要有以下三种:金丝雀升级、蓝绿升级和滚动升级。下面将重点介绍金丝雀升级策略以及在Kubernetes中如何实现它。视频讲解如下:


金丝雀部署,也可以叫做灰度部署。它通过在项目部署升级过程中,先让部分用户继续使用旧版本,而另一部分用户开始使用新版本。如果新版本在升级过程中没有发生问题,那么逐步扩大新版本的用户使用范围,直到使用旧版本的用户都迁移到新的新版本上面来。通过使用金丝雀部署可以最大程度地保证系统整体的稳定性,并在部署升级过程的早期就可以发现和解决问题,以保证项目部署升级的进度。下图说明了金丝雀部署升级的过程。

image.png


下面通过一个具体的示例来演示如何实现应用的金丝雀部署升级。

(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)使用命令应用“canary-demo-v1.yaml”文件。

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   <none>        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)单开启两个命令行窗口使用“watch”命令来监控Deployment和Pod的变化。

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

(7)执行应用的升级。

kubectl apply -f canary-demo-v2.yaml

(8)观察Deployment和Pod的变化,如下图所示。

image.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
# 提示:for循环中一共循环了11次,其中:10次访问了v1.0.0的版本;
# 而只有1次访问了v2.0.0的版本。

(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

(12)重新执行下面的脚本。

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

(12)停止v1.0.0的版本,并把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
Host: canary-demo-v2-7c4c5f5444-lcbhw, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-hs4k2, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-g69jr, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-9hbwr, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-5h5sm, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-g69jr, Version: v2.0.0
Host: canary-demo-v2-7c4c5f5444-5h5sm, Version: v2.0.0

(13)清理测试的数据。

kubectl delete all -l app=canary-demo
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
运维 监控 Kubernetes
阿里云云原生DevOps:基于ACK构建企业级CI/CD流水线
企业上云后,如何高效地进行应用交付成为核心挑战。本文分享基于阿里云容器服务ACK和云效DevOps平台构建企业级CI/CD流水线的完整实践,涵盖镜像构建、自动部署、灰度发布、安全扫描和成本优化5个核心环节。以一个日活百万的在线教育平台为例,将发布频率从每周1次提升到每天10次,部署成功率从85%提升到99.5%,年节省服务器成本约48万元。
|
3月前
|
网络协议 Java 数据格式
【赵渝强老师】Docker容器的跨节点通信
本文详解Docker容器跨主机通信的三种方案,重点介绍基于Overlay网络的实现:通过ZooKeeper注册中心配置Docker集群,创建overlay网络,使不同主机上的容器能用虚拟IP直接互通,并提供完整部署步骤与验证方法。(239字)
335 3
|
1月前
|
API
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态。
209 26
|
1月前
|
人工智能 缓存 自然语言处理
阿里云AI通用型节省计划A类、B类、C类主要包含哪些模型?扣费规则与不同类型折扣信息参考
阿里云AI通用型节省计划是面向大模型按量付费场景的折扣方案,用户承诺3/6/12/24个月等月消费额,即可享阶梯式折扣。模型分为三类:A类涵盖千问全系列(不含qwen3.6-max-preview)、开源模型及向量/排序/工具调用,最高可享6.8折;B类包含图像生成、语音合成、视频生成等多模态服务,最高5.3折;C类为qwen3.6-max-preview及DeepSeek、Kimi等三方直供模型,不支持抵扣。付费方式分全预付和零预付,承诺金额越高、周期越长折扣越大。此外新用户还可领取全模型通用抵扣券(20/100/500元档)及AI加速季满减优惠券,进一步降低使用成本。
|
1月前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
1087 23
|
应用服务中间件 nginx C语言
3分钟教你搞定 nginx 编译安装报错:error: the HTTP rewrite module requires the PCRE library.
3分钟教你搞定 nginx 编译安装报错:error: the HTTP rewrite module requires the PCRE library.
5759 0
3分钟教你搞定 nginx 编译安装报错:error: the HTTP rewrite module requires the PCRE library.
|
1月前
|
人工智能 Kubernetes Cloud Native
从 Docker 到 ACK:Kubernetes 企业级实践、避坑指南与成本优化全景解析
本文深度解析Kubernetes企业级落地实践,涵盖ACK托管服务优势、生产环境十大典型坑点(如资源不限、数据库容器化等)、核心对象最佳配置(资源限制、健康检查、HPA等),并提供GPU推理部署与成本优化实战方案,助力企业构建稳定、高效、低成本云原生平台。
202 1
|
1月前
|
人工智能 移动开发 数据可视化
AI数字人公司厂商让数字孪生系统可视化大屏变身展厅智慧讲解员
世优波塔AI数字人是轻量级大屏“中间件”,无需改造硬件,即可为数字孪生大屏赋予语音交互、智能讲解能力。已落地贝德工厂、新奥集团等千余案例,让数据“开口说话”,助力企业展厅从展示窗口升级为智慧交互门户。
140 1
|
1月前
|
人工智能 运维 数据可视化
2026年思维导图工具深度横评:7款主流平台技术向实测与选型建议
本文深度实测7款主流在线思维导图工具(ProcessOn、GitMind、boardmix、NuromBoard、MindMaster、知犀、幕布),从核心功能、AI能力、协作支持、免费可用性及场景匹配五大维度横向对比,专为技术从业者提供真实、客观、可落地的选型指南。
|
1月前
|
人工智能 运维 JavaScript
2026版阿里云计算巢部署OpenClaw 完整实操步骤与配置流程
计算巢是阿里云面向应用快速部署、容器化运行推出的服务形态,依托容器技术实现应用一键托管、环境隔离、资源弹性调度,相比传统云服务器手动部署,能够省去大量系统环境搭建、依赖适配、权限调试的工作,让开源应用的落地过程更加标准化、轻量化。OpenClaw作为一款功能丰富的开源AI智能体,集成多类插件、自动化任务执行、文件处理与多端交互能力,常被用于日常办公辅助、自动化运维、个性化AI交互场景。
167 0