四、K8S-Deployment(无状态服务)

目录

一、引入Deployment

二、Deployment资源清单

三、Deployment支持的功能

1、扩缩容

1、通过命令行方式修改

2 、在线编辑yaml文件方式修改

2、镜像更新

1、重建更新

2、滚动更新

3、金丝雀发布(灰度更新)


[root@k8s-master-1 ~]# kubectl get deploy -owide
NAME   READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR
web    1/1     1            1           44h   nginx        nginx    app=web
注释:
NAME:Deployment名称
READY:Pod状态,已经Ready的个数
UP-TO-DATE:已经达到期望状态的被更新的副本数
AVAILABLE:已经可以用的副本数
AGE:应用程序运行的时间
CONTAINERS:容器名称
IMAGES:容器的镜像
SELECTOR:管理的pod的标签

一、引入Deployment

        kubernetes最小的调度单元是Pod,kubernetes主要的功能就是管理多个Pod,Pod中也可以包含一个或者多个容器,他是通过Deployment和ReplicaSet(rs)来管理Pod的。

        Deployment并不是直接管理Pod的,而是通过管理ReplicaSet来间接管理Pod。即:deployment管理replicaset,replicaset管理pod。所以deployment比replicaset的功能更强大。

        查看deployment控制的rs和pod,发现rs是在deployment之后加了一段字符串,而pod是在rs之后加了一段字符串

二、Deployment资源清单

apiVersion: apps/v1  #版本号
kind: Deployment  #类型
metadata:    #元数据name:    #rs名称namespace:   #所属命名空间labels:   #标签controller: deploy
spec:   #详情描述replicas:  #副本数量revisionHistoryLimit: #设置保留旧的历史版本,默认是10paused: #暂停部署,默认是falseprogressDeadlineSeconds: #部署超时时间(s),默认是600strategy: #更新策略type: RollingUpdate  #滚动更新策略,默认rollingUpdate:  #滚动更新maxSurge: #最大额外可以存在的副本数,可以为百分比,也可以为整数,如果该值为0,那么maxUnavaliable就不能为0maxUnavaliable: #最大不可用状态的pod的最大值,可以为百分比,也可以为整数,如果该值为0,那么maxSurge就不能为0type: Recreate#重建更新策略,先删除旧的pod 在创建新的podselector:  #选择器,通过它指定该控制器管理哪些podmatchLabels:   #Labels匹配规则app: nginx-podmatchExpressions:   #Expression匹配规则- {key: app, operator: In, values: [nginx-pod]}template:  #模板,当副本数量不足时,会根据下面的模板创建pod副本metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1ports:- containerPort: 80

三、Deployment支持的功能

1、扩缩容

1、通过命令行方式修改
kubectl scale deploy deploy名称 --replicas=pod数量 -n 命名空间
[root@k8s-master-1 test]# kubectl scale deploy deployment --replicas=3 -n default
deployment.apps/deployment scaled
#可以看到Deployment 已经成了3个
[root@k8s-master-1 test]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
busybox                       1/1     Running   37         6d16h
deployment-5d9c9b97bb-9b5br   1/1     Running   0          3m15s
deployment-5d9c9b97bb-hdwsd   1/1     Running   0          3m15s
deployment-5d9c9b97bb-tvxj2   1/1     Running   0          7m55s
web-96d5df5c8-sw784           1/1     Running   2          44h
2 、在线编辑yaml文件方式修改
kubectl edit deploy deploy名字 -n 命名空间
#找到replicas,将其数量改为需要的数量即可,edit是在线编辑的意思
[root@k8s-master-1 test]# kubectl edit deploy deployment
deployment.apps/deployment edited
[root@k8s-master-1 test]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
busybox                       1/1     Running   37         6d16h
deployment-5d9c9b97bb-9b5br   1/1     Running   0          6m18s
deployment-5d9c9b97bb-tvxj2   1/1     Running   0          10m
web-96d5df5c8-sw784           1/1     Running   2          44h

