【Kubernetes】应用的部署(一):金丝雀部署

应用的部署(一):金丝雀部署

在项目迭代开发过程中,经常需要对应用进行上线部署。上线部署策略主要有 3 种:金丝雀部署蓝绿部署滚动部署

金丝雀部署 也被叫作 灰度部署。金丝雀部署过程:先让一部分用户继续使用旧版本,而另一部分用户开始使用新版本;如果新版本没有发生问题,则逐步扩大新版本的使用范围直到使用旧版本的用户都使用新版本。

在这里插入图片描述
通过使用金丝雀部署,可以最大限度地保证系统的整体稳定性,并能够在部署的早期就发现和解决问题。下面通过示例来演示金丝雀部署升级。

创建 canary-demo-v1.yaml 文件,并在其中输入以下内容:

apiVersion: v1
kind: Service
metadata:name: canary-demolabels:app: canary-demo
spec:type: NodePortports:- name: httpport: 80targetPort: httpselector:app: canary-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:name: canary-demo-v1labels:app: canary-demo
spec:replicas: 10selector:matchLabels:app: canary-demoversion: v1.0.0template:metadata:labels:app: canary-demoversion: v1.0.0spec:containers:- name: canary-demoimage: collenzhao/k8s-deployment-strategiesports:- name: httpcontainerPort: 8080env:- name: VERSIONvalue: v1.0.0

使用以下命令应用 canary-demo-v1.yaml 文件。

kubectl apply -f canary-demo-v1.yaml

获取 Service(服务)的信息。

kubectl get service canary-demo

输出的信息如下:

在这里插入图片描述

通过 Service(服务)访问 Deployment。

curl 10.106.132.94:80

输出的信息如下:

在这里插入图片描述

可以看出,目前应用的版本是 v1.0.0

使用金丝雀部署来升级应用,创建 canary-demo-v2.yaml 文件并在其中输入以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:name: canary-demo-v2labels:app: canary-demo
spec:replicas: 1selector:matchLabels:app: canary-demoversion: v2.0.0template:metadata:labels:app: canary-demoversion: v2.0.0spec:containers:- name: canary-demoimage: collenzhao/k8s-deployment-strategiesports:- name: httpcontainerPort: 8080env:- name: VERSIONvalue: v2.0.0

开启两个命令行窗口,使用 watch 命令来分别监控 Deployment 和 Pod 的变化。

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

执行应用的升级。

kubectl apply -f canary-demo-v2.yaml

观察 Deployment 和 Pod 的变化。

在这里插入图片描述
在这里插入图片描述

可以看到,v1.0.0 版本共有 10 10 10 个实例,而 v2.0.0 版本只有 1 1 1 个实例。

执行以下脚本请求应用。

for a in {1..11}dosleep 1;curl "10.106.132.94:80";done

在这里插入图片描述

🚀 for 循环一共循环了 11 11 11 次,其中, 10 10 10 次访问的是 v1.0.0 版本;只有 1 1 1 次访问的是 v2.0.0 版本。

v2.0.0 版本的实例扩到 5 个,将 v1.0.0 版本的实例缩到 5 个。

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

观察 Deployment 的变化。

kubectl get --watch deployment

在这里插入图片描述

重新执行以下脚本。

for a in {1..10}dosleep 1;curl "10.106.132.94:80";done

输出的信息如下:

在这里插入图片描述

停止 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 循环,则所有请求的返回信息如下。

在这里插入图片描述

清理测试的数据。

kubectl delete all -l app=canary-demo

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392454.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

letcode 分类练习 哈希表 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

