9.3.k8s的控制器资源(deployment部署控制器)

news/2024/5/20 1:25:33

目录

一、deployment部署控制器概念

二、deployment资源的清单编写

三、小结

功能

使用场景

原理

四、deployment实现升级和回滚

1.编辑deployment资源清单(v1版本) 

2.创建service资源用于访问

​编辑

3.修改deploy清单中pod镜像版本为V2

4.小结

5.回滚

五、deployment的升级策略

 六、蓝绿发布

1.概念

2.准备“蓝环境”版本v1

3.编辑svc资源

4.蓝环境v1准备完毕,访问测试

5.准备“绿环境”v2

6.切换svc资源的标签,让其指向新版本

7.访问测试 

 ​编辑

七、灰度发布(金丝雀发布)


一、deployment部署控制器概念

  1. 在学习rc和rs控制器资源时,这两个资源都是控制pod的副本数量的,但是,他们两个有个缺点,就是在部署新版本pod或者回滚代码的时候,需要先apply资源清单,然后再删除现有pod,通过资源控制,重新拉取新的pod来实现回滚或者迭代升级;
  2. deployments资源,实际上就是用来专门部署业务代码的控制器,专门用于企业业务代码的升级和回滚;
  3. deployment部署控制器,实际上控制的是rs副本控制器,如果说rs副本控制器是控制pod的副本数量的,那么deployment就是专门控制rs控制器资源的;

先看一下Deployment、RS、Pod它们三者之间的关系: 

二、deployment资源的清单编写

deployment资源与replicaset资源的清单编写方式没什么区别,只是kind的类型换成deployment就可以了,就实现了资源清单的编辑;

[root@k8s1 deploy]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dm01
spec:#控制pod的副本数量replicas: 3#指定标签选择器,基于标签匹配podselector:#声明基于标签匹配pod;matchLabels:k8s: oslee#pod的编写,定义pod模板;template:metadata:name: pod01labels:k8s: osleespec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v1ports:- containerPort: 80[root@k8s1 deploy]# kubectl apply -f deploy.yaml 
deployment.apps/dm01 created

三、小结

先以查看标签的方式,查看一下pod,可以看到下图中,多出来一个自动生成的标签;

deployment:是用来部署服务的一个资源,是常见的,企业中经常用的资源控制器;

功能

  1. 管理rs资源,通过rs资源管理pod;
  2. 它具有上线部署、副本设置、滚动升级、回滚等功能;
  3. 它也提供了声明式更新,可以使用apply命令进行更新镜像版本之类的能力

使用场景

企业部署迭代应用

原理

通过“标签”管理,实现rs资源的控制,它会在自动创建rs的过程中给rs自动生成一个特有的标签(专属于deployment),当apply更新清单的时候,它会通过标签选定是使用历史的rs还是重新创建rs;

四、deployment实现升级和回滚

1.编辑deployment资源清单(v1版本) 

上面已创建好

2.创建service资源用于访问

[root@k8s1 deploy]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata:name: svc01
spec:type: NodePortselector:k8s: osleeclusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 31000[root@k8s1 deploy]# kubectl apply -f svc.yaml 
service/svc01 created

3.修改deploy清单中pod镜像版本为V2

[root@k8s1 deploy]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dm01
spec:#控制pod的副本数量replicas: 3#指定标签选择器,基于标签匹配podselector:#声明基于标签匹配pod;matchLabels:k8s: oslee#pod的编写,定义pod模板;template:metadata:name: pod01labels:k8s: osleespec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v2ports:- containerPort: 80[root@k8s1 deploy]# kubectl apply -f deploy.yaml 
deployment.apps/dm01 configured

4.小结

  1. deployment,不需要删除原有的pod,只需要apply重新更新一下资源清单,即可实现产品迭代,同比与rc和rs资源,优势明显;
  2. deployment资源,在apply升级后,是又重新创建了rs资源,也就是再升级的过程中,有两个rs资源;
  3. 每修改一次镜像,就创建一个rs资源,我们选择使用哪个镜像,就会将这个镜像创建相应的pod副本数,不用的,就逐渐归零;