2、镜像更新

        Deploym支持两种镜像更新策略:重建更新和滚动更新(默认),可以通过strategy选项进行配置

        strategy:指定新的pod替换旧的pod的策略,有两个属性

        type:指定策略类型

        Recretae:重建更新,在创建出新的pod之前会先杀掉所有已经存在对的pod

        RollingUpdate:滚动更新,就是杀死一部分,就启动一部分,在更新过程中,存在两个版本的pod

        RollingUpdate:当type为RollingUpdate时生效,用于为RollingUpdate设置参数,有两个属性:

        maxUnavailable:用来指定在升级过程中不可用pod的最大数量,默认25%

        maxSurge:用来指定在升级过程中可以超过期望pod的最大数量,默认25%

1、重建更新

编辑deployment.yaml文件,在spec节点下添加更新策略

vim deployment.yaml
spec: strategy:type: Recreate
[root@k8s-master-1 test]# kubectl apply -f deployment.yaml 
[root@k8s-master-1 test]# kubectl get pod -owide
NAME                          READY   STATUS    RESTARTS   AGE     IP            NODE         NOMINATED NODE   READINESS GATESdeployment-59bfd7fdbc-db5zz   1/1     Running   0          3m56s   10.244.0.45   k8s-node-1   <none>           <none>
#查看deploy
[root@k8s-master-1 test]# kubectl get deploy -owide
NAME         READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES         SELECTOR
deployment   1/1     1            1           3h58m   nginx        nginx:1.15.4   app=nginx-pod
#修改镜像版本
[root@k8s-master-1 test]# kubectl set image deploy deployment nginx=nginx:1.15.4 --record
deployment.apps/deployment image updated
#回滚到上一个版本
[root@k8s-master-1 test]# kubectl rollout undo deploy deployment
deployment.apps/deployment rolled back
#回滚到指定的版本
[root@k8s-master-1 test]# kubectl rollout undo deploy deployment --to-revision=3
#查看历史版本
[root@k8s-master-1 test]# kubectl rollout history deploy deployment -n default
deployment.apps/deployment 
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
4         <none>
显示为<node>是因为apply创建时候没加 --record  表示记录修订版本
#修改镜像版本并记录
[root@k8s-master-1 test]# kubectl set image deploy deployment nginx=nginx:1.17.1 --record
#查看历史版本记录
[root@k8s-master-1 test]# kubectl rollout history deploy deployment
deployment.apps/deployment 
REVISION  CHANGE-CAUSE
2         kubectl apply --filename=deployment.yaml --record=true
3         kubectl set image deploy deployment nginx=nginx:1.17.1 --record=true
4         kubectl set image deploy deployment nginx=nginx:1.15.3 --record=true
2、滚动更新
修改yaml文件,在spec节点下添加滚动更新策略,默认是滚动更新
strategy:# type: Recreatetype: RollingUpdaterollingUpdate:maxSurge: 25%maxUnavailable: 25%
#创建并记录
[root@k8s-master-1 test]# kubectl apply -f deployment.yaml --record
查看deploy
[root@k8s-master-1 test]# kubectl get pod -owide
NAME                          READY   STATUS    RESTARTS   AGE     IP            NODE         NOMINATED NODE   READINESS GATESdeployment-778c988cc8-7zf97   1/1     Running   0          37s     10.244.0.54   k8s-node-1   <none>           <none>
deployment-778c988cc8-t9k8n   1/1     Running   0          37s     10.244.0.55   k8s-node-1   <none>           <none>
deployment-778c988cc8-xx9d6   1/1     Running   0          37s     10.244.1.41   k8s-node-2   <none>           <none>[root@k8s-master-1 test]# [root@k8s-master-1 test]# kubectl get deploy -owide
NAME         READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
deployment   3/3     3            3           46s   nginx        nginx:1.15.3   app=nginx-pod[root@k8s-master-1 test]# 
#修改镜像版本[root@k8s-master-1 test]# kubectl set image deploy deployment nginx=nginx:1.15.4
deployment.apps/deployment image updated
[root@k8s-master-1 test]# 
#此时在查看pod 时候就会看到 旧的pod 一边停止,新的pod一边创建
[root@k8s-master-1 test]# kubectl get pod -owide
NAME                          READY   STATUS              RESTARTS   AGE     IP            NODE         NOMINATED NODE   READINESS GATESdeployment-59bfd7fdbc-nfg92   1/1     Running             0          2s      10.244.0.56   k8s-node-1   <none>           <none>
deployment-59bfd7fdbc-pbvls   0/1     ContainerCreating   0          1s      <none>        k8s-node-2   <none>           <none>
deployment-59bfd7fdbc-x4c92   1/1     Running             0          4s      10.244.1.42   k8s-node-2   <none>           <none>
deployment-778c988cc8-7zf97   0/1     Terminating         0          116s    10.244.0.54   k8s-node-1   <none>           <none>
deployment-778c988cc8-t9k8n   1/1     Terminating         0          116s    10.244.0.55   k8s-node-1   <none>           <none>
deployment-778c988cc8-xx9d6   1/1     Running             0          116s    10.244.1.41   k8s-node-2   <none>           <none>[root@k8s-master-1 test]# [root@k8s-master-1 test]# kubectl get pod -owide
NAME                          READY   STATUS    RESTARTS   AGE     IP            NODE         NOMINATED NODE   READINESS GATESdeployment-59bfd7fdbc-nfg92   1/1     Running   0          30s     10.244.0.56   k8s-node-1   <none>           <none>
deployment-59bfd7fdbc-pbvls   1/1     Running   0          29s     10.244.1.43   k8s-node-2   <none>           <none>
deployment-59bfd7fdbc-x4c92   1/1     Running   0          32s     10.244.1.42   k8s-node-2   <none>           <none>
3、金丝雀发布(灰度更新)

        金丝雀发布就是灰度发布,是一种pod 发布的方式。金丝雀发布采取先发布,再删除的方式,保证pod的总量不低于期望值,并且在更新部分pod 后暂停更新,当确认新pod版本运行正常后,在进行其他版本pod 的更新

        比如有一批新的pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新的pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

        deployment支持更新过程中的控制,如:“暂停”、或者“继续”的操作

