Linux:kubernetes(k8s)Deployment的操作(13)

创建deployment

命令 

kubectl create deploy nginx-deploy --image=nginx:1.7.9

再去使用以下命令分别查询

ubectl get deploy
kubectl get replicaset
kubectl get pod

他是一个层层嵌套的一个关系

首先是创建了一个 deploy  里面包含着replicaset  replicaset里面含有一个pod


yaml文件 

我们刚刚通过命令去创建了一个peployment,我们可以直接通过,命令去获取他的yaml,直接利用上

kubectl get deploy nginx-deploy -o yaml

nginx-deploy是刚刚创建的deploy名称

会立马输出出来一段yaml配置文件这里的文件我们不全都要只取一部分

就是我截图的这一部分,下面还有,那些就不要了,再去创建一个yaml文件放进去,我这里的名字为nginx-deploy

下面这些是经过精简的yaml文件 

apiVersion: apps/v1 # deployment api版本
kind: Deployment    # 资源类型为deployment 
metadata:           # 元信息labels:           #标签app: nginx-deploy   # 具体的key:value配置形式name: nginx-deploy    # deployment的名字namespace: default    # 所在的命名空间
spec:replicas: 1   # 期望副本数revisionHistoryLimit: 10       # 进行回滚更新后,保留历史版本数selector:     # 选择器 , 用于找到匹配的rsmatchLabels:        # 按照标签匹配app: nginx-deploy # 匹配的标签key/valuestrategy:             # 更新策略rollingUpdate:      # 滚动更新的配置maxSurge: 25%     # 滚动更新时,更新的个数最多可以超过期望副本数的个数或者比例maxUnavailable: 25%       # 滚动更新时,最大不可用比例,表示在所有副本数中最多可以有多少个不更新成功type: RollingUpdate # 更新的类型 ,滚动更新template:     # pod模板metadata:   # pod的元信息labels:   # pod的标签app: nginx-deployspec:       # pod的期望信息containers:       # pod的容器- image: nginx:1.7.9      # 镜像imagePullPolicy: IfNotPresent   # 拉取策略name: nginx     # 容器名称restartPolicy: Always     # 重启策略terminationGracePeriodSeconds: 30  # 删除操作最多宽限时间
~                                                                   

这些就是创建的一个文件,下面留着用


滚动更新

修改了deployment文件中的template中的属性后,才触发了更新操作

现在可以看到我们当前部署的信息就这一个

由于我们刚刚创建的deploy是通过命令创建的所以我们在本地的文件里改是不会有任何效果的 

直接使用命令进入deploy 修改

我先在这添加了一个标签test:‘123’ 后再去查看deploy

发现并没有什么变化,但是标签确实是给我们加上了,因为他的ready一直是1并没有滚动创建副本的一个变化

在详细信息里也是确确实实没有显示

在滚动更新之前我先去修改一下他的副本数,这样可以更佳清楚的看到滚动更新的效果

可以看到他的副本数是1 我直接给他改成3 

让后再去get一下

可以看到他后面是变成3/3了但是他还是一个deploy

rs也同样是1个

 但是pod变成了3个,而且标签还都是用的一个

现在开始展示滚动更新 ,再去deploy里面进行一个配置

kubectl edit deploy nginx-deploy

把1.7.9改成1.9.1

 这时我们快速的去查看

可以到ready一直是3最后就成功的全部滚动更新完毕

其实在滚动更新的时候还可以使用命令去进行查看

现在我们开启两个ssh窗口,一个用于更新一个用于查看 

kubectl set image deployment/nginx-deploy nginx=nginx:1.7.9

 这个命令就相当于我们进去修改把镜像1.9.1又改回1.7.9一样

在更新时候使用命令

kubectl rollout status deploy nginx-deploy

就可以看到当前滚动情况

kubectl describe deploy nginx-deploy

 也是可以看到滚动更新的情况

可以看到他是开启一个关闭一个开启一个关闭一个

rs也是从原来的rs中更新到了另一个rs中        


 回滚

假如说当我们要去进行滚动更新的时候,把版本本来要写1.9.1但是误写成1.91这时候看看怎么办

kubectl set image deployment/nginx-deploy nginx=nginx:1.91

开始更新

kubectl rollout status deploy nginx-deploy

再去查看一下,让后就会一直卡住,因为版本号不对所以他一直卡住

发现下面rs一直是1 还可以看到pod也报错了

kubectl describe pod nginx-deploy

这里可以看到详细的一个信息了

我们可以通过

kubectl rollout history deployment/nginx-deploy

去查看一个系统版本更新的历史记录

因为在更新的时候没有加--record后面加描述

我们可以通过他前面的数进行回滚

kubectl rollout history deployment/nginx-deploy --revision=3

 

可以看那次的信息

 kubectl rollout undo deployment/nginx-deploy

这个是回滚到上一次 

kubectl rollout undo deployment/nginx-deploy --to-revision=2

回滚到指定的那次 

 现在回退完了再使用edit进行查看一下

可以看到又回到1.9.1了

可以通过设置 .spec.revisonHistoryLimit 来指定 deployment 保留多少 revison,如果设置为 0,则不允许 deployment 回退了 


扩容和缩容