5.回滚

# 查看滚动更新状态
kubectl rollout status deployment dm01#查看历史版本
kubectl rollout history deployment dm01#查看指定版本的信息
kubectl rollout history deployment/dm01 --revision=2#回滚到历史版本
kubectl rollout undo deployment/dm01 --to-revision=2

五、deployment的升级策略

什么是升级策略?就是升级时过程的控制策略;

设置升级的策略类型,类型有两种:

  • 第一种:Recreate:先停止所有pod,再批量创建新的pod;生产环境不建议使用,因为用户在此时会访问不到服务;
  • 第二种:RollingUpdate:滚动更新,即实现部分更新,逐渐替换掉原有的pod,也就是默认的策略;
[root@k8s1 deploy]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dm01
spec:#声明设置升级策略strategy:#设置升级的策略类型,类型有两种;#第一种:Recreate:先停止所有pod,再批量创建新的pod;生产环境不建议使用,因为用户在此时会访问不到服务;#第二种:RollingUpdate:滚动更新,即实现部分更新,逐渐替换掉原有的pod,也就是默认的策略;type: RollingUpdate#如果设置了滚动更新RollingUpdate类型,还需要设置更新的策略;rollingUpdate:#在原有pod副本数量的基础上,多启动pod的数量(也就是说,更新过程中同时可以存在2+副本数个pod,新旧版本一起)maxSurge: 2#在升级的过程中最大不可访问的pod的数量(也就是说,pod副本数-1的数量可以被访问)maxUnavailable: 1replicas: 7selector:matchLabels:k8s: osleetemplate:metadata:name: pod01labels:k8s: osleespec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v1ports:- containerPort: 80[root@k8s1 deploy]# kubectl apply -f deploy.yaml 
deployment.apps/dm01 created
# 监听变化
[root@k8s1 ~]# watch -n 2 kubectl get all

 六、蓝绿发布

1.概念

蓝绿发布,就是准备两套代码,不需要停止老版本(不影响上一个版本的用户访问),而是在另一套环境中部署新版本然后进行测试,测试通过后将用户流量切换到新的版本。

  • 优点:业务没有终端,升级风险相对较小;
  • 缺点:消耗i资源

实现方式:

  1. 部署当前版本代码
  2. 部署svc资源
  3. 部署新版本使用新的deployment名称,新的标签
  4. 切换svc标签到新的pod中实现业务切换;

2.准备“蓝环境”版本v1

[root@k8s1 deploy]# cat lan.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dm01
spec:#控制pod的副本数量replicas: 3#指定标签选择器,基于标签匹配podselector:#声明基于标签匹配pod;matchLabels:k8s: oslee-lan#pod的编写,定义pod模板;template:metadata:name: pod01labels:k8s: oslee-lanspec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v1ports:- containerPort: 80[root@k8s1 deploy]# kubectl apply -f lan.yaml 
deployment.apps/dm01 created

3.编辑svc资源

[root@k8s1 deploy]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata:name: svc01
spec:type: NodePortselector:k8s: oslee-lanclusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 31000[root@k8s1 deploy]# kubectl apply -f svc.yaml 
service/svc01 created

4.蓝环境v1准备完毕,访问测试

5.准备“绿环境”v2

[root@k8s1 deploy]# cat lv.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dm02
spec:#控制pod的副本数量replicas: 3#指定标签选择器,基于标签匹配podselector:#声明基于标签匹配pod;matchLabels:k8s: oslee-lv#pod的编写,定义pod模板;template:metadata:name: pod01labels:k8s: oslee-lvspec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v2ports:- containerPort: 80[root@k8s1 deploy]# kubectl apply -f lv.yaml 
deployment.apps/dm02 created

6.切换svc资源的标签,让其指向新版本

[root@k8s1 deploy]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata:name: svc01
spec:type: NodePortselector:# 将lan修改为lvk8s: oslee-lvclusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 31000[root@k8s1 deploy]# kubectl apply -f svc.yaml 
service/svc01 configured

7.访问测试 

 

七、灰度发布(金丝雀发布)

