通过Ingress进行灰度发布

简介: 本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。

通过Ingress进行灰度发布


1. 创建实验资源

开始实验之前,您需要先创建云服务器ECS和ACK集群资源。

说明:在实验资源创建过程中,ECS会安装命令行工具kubectl并连接ACK集群,方便您在后续实验中通过ECS中的Kubernetes命令行工具kubectl来管理ACK集群以及应用。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。

说明:资源创建过程需要7~10分钟。

2. 部署Deployment V1应用

本步骤指导你如何部署Deployment V1应用,并使用Ingress实现Deployment V1应用的外部访问。

  1. 执行如下命令,创建名为app-v1.yaml的YAML文件。
vi app-v1.yaml
  1. i键进入编辑模式,将如下代码复制到文件中。
apiVersion: v1
kind: Service
metadata:
  name: my-app-v1
  labels:
    app: my-app
spec:
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: my-app
    version: v1.0.0
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v1
  labels:
    app: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
      version: v1.0.0
  template:
    metadata:
      labels:
        app: my-app
        version: v1.0.0
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9101"
    spec:
      containers:
      - name: my-app
        image: registry.cn-hangzhou.aliyuncs.com/containerdemo/containersol-k8s-deployment-strategies
        ports:
        - name: http
          containerPort: 8080
        - name: probe
          containerPort: 8086
        env:
        - name: VERSION
          value: v1.0.0
        livenessProbe:
          httpGet:
            path: /live
            port: probe
          initialDelaySeconds: 5
          periodSeconds: 5
        readinessProbe:
          httpGet:
            path: /ready
            port: probe
          periodSeconds: 5
  1. ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
  2. 执行如下命令,部署Deployement V1应用。
kubectl apply -f app-v1.yaml
  1. 执行如下命令,创建名为ingress-v1.yaml的Ingress YAML文件。
vi ingress-v1.yaml
  1. i键进入编辑模式,将如下代码复制到文件中,并将hots参数中的集群id修改为k8s集群id。

说明:您可在云产品资源列表中查看k8s集群id。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  rules:
  - host: my-app.集群id.cn-shanghai.alicontainer.com
    http:
      paths:
      - backend:
          service:
            name: my-app-v1
            port:
              number: 80
        path: /
        pathType: Prefix
  1. ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
  2. 执行如下命令,部署Ingress资源。
kubectl apply -f ingress-v1.yaml
  1. 执行如下命令,进行测试。

说明:您可在云产品资源列表中查看k8s集群id。

curl my-app.集群id.cn-shanghai.alicontainer.com

返回结果如下,表示您已成功访问到Deployment V1应用。

3. 部署Deployment V2应用

本步骤指导你如何部署Deployment V2应用。

  1. 执行如下命令,创建名为app-v2.yaml的YAML文件。
vi app-v2.yaml
  1. i键进入编辑模式,将如下代码复制到文件中。
apiVersion: v1
kind: Service
metadata:
  name: my-app-v2
  labels:
    app: my-app
spec:
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: my-app
    version: v2.0.0
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v2
  labels:
    app: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
      version: v2.0.0
  template:
    metadata:
      labels:
        app: my-app
        version: v2.0.0
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9101"
    spec:
      containers:
      - name: my-app
        image: registry.cn-hangzhou.aliyuncs.com/containerdemo/containersol-k8s-deployment-strategies
        ports:
        - name: http
          containerPort: 8080
        - name: probe
          containerPort: 8086
        env:
        - name: VERSION
          value: v2.0.0
        livenessProbe:
          httpGet:
            path: /live
            port: probe
          initialDelaySeconds: 5
          periodSeconds: 5
        readinessProbe:
          httpGet:
            path: /ready
            port: probe
          periodSeconds: 5
  1. ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
  2. 执行如下命令,部署Deployement V2应用。
kubectl apply -f app-v2.yaml

4. 按照权重策略灰度到Deployment V2应用

本步骤指导你如何按照权重策略灰度到Deployment V2应用。

  1. 执行如下命令,创建名为ingress-v2-canary-weigth.yaml的YAML文件。
vi ingress-v2-canary-weigth.yaml
  1. i键进入编辑模式,将如下代码复制到文件中,并将hots参数中的集群id修改为k8s集群id。

说明:您可在云产品资源列表中查看k8s集群id。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-canary
  labels:
    app: my-app
  annotations:
    # Enable canary and send 10% of traffic to version 2
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"
spec:
  rules:
  - host: my-app.集群id.cn-shanghai.alicontainer.com
    http:
      paths:
      - backend:
          service:
            name: my-app-v2
            port:
              number: 80
        path: /
        pathType: Prefix
  1. ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
  2. 执行如下命令,部署Ingress资源。
kubectl apply -f ingress-v2-canary-weigth.yaml
  1. 执行如下命令,并将命令中的集群id修改为k8s集群id,进行测试。

说明:您可在云产品资源列表中查看k8s集群id。

while sleep 0.1;do curl my-app.集群id.cn-shanghai.alicontainer.com; done
  1. 返回结果如下,表示已成功按照权重策略灰度到Deployment V2应用。按CTRL+C键退出。

5. 按照Header策略灰度到Deployment V2应用

本步骤指导你如何按照Header策略灰度到Deployment V2应用。

  1. 执行如下命令,创建名为ingress-v2-canary-header.yaml的YAML文件。
