四、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,一经查实,立即删除!

相关文章

【笔记】Helm-2 如何使用-2 同步你的仓库

同步你的仓库 注意&#xff1a;该示例是专门针对Google Cloud Storage&#xff08;GCS&#xff09;提供的chart仓库。 先决条件 安装gsutil工具。我们非常依赖gsutil rsync功能 https://cloud.google.com/storage/docs/gsutil 确保可以使用Helm程序 可选&#xff1a;我们推…

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;我们称之为“无穷算法”。 那么同理我们想对任一曲线来…

vue上传文件时显示进度

在Vue中上传多个文件并实时刷新进度条&#xff0c;可以通过使用HTML5的File API和XMLHttpRequest对象来实现。下面是一个简单的示例代码&#xff0c;演示了如何实现这个功能&#xff1a; 首先&#xff0c;在Vue组件中添加一个用于选择文件的input元素和一个用于显示进度条的di…

Qt 智能指针QScopedPoint用法

1. 智能指针是什么 智能指针是C11引入的一种指针封装类型&#xff0c;用于自动管理动态分配的内存。智能指针的目的是解决传统裸指针带来的内存泄漏、悬挂指针等问题&#xff0c;并使代码更安全、更易读。 2. 智能指针有什么用 1.自动管理内存&#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 每个应用都…

C++中的深度优先搜索算法

C中的深度优先搜索算法 深度优先搜索&#xff08;DFS&#xff09;是一种用于遍历或搜索树或图的算法。这个算法会尽可能深的搜索树的分支。当节点v的所在边都己被探寻过&#xff0c;搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点…

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

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

Python 格式化的方法

在Python中&#xff0c;我们可以使用字符串的format()方法或f-string这两种方法来进行格式化。 1、使用format()方法&#xff1a;使用该方法&#xff0c;我们可以通过占位符{}来表示被替换的值&#xff0c;其中可以单独使用{}或添加变量参数来指定相应的值。如&#xff1a; n…

【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…

电池可以比喻为人体心脏提供动力,电驱比喻为人的双腿,起到运动的目的,电控比喻人的大脑,协调所有零部件正常工作。

问题描述&#xff1a; 电池可以比喻为人体心脏提供动力&#xff0c;电驱比喻为人的双腿&#xff0c;起到运动的目的&#xff0c;电控比喻人的大脑&#xff0c;协调所有零部件正常工作。 问题解答&#xff1a; 高压电池系统 - 人体心脏&#xff1a; 将高压电池系统比喻为心脏是…

python第三节:Str字符串类型(2)

str.format(*args, **kwargs) 执行字符串格式化操作。 语法&#xff1a;点号前面是一个带槽&#xff08;由大括号表示&#xff09;的字符串&#xff0c;字符串里面可以设置各种参数和格式控制标记&#xff0c;后面是format和替换的字符串。 {参数序号:格式控制标记} 如下六…

Android学习(四):常用布局

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

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

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

MiniTab宏库速查一览表

为了能快速查询到需要的宏&#xff0c;花了两天时间进行倾心整理了Minitab提供的所有宏库集合&#xff0c;共计94个。 宏是包含一系列 Minitab 会话命令的文本文件。可以使用这些宏来对 Minitab 分析的功能进行自动化处理、自定义和扩展。 以下仅列举几种宏的使用方法&#x…