灰度发布就是让新旧版本,一起上线,旧版本和新版本让用户随机访问到,然后没有业务问题之后,逐渐调高新版本副本数量,逐渐调低旧版本副本数量,从而达到灰度发布;

实现的机制:

  1. 部署老版本,使用多副本(模拟正式环境)
  2. 部署svc,匹配标签
  3. 部署新版本,标签与老版本标签一致(让svc能够访问到,副本从0开始)
  4. 灰度版本测试没有问题,将恢复版本的副本数量,逐渐调高增加为生产数量;
  5. 将旧版本逐渐调低至0,此时流量全部跑到了新版本上;

===============================至此,已成艺术==============================


http://www.mrgr.cn/p/15157237

相关文章

如何分析慢SQL语句

如果一条sql执行很慢的话,通常会使用MySQL自动的执行计划explain来去查看这条sql的执行情况,比如在这里面可以通过key和key_len检查是否命中了索引,如果本身已经添加了索引,也可以判断索引是否有失效的情况,第二个,可以通过type字段查看sql是否有进一步的优化空间,是否存…

sonarqube(一)安装

一、前置条件: 安装工具如下:JDK MySql服务器 SonarQube SonarScanner二、下载和安装 1.jdk和mysql和sonar有版本对应的要求,sonar7.5对应jdk1.8和mysql>=5.6,<8.0 下载地址:http://www.sonarqube.org/downloads/ 下载完成后解压后点击StartSonar.bat启动即可。 或者…

shell翻译官

shell脚本概述 shell的作用&#xff1a; 完成自动化运维工作&#xff0c;批量完成重复操作&#xff0c;结合crontab完成周期性任务 shell编程规范&#xff1a; Shell脚本的编写 vim XXX.sh 1.申明解释器 #!/bin/bash #!/bin/python 2.编写注释信息 要以 # 号开…

Verilog中4位数值比较器电路

某4位数值比较器的功能表如下。 请用Verilog语言采用门级描述方式&#xff0c;实现此4位数值比较器 参考代码如下&#xff1a; &#xff08;CSDN代码块不支持Verilog&#xff0c;代码复制到notepad编辑器中&#xff0c;语言选择Verilog&#xff0c;看得更清楚&#xff09; t…

项目计划书(Word原件)

项目开发计划包括项目描述、项目组织、成本预算、人力资源估算、设备资源计划、沟通计划、采购计划、风险计划、项目过程定义及项目的进度安排和里程碑、质量计划、数据管理计划、度量和分析计划、监控计划和培训计划等。 软件资料清单列表部分文档&#xff1a; 工作安排任务书…

《Python编程从入门到实践》day21

# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构&#xff1a;方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…

java的三种编译(JAVAC,JIT,AOT)

1.javac把java代码编译成字节码(中间代码),然后由java虚拟机解释执行 2.jit(运行时编译)把java代码直接编译成机器码,然后由java虚拟机直接运行(缓存)。有对客户端的C1和对服务器端的C2编译器 缓存 代码优化 逃逸分析,是否超出范围。对不同逃逸状态做优化 全局逃逸 对象超…

怎么设置一天多个时间点的闹钟提醒?

在日常生活中,我们经常需要在一天的不同时间点完成特定的任务,如定时喝水、定时查看后台数据、定时吃药等。这时候,如果能有一款软件,可以在一条日程里轻松设置多个时间点的闹钟提醒,那将大大提高我们的工作效率和生活品质。 那么怎么设置一天多个时间点的闹钟提醒呢?定时…

sql优化思路

sql的优化经验 这里解释一下SQL语句的优化的原理 1.指明字段名称&#xff0c;可以尽量使用覆盖索引&#xff0c;避免回表查询&#xff0c;因此可以提高效率 2.字面意思&#xff0c;无需过多赘述。索引就是为了提高查询效率的。 3.图中两条sql直接可以使用union all 或者 uni…

智慧工地,筑牢安全防线:严防塔吊相撞,守护施工安全之巅!