vi ingress-v2-canary-header.yaml
  1. i键进入编辑模式,将如下代码复制到文件中,并将hots参数中的集群id修改为k8s集群id。

说明:您可在云产品资源列表中查看k8s集群id。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-canary
  labels:
    app: my-app
  annotations:
    # Enable canary and send traffic with headder x-app-canary to version 2
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: "x-app-canary"
    nginx.ingress.kubernetes.io/canary-by-header-value: "true"
spec:
  rules:
  - host: my-app.集群id.cn-shanghai.alicontainer.com
    http:
      paths:
      - backend:
          service:
            name: my-app-v2
            port:
              number: 80
        path: /
        pathType: Prefix
  1. ECS键退出编辑模式,输入:wq,然后回车保存并退出文件。
  2. 执行如下命令,部署Ingress资源。
kubectl apply -f ingress-v2-canary-header.yaml
  1. 执行如下命令,并将命令中的集群id修改为k8s集群id,进行测试。

说明:您可在云产品资源列表中查看k8s集群id。

curl my-app.集群id.cn-shanghai.alicontainer.com

返回结果如下,访问到Deployment V1应用。

  1. 执行如下命令,并将命令中的集群id修改为k8s集群id,设置新的header。

说明:您可在云产品资源列表中查看k8s集群id。

curl my-app.集群id.cn-shanghai.alicontainer.com -H "x-app-canary: true"

返回结果如下,访问到Deployment V2应用,表示已成功按照Header策略灰度到Deployment V2应用。

实验地址:https://developer.aliyun.com/adc/scenario/878989bf8cb4456597f38dc259e20c65

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
Kubernetes 应用服务中间件 API
【重磅推荐】告别Ingress NGINX后,我们的思考和建议
K8s社区宣布Ingress NGINX将于2026年3月正式退役:虽API仍受支持,但停止更新与安全修复。主因是高危漏洞频发(如CVE-2025-1974)、维护者严重不足及架构技术债沉重。推荐生产环境平滑迁移至阿里云ALB Ingress——免运维、高SLA、兼容NGINX注解,并迈向Gateway API标准化未来
738 2
|
Kubernetes Java 测试技术
ChaosBlade常见问题之在K8s环境下演练cpu满载报错如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
780 0
|
3月前
|
人工智能 IDE API
阿里云百炼Coding Plan 显示售罄抢不到怎么办?GLM-5等模型是全参数满血版的吗?
阿里云百炼Coding Plan提供GLM-5、Qwen3.5-Plus等**满血原版模型**(非量化阉割),仅计费方式不同。抢购建议直选Pro版+卡准每日9:30补货。若求稳,推荐直接使用百炼平台——开通即用、新用户赠100万Tokens,模型一致、按量付费更灵活。
|
弹性计算 Kubernetes Cloud Native
K8s 网关选型初判:Nginx 还是 Envoy?
本文将从性能和成本、可靠性、安全性 3 方面,对两大开源实现进行比对,希望对正在做 K8s 网关选型的企业有所借鉴。
K8s 网关选型初判:Nginx 还是 Envoy?
|
4月前
|
人工智能 机器人 Linux
2026年OpenClaw(Clawdbot)Linux部署+飞书对接保姆级指南
在AI智能体深度融入工作流的2026年,OpenClaw(原Clawdbot、Moltbot)凭借开源特性、本地部署的数据隐私优势,成为个人与企业打造专属AI助手的优选工具。它不仅支持执行系统命令、管理文件、编写代码等核心功能,更可无缝对接飞书、Telegram等主流平台,实现7×24小时在线响应。本文基于Linux系统环境,详细拆解OpenClaw手动部署全流程、飞书机器人深度对接步骤,包含可直接复制的代码命令、避坑技巧及常见问题解决方案,同时补充阿里云一键部署简化步骤,确保零基础用户也能快速搭建专属AI助手,全程不改变原意,不含无关平台信息。
4157 2
|
8月前
|
存储 缓存 数据处理
71_数据版本控制:Git与DVC在LLM开发中的最佳实践
在2025年的大模型(LLM)开发实践中,数据和模型的版本控制已成为确保项目可重复性和团队协作效率的关键环节。与传统软件开发不同,LLM项目面临着独特的数据版本控制挑战:
892 0
|
10月前
|
人工智能 运维 数据可视化
2025年中国十大低代码开发平台(最新版)
在数字经济加速发展的背景下,低代码开发平台正重塑企业软件开发模式。IDC报告显示,中国低代码市场年复合增长率达35.8%。本文从技术能力、行业覆盖、生态建设与客户案例四大维度,解析2025年度主流低代码平台,涵盖普元、阿里云宜搭、腾讯微搭、用友YonBuilder等十大平台,助力企业选型布局数字化未来。
1842 7
|
小程序 编译器 数据安全/隐私保护
小白保姆级教程:微信公众号开发,从0到1
【8月更文挑战第8天】小白保姆级教程:微信公众号开发,从0到1
4890 3
小白保姆级教程:微信公众号开发,从0到1
|
Kubernetes 监控 Java
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
4285 1
|
消息中间件 安全 Java
SpringBoot和SpringCloud版本对应
SpringBoot和SpringCloud版本对应
5760 0