在Kubernetes中,使用单个Service和多个Deployment来实现灰度发布的一种常见方法是利用标签(Labels)和选择器(Selectors)来控制哪些Pods接收来自Service的流量。以下是一个简化的示例,展示了如何使用YAML文件来配置灰度发布。

首先,你需要定义两个Deployment对象,分别代表应用的旧版本和新版本。每个Deployment都应该有自己的标签,以便能够区分它们。然后,你可以定义一个Service对象,该对象的选择器最初指向旧版本的Pods。在进行灰度发布时,你可以逐步更新Service的选择器或Pod的标签,以便将流量重定向到新版本的Pods。

然而,直接修改Service的选择器并不是一种推荐的做法,因为它会导致服务中断。相反,你可以使用更高级的资源,如Ingress或服务网格(如Istio),来实现更精细的流量控制。但在这里,为了简化示例,我们将使用标签和Deployment的滚动更新策略来模拟灰度发布过程。

以下是YAML文件的示例:

# 旧版本的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-old
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: old
template:
metadata:
labels:
app: myapp
version: old
spec:
containers:
- name: myapp-container
image: myapp:old-version # 旧版本的镜像
ports:
- containerPort: 8080 # 新版本的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-new
spec:
replicas: 0 # 初始时没有副本,将在灰度发布过程中逐渐增加
selector:
matchLabels:
app: myapp
version: new
template:
metadata:
labels:
app: myapp
version: new
spec:
containers:
- name: myapp-container
image: myapp:new-version # 新版本的镜像
ports:
- containerPort: 8080 # Service定义,初始时指向旧版本
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 8080

在这个配置中,app-old是旧版本的Deploymentapp-new是新版本的Deployment。注意,新版本的replicas被设置为0,意味着在开始时没有Pod运行新版本的应用。myapp-service是一个Service,它的选择器当前匹配旧版本的Pods(通过app: myapp标签,但在这个例子中,它实际上也会匹配新版本的Pods,因为新版本的Pods也有app: myapp标签。为了避免这种情况,你应该使用更具体的标签,比如上面的version: old)。

要进行灰度发布,你可以采取以下步骤:

  1. 部署上面的YAML文件。
  2. 逐步增加新版本Deploymentreplicas数量,同时可能减少旧版本的replicas数量,以保持总的Pod数量不变。
  3. 为了将流量路由到新版本的Pods,你可能需要更新Service的选择器或引入更高级的流量分割机制(如Ingress或Istio)。但正如前面提到的,直接修改Service的选择器会导致服务中断。因此,更常见的做法是使用Ingress或Istio来控制流量。

请注意,上面的示例并不是一个真正的灰度发布实现,因为它没有展示如何精细地控制流量。在实际场景中,你应该考虑使用Ingress资源或Istio等服务网格来实现更复杂的流量分割和路由规则。这些工具允许你基于权重、HTTP头、Cookie等条件将流量路由到不同的版本。