塔吊相撞的事故是一个严重的施工安全问题&#xff0c;而智慧工地则是一种利用现代科技手段提高施工安全性的解决方案。 为了避免类似事故的发生&#xff0c;智慧工地可以采取以下措施&#xff1a; 一、建立全面的监控系统 智慧工地可以建立完善的监控系统&#xff0c;通过安装…

GreatSQL的sp中添加新的sp_instr引入的bug解析

GreatSQL的sp中添加新的sp_instr引入的bug解析 一、问题发现 在一次开发中用到的sp需要添加新的sp_instr以满足需求,但是添加了数个sp_instr以后发现执行新的sp会发生core。注:本次使用的GreatSQL 8.0.32-251、sp_head.cc的init_sp_psi_keys()代码里面添加10个新的sp_instr:…

使用脚本一键部署项目的示例(脚本会创建syetemctl的系统服务)

文章目录 说明使用脚本一键部署本项目开启/停止服务开启/关闭开机自动运行更新项目 参考地址&#xff1a;https://github.com/Evil0ctal/Douyin_TikTok_Download_API?tabreadme-ov-file 说明 后续相关项目可以使用这种方式创建脚本&#xff0c;脚本均放置在项目根目录下的bas…

对于习惯使用ftp传输的企业,如何寻找最佳的替代方案?

FTP协议广泛应用各行业的文件传输场景中,对于很多企业而言,由于FTP传输应用获取门槛低、使用普遍,因此,有较为稳定的FTP使用习惯,但即便如此,也不得不面对,FTP应用存在着严重缺陷: 传输效率问题:FTP协议作为最早的互联网文件传输协议,虽然解决了传输协议有无的问题,…

Keil编译后的Code,RO,RW,ZI等相关

在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息:以前一直好奇这几个参数和实际使用的STM32芯片中Flash和SRAM的对应关系,于是上网搜了一圈,做如下总结:这些参数的单位是Byte 图中几个参数分别代表 Code:代码的大小 RO:常量所占空间(加…

探索1688、淘宝、京东搜索商品聚合API接口:一站式电商搜索解决方案

随着电商行业的不断发展&#xff0c;电商平台的数量和商品种类都在快速增长。商家和开发者在运营过程中&#xff0c;需要经常进行跨平台的商品搜索和数据分析。然而&#xff0c;由于各个电商平台的数据接口存在差异&#xff0c;直接对接多个平台不仅效率低下&#xff0c;而且维…

docker搭建代码审计平台sonarqube

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、sonarqube流程四、快速搭建sonarqube五、sonarqube scanner的安装和使用 一、代码审计关注的质量指标 代码坏味道 代码规范技术债评估 bug和漏洞代码重复度单测与集成 测试用例数量覆盖率…

定时任务的几种实现方式

定时任务实现的几种方式&#xff1a; 1、JDK自带 &#xff08;1&#xff09;Timer&#xff1a;这是java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。…

使用 Kubeadm 搭建个公网 k8s 集群(单控制平面集群)

前言 YY&#xff1a;国庆的时候趁着阿里云和腾讯云的轻量级服务器做促销一不小心剁了个手&#x1f60e;&#x1f622;&#xff0c;2 Cores&#xff0c;4G RAM 还是阔以的&#xff0c;既然买了&#xff0c;那不能不用呀&#x1f6a9;&#xff0c;之前一直想着搭建个 k8s 集群玩…

团队项目第一阶段评分及其点评

1组:调用对话接口,但内容太少,页面不美观 2组:页面不行,作品阶段质量太差 3组:内容太少 4组:页面整体可以,内容可以 5组:页面整体美观,内容较好 6组:内容较多,质量可以 7组:质量较好 8组:内容太少,质量差 9组:内容可以,质量较好 10组:内容多,质量好 11组:创…

【iOS逆向与安全】网上gw如何自动登录与签到SM2,SM3,SM4算法加解密

1.下载 app 2.frida 调试 3.抓包查看接口 4.分析加密数据 5.易语言编写代码 1 .开始下载 下载好发现有越狱检测&#xff0c;检测点为&#xff1a; -[AppDelegate isJailBreak]; 于是编写插件xm代码 : %hook AppDelegate- (void)isJailBreak{NSLog("AppDelegate is…