letcode 分类练习 哈希表 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 242.有效的字母异位词349.两个数组的交集202.快乐数1.两数之和 242.有效的字母异位词 分别定义两个字母哈希表就可以了 class Solution { public:bool isAnagram(string s, strin…

搭建pxe网络安装环境

实验目的: 搭建pxe网络安装环境实现服务器自动部署 实验原理: PXE 网络安装环境实现服务器自动部署的实验原理为: 待安装的服务器(PXE 客户端)开机时,BIOS 设置从网络启动,向网络发送请求。…

科普文:JUC系列之ForkJoinPool源码解读ForkJoinWorkerThread

科普文:JUC系列之ForkJoinPool基本使用及原理解读-CSDN博客 科普文:JUC系列之ForkJoinPool源码解读概叙-CSDN博客 科普文:JUC系列之ForkJoinPool源码解读WorkQueue-CSDN博客 科普文:JUC系列之ForkJoinPool源码解读ForkJoinTask…

【第13章】Spring Cloud之Gateway全局异常处理

文章目录 前言一、异常处理1. 响应实体类2. 异常处理类 二、单元测试1. 无可用路由2. 服务不可用 总结 前言 网关作为我们对外服务的入口起着至关重要的作用,我们必须保证网关服务的稳定性,下面来为网关服务增加异常处理机制。 一、异常处理 1. 响应实…

K个一组翻转链表(LeetCode)

题目 给你链表的头节点 ,每 个节点一组进行翻转,请你返回修改后的链表。 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值&…

UE GAS学习

【Unreal】虚幻GAS系统快速入门-CSDN博客 GameplayTags FGameplayTags是一种层级标签,如Parent.Child.GrandChild。 通过GameplayTagManager进行注册。替代了原来的Bool,或Enum的结构,可以在玩法设计中更高效地标记对象的行为或状态。 Gamep…

牛客周赛 Round 54 (A~E)

#牛客周赛 Round 54 (A~E) 前言: 以后会定时更新很多比赛的题解 希望借此让自己坚持赛后补题 要不然写完就结束 自己水平没有一点提高 本人很菜所以不会更新 太难的题 加油!!!1. ​清楚姐姐的糖葫芦…

C语言之递归函数

文章目录 🍊自我介绍🍊递归函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好,我是小珑也要变强(也是小珑&…

C#学习笔记12:SYN6288语音模块_Winform上位机控制软件

今日尝试使用C# Winform写一个上位机软件控制 SYN6288语音模块 这里不讲什么基本原理(或者讲的比较略简),直接讲实现了就...... 文章提供测试代码讲解、测试效果图、整体测试工程下载 目录 控件的摆放: SYN6288介绍: 代码编程: 对16进制发送…

VUE.js

目录 一、什么是VUE.js 二、VUE.js优点 三、VUE安装 四、第一个VUE程序 五、Vue指令 v-text v-html v-on v-model v-show v-if v-bind v-for 六、VUE实例生命周期 七、Vue-CLI搭建项目 主要的功能 需要的环境 八、组件路由 搭建步骤: 1. 创建 router 目录 …

ctfhub 命令注入

知识点 1.常见的拼接符 1、A ; B 先执行A,再执行B 2、A & B 简单的拼接 3、A | B 显示B的执行结果 4、A&&B A执行成功之后才会执行B 5、A || B A执行失败之后才会执行B , 在特殊情况下可代替空格 2.常见的命令 &#…

CentOS7 VMware虚拟机基于NAT配置网络IP

目录 前言 VMnet8 虚拟网络编辑 ens33 ping 防火墙 前言 平时学习时一直需要用到Linux服务器,一般都是在Windows上安装VMware来创建一个虚拟机。创建的虚拟机需要配置网络才能够访问外网,可以通过以下两种方式来配置虚拟机网络 桥接模式NAT模式&…

「测试线排查的一些经验-上篇」 后端工程师

文章目录 端口占用脚本失灵线上部署项目结构模版配置文件生效 一般产品研发过程所使用的环境可分为: 研发环境-dev测试环境-test生产环境-prod 软件开发中,完整测试环境包括:UT、IT、ST、UAT UT Unit Test 单元测试 IT System Integration …

MoE-LLaVA: Mixture of Experts for Large Vision-Language Models

发表时间:6 Jul 2024 论文链接:https://arxiv.org/pdf/2401.15947 作者单位:Peking University Motivation:最近的进展表明,扩展大型视觉语言模型 (LVLM) 有效地提高了下游任务的性能。然而,现有的缩放方…

深度学习笔记(神经网络+VGG+ResNet)

深度学习 主要参考博客常用英语单词 概念应用神经网络基础神经网络基本结构 超参数超参数是什么常用超参数超参数搜索过程常用超参数调优办法(通过问题复杂度和计算资源选择) 激活函数介绍为什么要使用激活函数推荐博客 sigmoid激活函数(使用…

第R1周:RNN-心脏病预测

本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊 要求: 1.本地读取并加载数据。 2.了解循环神经网络(RNN)的构建过程 3.测试集accuracy到达87% 拔高: 1.测试集accuracy到达89% 我的环境&a…

[windows10]win10永久禁用系统自动更新操作方法

WinR打开运行 输入regedit打开注册表 点击确定打开注册表 按照如下路径找到UX 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 在空白处点击鼠标右键,新建选择DWORD,然后重命名为FlightSettingsMaxPauseDays 双击FlightSet…

Vue项目学习(项目的开发流程)(2)

1、vue项目的默认首页和入口文件 2、两种书写的方式是表达一样的意思——>el:指定当前Vue实例挂载到哪个区域里 3、如果属性值和属性名一致,冒号和后面可以省略不写 (所以有两种写法) 4、以".vue"文件结尾的文件在项…

Linux操作系统之进程信号

进程信号 一、信号1、概念2、系统定义的信号列表3、常见的信号处理方式 二、产生信号的方式1、终端按键(1)组合键(2)示例代码(3)运行结果 2、调用系统函数(1)kill命令(2&…

CRC16循环冗余校验

代码&#xff1a; #include<stdio.h> #include <stdint.h>#define uchar unsigned char #define uint unsigned int static const uint8_t auchCRCHi[] { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x0…