#先查看下当前nginx 版本为1.15.3
[root@k8s-master-1 test]# kubectl get deploy -owide
NAME         READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deployment   3/3     3            3           19s    nginx        nginx:1.15.3   app=nginx-pod
#rs用的是deployment-778c988cc8 控制器
[root@k8s-master-1 test]# kubectl get rs -owide
NAME                    DESIRED   CURRENT   READY   AGE    CONTAINERS   IMAGES         SELECTOR
deployment-778c988cc8   3         3         3       29s    nginx        nginx:1.15.3   app=nginx-pod,pod-template-hash=778c988cc8
#接下来进行金丝雀发布
[root@k8s-master-1 test]# kubectl set image deploy deployment nginx=nginx:1.15.4 && kubectl rollout pause deploy deployment
deployment.apps/deployment image updated
deployment.apps/deployment paused
#或者先暂停 在更新
[root@k8s-master-1 ~]# kubectl rollout pause deploy deployment
[root@k8s-master-1 test]# kubectl set image deploy deployment nginx=nginx:1.15.4
#进行二次更新   添加CPU配置(可以查看pod详解中的资源限制和请求 resources{limits,requests}})
[root@k8s-master-1 ~]# kubectl set resources deploy deployment --limits=cpu=200m,memory=128mi --requests=cpu=10m,memory=16mi[root@k8s-master-1 test]# kubectl get deploy -owide
NAME         READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deployment   4/3     1            4           9m3s   nginx        nginx:1.15.4   app=nginx-pod
#从上面可以看到,nginx 的镜像为 1.15.4 了,但 READY 的有 4/3,其中的 4 表示我们有 4 个可以对外提供服务的 pod,3 表示我们期望的是三个,
UP-TO-DATE 为 1 ,表示最新版本的 pod 数量为 1 个,AVAILABLE 为 4 ,表示当前可用的 pod 数量为 4 个[root@k8s-master-1 test]# kubectl get rs -owide
NAME                    DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES         SELECTOR
deployment-59bfd7fdbc   1         1         1       4m47s   nginx        nginx:1.15.4   app=nginx-pod,pod-template-hash=59bfd7fdbc
deployment-778c988cc8   3         3         3       13m     nginx        nginx:1.15.3   app=nginx-pod,pod-template-hash=778c988cc8
#观察没问题的话继续更新操作
[root@k8s-master-1 test]# kubectl rollout resume deploy deployment
deployment.apps/deployment resumed
#deploy 版本已经修改
[root@k8s-master-1 test]# kubectl get deploy -owide
NAME         READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deployment   3/3     3            3           20m    nginx        nginx:1.15.4   app=nginx-pod
#如果有问题  立马回滚
[root@k8s-master-1 test]# kubectl rollout undo deploy deployment
deployment.apps/deployment rolled back
#回滚到指定的版本
[root@k8s-master-1 test]# kubectl rollout undo deploy deployment --to-revision=3
[root@k8s-master-1 test]# 
[root@k8s-master-1 test]# kubectl get deploy -owide
NAME         READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deployment   3/3     3            3           22m    nginx        nginx:1.15.3   app=nginx-pod

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

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