假如我的服务器在某一时间段,突然需要大量访问,而过了这个时间访问量会急剧缩减

在访问量大的时候,我们可以去做一个副本个数的修改,我们每次都要去edit修改,副本的修改非常常用,总不可能每次都去修改,当我们真正需要去扩容缩容的时候我们应该更方便,越方便越好,所以我们就用这个扩容和缩容去快速实现

通过 kube scale 命令可以进行自动扩容/缩容,以及通过 kube edit 编辑 replcas 也可以实现扩容/缩容

 扩容与缩容只是直接创建副本数,没有更新 pod template 因此不会创建新的 rs

可以看到当前我们是这样的 

kubectl scale --replicas=6 deploy nginx-deploy

 我直接给他扩容到6个

可以发现pod是6了但是rs还是没有变化

缩容也是一样的,直接把6改成3就立马缩回来了

kubectl scale --replicas=3 deploy nginx-deploy

直接就搞定了


暂停与恢复

由于每次对 pod template 中的信息发生修改后,都会触发更新 deployment 操作,那么此时如果频繁修改信息,就会产生多次更新,而实际上只需要执行最后一次更新即可,当出现此类情况时我们就可以暂停 deployment 的 rollout

 我现在直接对我的模板去edit编辑一下

kubectl edit deploy nginx-deploy

在里面添加了这么一段然后直接保存退出

他接着就会自动进行更新了,这个是没有暂停的情况,现在直接将他暂停更新

kubectl rollout pause deploy nginx-deploy

直接就暂停了,接下来我再去进行修改

我新加了一个limits

再保存退出

可以发现他并没有去更新,再去看一下他的历史更新记录

可以看到他最后一次更新是更新requests的内容,哪怕是把他的镜像版本再改回1.7.9他也是不会更新的

kubectl rollout resume deploy nginx-deploy

恢复他的更新

可以看到他又立马开始更新了

去查看更新也同样可以看到

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

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

相关文章

【Python】使用plt库绘制动态曲线图,并导出为GIF或MP4

一、绘制初始图像 正常使用plt进行绘图,这里举例一个正弦函数: 二、绘制动态图的每一帧 思路: 根据横坐标点数绘制每一帧画面每次在当前坐标处,绘制一个点和垂直的线,来表示当前点可以在点上加个坐标等样式来增加…

新火种AI|GPT-4诞生1年,OpenAI把它放到了机器人上

作者:一号 编辑:美美 ChatGPT拥有了身体,机器人也有了灵魂。 从OpenAI在去年3月14日拿出GPT-4后,已经过了整整一年。显然,在GPT-4诞生之后的这一年,一切都迭代得太快了,从GPT-4展现多模态能力&…

力扣热题100_矩阵_73_矩阵置零

文章目录 题目链接解题思路解题代码 题目链接 73.矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&…

SpringCloud微服务 黑马教程 自我总结笔记

来源出处: SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4/?spm_id_from333.337.search-card.all.click 一、认识微服务 微服…

BEV系列一:BEV介绍和常用BEV算法简介

BEV系列一:BEV介绍和常用BEV算法简介 自动驾驶最全学习资料获取:链接

学生时期学习资源同步-1 第一学期结业考试题6

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载

高效Go编程: encoding/csv标准库深度解析

高效Go编程: encoding/csv标准库深度解析 引言了解encoding/csv库CSV文件的基本结构encoding/csv库的核心功能应用场景 读取CSV文件基本步骤代码示例处理不同的分隔符错误处理 处理CSV数据数据解析代码示例处理不规则数据代码示例 写入CSV文件基本步骤代码示例自定义设置错误处…

群发邮件软件哪个好?8款国际流行软件推荐与评测

无论是小型企业还是大型企业,都需要一个高效、稳定且功能全面的群发邮件软件来完成营销任务。市场上的群发邮件软件琳琅满目,如Zoho Campaigns、Constant Contact、Intuit Mailchimp、Moosend、MailerLite、Systeme.io、Instantly、Saleshandy等&#xf…

Java Web程序的部署

写在前:要想将我们写好的项目让其他人可以访问,仅仅完成代码是不能直接运行的。这就需要在Linux系统上搭建Java web程序的运行环境。这里以我所做的博客系统为例,进行搭建。 1. 准备依赖 (1)JVM(JDK&#…

react04- mvc 、 mvvm

MVC与MVVM stackoverflow论坛网站 react前端框架 使用框架前: 操作dom > js获取dom元素,事件侦听,修改数据,设置样式。。。 操作dom问题: 直接操作dom,会造成大量的回流、重绘,消耗大量性能操作起来也…

Nodejs 第五十四章(net)

net模块是Node.js的核心模块之一,它提供了用于创建基于网络的应用程序的API。net模块主要用于创建TCP服务器和TCP客户端,以及处理网络通信。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,用于…

计网《二》|物理层|信道极限容量|码分复用|曼彻斯特编码

计网《二》|物理层 物理层的基本概念数据通信的基础知识数据通信模型常用术语有关信道的几个基本概念调制基带调制带通调制 常用编码方式不归零制归零编码曼彻斯特编码差分曼彻斯特编码 基本调制方法 信道的极限容量限制码元在信道上的传播速率的两个因素信道能够通过的频率范围…