k8s 进阶实战笔记 | 应用的蓝绿、金丝雀发布笔记

2024-01-30 15:52

本文主要是介绍k8s 进阶实战笔记 | 应用的蓝绿、金丝雀发布笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 应用的蓝绿、金丝雀发布笔记
    • 应用升级策略
    • 停机升级
    • 滚动更新
    • 蓝绿发布
    • 金丝雀发布

应用的蓝绿、金丝雀发布笔记

应用升级策略

  • Deployment.spec.strategy 设置

  • Recreate:同时删除所有副本,停机升级策略

    • 不存在新老版本共存

    • 存在某个时间段服务不可用

    • 副本集一起Terminating,一起Pending,一起ContainerCreating,一起Running

  • RollingUpdate:默认滚动升级,不停机升级策略

    • 不存在某个时间段服务不可用
    • 切换过程,新老版本会共存
    • 滚动更新核心参数
      • maxUnavailable:滚动升级时允许的最大unavailable的pod数量,可以是整数或者百分比(默认25%),这个值越小,越能保证服务稳定,更新越平滑;
      • maxSurge:滚动升级时先启动的pod数量,可以是整数或者百分比(默认25%),这个值调的越大,副本更新速度越快;

停机升级

示例

---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginx-v1ports:- protocol: TCPport: 80targetPort: 80nodePort: 30179type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1namespace: defaultlabels:app: nginx-v1
spec:selector:matchLabels:app: nginx-v1replicas: 3strategy:type: Recreate  ## 需要显式指明停机升级策略,因为默认是滚动升级template:metadata:labels:app: nginx-v1spec:containers:- name: nginx-v1image: docker.m.daocloud.io/nginx:1.23.1imagePullPolicy: IfNotPresent

在这里插入图片描述

接下来我们修改一下镜像版本,进行停机更新升级

image: docker.m.daocloud.io/nginx

在这里插入图片描述

滚动更新

默认就是滚动更新策略

---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginx-v1ports:- protocol: TCPport: 80targetPort: 80nodePort: 30179type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1namespace: defaultlabels:app: nginx-v1
spec:selector:matchLabels:app: nginx-v1replicas: 3
#  strategy:
#    type: Recreate  ## 需要显式指明停机升级策略,因为默认是滚动升级template:metadata:labels:app: nginx-v1spec:containers:- name: nginx-v1image: docker.m.daocloud.io/nginx:1.23.1imagePullPolicy: IfNotPresent

在这里插入图片描述

  • 可以通过更改以下字段,来变更每次被嘎的数量和启动新的版本的数量
strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%	###最大被嘎的数量,越小,更新越平滑maxSurge: 25%		### 启动新的pod数量,越大,副本更新越快
  • 滚动更新:会有新旧版本同时存在的问题

蓝绿发布

发布原理

  • svc的selector选择器
  • v1版本和v2版本同时启动,然后通过修改svc一键切换
  • 无缝升级,无缝回退,不存在两个版本共存的现象
  • 生产环境推荐,只不过会增加资源开销

v1版本

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1namespace: defaultlabels:app: nginx-v1
spec:selector:matchLabels:app: nginx-v1replicas: 3template:metadata:labels:app: nginx-v1spec:containers:- name: nginx-v1image: docker.m.daocloud.io/nginx:1.23.1imagePullPolicy: IfNotPresent

v2版本

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v2namespace: defaultlabels:app: nginx-v2
spec:selector:matchLabels:app: nginx-v2replicas: 3template:metadata:labels:app: nginx-v2spec:containers:- name: nginx-v2image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

svc

---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginx-v1ports:- protocol: TCPport: 80targetPort: 80nodePort: 30179type: NodePort

当前访问情况

在这里插入图片描述

修改svc的selector信息为v2然后观察

spec:selector:app: nginx-v2
while true;do curl -sI 192.168.1.225:30179 | grep -E 'Server|HTTP';done

在这里插入图片描述

金丝雀发布

金丝雀发布就是先发一个新版应用,但是是一个小比例范围,也叫灰度测试,如结果灰度测试通过,就把其余的v1版本全部替换程v2版本。如果测试没通过,就直接回退

  • 新功能验证,适当的引流,适合金丝雀发布

v1

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1namespace: defaultlabels:app: nginx-v1
spec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: docker.m.daocloud.io/nginx:1.23.1imagePullPolicy: IfNotPresent

v2

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v2namespace: defaultlabels:app: nginx-v2
spec:selector:matchLabels:app: nginxreplicas: 1template:metadata:labels:app: nginxspec:containers:- name: nginximage: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

svc

---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80nodePort: 30179type: NodePort

在这里插入图片描述

灰度测试成功,我们逐渐将流量切入过去即可

### 修改副本数即可

在这里插入图片描述

在这里插入图片描述

这篇关于k8s 进阶实战笔记 | 应用的蓝绿、金丝雀发布笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/660753

相关文章

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模