使用Deployment和Service实现简单的灰度发布的更多相关文章

  1. 基于nginx+lua简单的灰度发布系统

    upstream.conf upstream grey_1 { keepalive 1000; server localhost:8020; } upstream grey_2 { keepalive ...

  2. 使用Nginx实现灰度发布

    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式.AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B ...

  3. 使用Nginx实现灰度发布(转)

    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式.AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B ...

  4. 手把手教你在 TKE 集群中实现简单的蓝绿发布和灰度发布

    概述 如何在腾讯云 Kubernetes 集群实现蓝绿发布和灰度发布?通常要向集群额外部署其它开源工具来实现,比如 Nginx Ingress,Traefik 等,或者让业务上 Service Mes ...

  5. k8s定义Deployment,和service

    定义一个Deployment和service做个简单的笔记 有时候我们需要开放Pod的多个端口,比如nginx的80和443端口,那如何定义Deployment文件呢,定义单个端口如下 apiVers ...

  6. Web Service 的创建简单编码、发布和部署

    最近,老大准备将已有的C/S架构项目中的通信部分做成通用,需要将其支持WebService为以后项目向着B/S架构升级做好铺垫,为此身为屌丝的我去各种百度WebService是个什么卵玩意,然后逐渐搭 ...

  7. 灰度发布:灰度很简单,发布很复杂&灰度发布(灰度法则)的6点认识

    什么是灰度发布,其要点有哪些? 最近跟几个聊的来的同行来了一次说聚就聚的晚餐,聊了一下最近的工作情况如何以及未来规划等等,酒足饭饱后我们聊了一个话题“灰度发布”. 因为笔者所负责的产品还没有达到他们产 ...

  8. 【转帖】k8s之Deployment与service

    k8s之Deployment与service 2018年08月05日 18:11:00 xiyou_pen/pen 阅读数 5894   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...

  9. Istio 太复杂?KubeSphere基于Ingress-Nginx实现灰度发布

    在 Bookinfo 微服务的灰度发布示例 中,KubeSphere 基于 Istio 对 Bookinfo 微服务示例应用实现了灰度发布.有用户表示自己的项目还没有上 Istio,要如何实现灰度发布 ...

  10. CODING DevOps + Nginx-ingress 实现自动化灰度发布

    作者:王炜,CODING DevOps 后端开发工程师,拥有多年研发经验,云原生.DevOps.Kubernetes 资深爱好者,Servicemesher 服务网格中文社区成员.获得 Kuberne ...

随机推荐

  1. 算法与数据结构-07-手写类HashTable

    package day05; import java.sql.SQLOutput; import java.util.Scanner; /** * 哈希表代码实现 */ public class Ha ...

  2. 《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(上)

    第 3 章 ASP.NET Core 核心特性 3.1 启动与宿主 ASP.NET Core 应用程序启动时,它首先会配置并运行其宿主,宿主主要用来启动.初始化应用程序,并管理其生命周期 ASP.NE ...

  3. MutationObserver对象

    MutationObserver对象 MutationObserver (W3C DOM4)对象提供了监视对DOM树所做更改的能力,其被设计为旧的Mutation Events功能的替代品(该功能是D ...

  4. 虚拟化技术VirtualBox和vagrant基本使用

    虚拟化技术VirtualBox和vagrant基本使用 1.首先安装VirtualBox 可以去官网下载 https://www.virtualbox.org/ 2.安装vagrant(根据自己电脑得 ...

  5. SpringBoot+Shiro+LayUI权限管理系统项目-7.实现用户管理

    1.说明 只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.功能展示 包括用户增删改查和分配角色. 3.业务模型 @Data @EqualsAndHashCode(callSuper ...

  6. Modbus协议入门

    1.Modbus协议是不是开源的,免费的? 标准.开放,用户可以免费.放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权. 2.怎么传输,有线还是无线? 既可以有线传输如双绞线.光纤, ...

  7. 机器学习策略篇:详解单一数字评估指标(Single number evaluation metric)

    单一数字评估指标 无论是调整超参数,或者是尝试不同的学习算法,或者在搭建机器学习系统时尝试不同手段,会发现,如果有一个单实数评估指标,进展会快得多,它可以快速告诉,新尝试的手段比之前的手段好还是差.所 ...

  8. macOS Monterey 与以下电脑兼容下载操作流程解析

    有时在开发iOS应用时我们时常遇到各种情况,比如手机升级了Xcode不支持这时候需要安装xcode但是xcode需要依奈相应系统本人小编整理了这种情况无法解决问题. 首相打开苹果标志进入到下面界面 进 ...

  9. 【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter

    问题描述 部署在Azure上的VM资源,偶尔CPU飙高,但是发现的时候已经恢复,无法判断当时High CPU原因. 在Windows系统中,有什么方式能记录CPU被进程占用情况,查找出当时是排名前列的 ...

  10. 固态硬盘使用f2fs作为根分区安装linux

    目录 前言 碰到的问题 对策 我的实际操作步骤 0.警告 1. 准备 2. 分区 3. 使用网络安装debian10 4. 备份根分区 5. 修改固态硬盘linux根分区为f2fs 6.恢复备份 7. ...