相关文章

centos用yum安装mysql详细教程

1 查询安装mysql的yum源,命令如下 ls /etc/yum.repos.d/ -l 界面如下图所示&#xff0c;未显示mysql的安装源 2 安装mysql相关的yum源,例如&#xff1a; 例如&#xff1a;rpm -ivh mysql57-community-release-el7.rpm 要注意 mysql的版本和系统的版本匹配 mysql57-communi…

【高等数学之泰勒公式】

一、从零开始 1.1、泰勒中值定理1 什么是泰勒公式?我们先看看权威解读: 那么我们从古至今到底是如何创造出泰勒公式的呢? 由上图可知&#xff0c;任一无穷小数均可以表示成用一系列数字的求和而得出的结果&#xff0c;我们称之为“无穷算法”。 那么同理我们想对任一曲线来…

Qt/QML编程学习之心得:hicar手机投屏到车机中控的实现(32)

hicar,是华为推出的一款手机APP,有百度地图、华为音乐,更多应用中还有很多对应手机上装在的其他APP,都可以在这个里面打开使用,对开车的司机非常友好。但它不仅仅是用在手机上,它还可以投屏到车机中控上,这是比较神奇的一点。 HiCar本质上是一套智能投屏系统,理论上所有…

springboot 企业微信 网页授权

