当前位置: 首页 > news >正文

【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

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • #70结构体案例1(导师,学生,成绩)
  • 交通预测数据文件梳理:METR-LA
  • Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED
  • 卷积神经网络(CNN)简单原理与简单代码实现
  • 人工智能自动驾驶三维车道线检测—PersFormer模型代码详解
  • 【算法模板】图论:Tarjan算法求割边割点
  • datawind可视化查询-计数count(xxx)函数
  • Brave浏览器:开启隐私保护新时代
  • 按照指定格式打印pprint()
  • 自动化测试面试题
  • LeetCode459 重复的子字符串
  • 按xls标签替换docx及xls内容
  • docker-compose笔记
  • Scrapy入门篇
  • 小米账号移除工具箱 | 移除MXTGT工具箱
  • 【剑指offer】让抽象问题具体化
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JS+CSS实现数字滚动
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • mysql_config not found
  • passportjs 源码分析
  • python_bomb----数据类型总结
  • SpiderData 2019年2月25日 DApp数据排行榜
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 前端面试之CSS3新特性
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何利用MongoDB打造TOP榜小程序
  • 深度学习中的信息论知识详解
  • 使用common-codec进行md5加密
  • 我这样减少了26.5M Java内存!
  • 用mpvue开发微信小程序
  • AI算硅基生命吗,为什么?
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​数据结构之初始二叉树(3)
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #70结构体案例1(导师,学生,成绩)
  • #APPINVENTOR学习记录
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $jQuery 重写Alert样式方法
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (ibm)Java 语言的 XPath API
  • (八)c52学习之旅-中断实验
  • (回溯) LeetCode 40. 组合总和II
  • (六)vue-router+UI组件库
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (一)SvelteKit教程:hello world
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • .NET : 在VS2008中计算代码度量值
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Framework 3.5安装教程