html 引入jquery $(function () {// alert("JQ onready");// 当前企业的 corp_idconst corp_id xxxxxx;// 重定向 URL → 最终打开的画面地址&#xff0c;域名是在企业微信上配置好的域名const redirect_uri encodeURI(http://xxxxx.cn);//企业的agentId 每个应用都…

Vue3-39-路由-导航异常的检测 afterEatch 与 编程式导航之后的订阅动作

说明 本文主要是介绍一下 路由的后置守卫 afterEatch 的一个重要的作用 &#xff1a; 就是检测路由异常信息。 它的实现方式是 通过第三个参数来返回的。 而且&#xff0c;它的异常检测是全局的。导航的异常有以下三种类型&#xff1a; aborted : 在导航守卫中 被拦截并返回了…

【Blog】记录一下如何让自己的自建网站让百度搜索收录

记录一下如何让自己的自建网站让百度搜索收录 目录 记录一下如何让自己的自建网站让百度搜索收录一、前言二、开始操作1、第一步&#xff1a;进入设置2、第二步&#xff1a;开始设置3、第三步&#xff1a;让百度收录我们自己的文章 三、知识点记录1、注意事项2、可能会出现的问…

vsCode输出控制台中文乱码解决

在tasks.json里的args中添加 "-fexec-charsetGBK", // 处理mingw中文编码问题 "-finput-charsetUTF-8",// 处理mingw中文编码问题

PyCharm 设置新建Python文件时自动在文章开头添加固定注释的方法

在实际项目开发时&#xff0c;为了让编写的每个代码文件易读、易于维护或方便协同开发时&#xff0c;我们都会在每一个代码文件的开头做一些注释&#xff0c;如作者&#xff0c;文档编写时间&#xff0c;文档的功能说明等。 利用PyCharm 编辑器&#xff0c;我们只需设置相关设…

微机原理常考简答题总结

一&#xff0c;8086和8088这两个微处理器在结构上有什么异同&#xff1f; &#xff08;1&#xff09;共同点&#xff1a;内部均由EU、BIU组成&#xff0c;结构基本相同&#xff1b;寄存器等功能部件均为16位&#xff1b;内部数据通路为16位&#xff1b;指令系统相同。 &#x…

网络协议与攻击模拟_03实施ARP欺骗和攻击

一、ARP攻击 1、实验环境 kali Linux &#xff08;安装arpspoof工具&#xff09;被攻击主机 2、kali配置 kali Linux系统是基于debian Linux系统&#xff0c;采用deb包管理方式&#xff0c;可以使用apt源的方式进行直接从源的安装。 配置kali网络源 vim /etc/apt/sources…

Android学习(四):常用布局

Android学习&#xff08;四&#xff09;&#xff1a;常用布局 五种常用布局 线性布局&#xff1a;以水平或垂直方向排列相对布局&#xff1a;通过相对定位排列帧布局&#xff1a;开辟空白区域&#xff0c;帧里的控件(层)叠加表格布局&#xff1a;表格形式排列绝对布局&#x…

探索渡边赤池信息准则 (WAIC):统计模型选择的范式转变

一、介绍 在不断发展的统计建模和机器学习领域&#xff0c;寻求最佳模型选择仍然是一个基石。渡边-赤池信息准则 (WAIC) 作为贝叶斯分析的重要工具而出现&#xff0c;为模型评估提供了全新的视角。本文旨在揭示 WAIC 的细微差别&#xff0c;探讨其方法、意义、优势和潜在局限性…

C++内存管理机制(侯捷)笔记1

C内存管理机制&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第一讲primitives的笔记 截至…

Python 基础(四):序列

目录 简介2 基本使用2.1 索引2.2 切片2.3 相加2.4 相乘2.5 元素是否在序列中2.6 内置函数 简介 Python 中的序列是一块可存放多个值的连续内存空间&#xff0c;所有值按一定顺序排列&#xff0c;每个值所在位置都有一个编号&#xff0c;称其为索引&#xff0c;我们可以通过索引…

HTTP介绍

目录 HTTP介绍 1、HTTP 工作原理 2、HTTP 消息结构 3、客户端请求消息 4、服务器响应消息 5、HTTP 请求方法 6、HTTP 响应头信息 7、HTTP 状态码 HTTP介绍 1、HTTP 工作原理 HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发…

轻松get压力测试指南

身为后端程序员怎么也要会一点压力测试相关的技术吧, 不然无脑上线项目万一项目火了进来大量请求时出现程序执行缓慢, 宕机等情况你肯定稳稳背锅, 而且这个时候短时间内还没办法解决, 只能使用物理扩容CPU, 内存, 更换网络等几种方式来解决问题, 妥妥的为公司增加支出好吧, 下一…

‘再战千问:启程你的提升之旅‘,如何更好地提问?

例如&#xff0c;很多时候我们提出一些问题&#xff0c;然而通义千问提供的答案&#xff0c;并非完全符合我们的期望。这并非由于通义千问的智能程度不足&#xff0c;而是提问者的“提问技巧”尚未掌握得当。 难道提问还需要讲究艺术性吗&#xff1f;确实如此。今天&#xff0c…

[后端] 微服务的前世今生

微服务的前世今生 整体脉络: 单体 -> 垂直划分 -> SOA -> micro service 微服务 -> services mesh服务网格 -> future 文章目录 微服务的前世今生单一应用架构特征优点&#xff1a;缺点&#xff1a; 垂直应用架构特征优点缺点 SOA 面向服务架构特征优点缺点 微服…

2024年中国杭州|网络安全技能大赛(CTF)正式开启竞赛报名

前言 一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的…

生成式人工智能市场规模、趋势和统计数据(2024-2026)

生成式人工智能市场规模、趋势和统计数据&#xff08;2024-2026&#xff09; 目录 生成式人工智能市场规模、趋势和统计数据&#xff08;2024-2026&#xff09;一、生成式人工智能行业亮点二、生成式人工智能市场规模三、生成式人工智能市场增长预测四、生成式人工智能采用统计…