Kubernetes Deployment 之扩缩容与滚动更新

Kubernetes Deployment 之扩缩容与滚动更新

Deployment 扩缩容

扩缩容非常简单,我们可以直接调整 replica 副本数目,然后 kubectl apply指定进行动态更新。下面将nginx-deployment动态改为 1 个 Pod 和 3 个 Pod 的操作

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nginxnamespace: defaultlabels:app: deployment-nginx
spec:replicas: 2 # 将此处动态改为 1 或者 3selector:matchLabels:app: pod-nginxtemplate:metadata:labels:app: pod-nginxspec:containers:- name: nginximage: docker.io/k8s-test:v1.0imagePullPolicy: IfNotPresentports:- containerPort: 80
root@k8s-master1:~# kubectl apply -f deploy-nginx.yaml
deployment.apps/deployment-nginx configured
root@k8s-master1:~# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
deployment-nginx   1/1     1            1           17h
root@k8s-master1:~# kubectl apply -f deploy-nginx.yaml
deployment.apps/deployment-nginx configured
root@k8s-master1:~# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
deployment-nginx   3/3     3            3           17h# 它也会识别原来的 Pod 有没有被更新,如果没有被更新,它仍然会继续被保留运行
root@k8s-master1:~# kubectl get pods -owide
NAME                                READY   STATUS    RESTARTS      AGE   IP               NODE          NOMINATED NODE   READINESS GATES
deployment-nginx-6977747dd9-knx9r   1/1     Running   0             31s   10.244.194.126   k8s-worker1   <none>           <none>
deployment-nginx-6977747dd9-nqxgd   1/1     Running   0             31s   10.244.194.125   k8s-worker1   <none>           <none>
deployment-nginx-6977747dd9-sz42q   1/1     Running   1 (34m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>

Deployment 滚动更新策略

Deployment 更新策略分为两种,分别为RecreateRollingUpdateRecreate是将所有 Pod 全部杀死,然后启动新版本,这是一个极其危险的行为,几乎不被使用。滚动更新是指,新增一定数量的 Pod 后,再杀死一定的数量的 Pod。Deployment 默认使用滚动更新策略。

实现滚动更新需要设置MaxSurge最大 Pod 新增数量和MaxUnavailable最大 Pod 不可用数据数目。它们可以设置成整数或者百分比,且两者不能同时为0,不然无法根本更新。以副本数 3 为例,如果我们 MaxSurge设置为 10%,那么我们新增个数为 0.3,这里需要向上取整,即个数为1;同理我们 MaxUnavailable设置为 10%,这里我们允许不可用的个数也为 0.3,这里要向下取整为 0;最终我们的更新策略是要等到 4 个 Pod 完全在运行状态,滚动更新才回去杀死 1 个老 Pod。

Deployment 滚动更新使用

  1. 我们先将 k8s-test:v1.0 镜像标记为 k8s-test:v1.1

    root@k8s-worker1:~# ctr -n k8s.io image tag docker.io/library/k8s-test:v1.0 docker.io/library/k8s-test:v1.1
    docker.io/library/k8s-test:v1.1
    root@k8s-worker2:~# ctr -n k8s.io image tag docker.io/library/k8s-test:v1.0 docker.io/library/k8s-test:v1.1
    docker.io/library/k8s-test:v1.1
    
  2. 修改 yaml镜像版本号和更新策略

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: deployment-nginxnamespace: defaultlabels:app: deployment-nginx
    spec:strategy:rollingUpdate:maxSurge: 10%maxUnavailable: 10%replicas: 2selector:matchLabels:app: pod-nginxtemplate:metadata:labels:app: pod-nginxspec:containers:- name: nginximage: docker.io/k8s-test:v1.1imagePullPolicy: IfNotPresentports:- containerPort: 80
    
  3. 执行如下指令开启 Pods 监听

    kubectl get pods -owide -w
    
  4. 更新过程如下,旧的 Pod 会先被标记,但不是真的被终止

    root@k8s-master1:~# kubectl get pods -owide -w
    NAME                                READY   STATUS    RESTARTS      AGE   IP               NODE          NOMINATED NODE   READINESS GATES
    deployment-nginx-6977747dd9-knx9r   1/1     Running   0             30m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   1/1     Running   0             30m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   1/1     Running   1 (63m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   1/1     Terminating   0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   0/1     Pending       0             0s    <none>           <none>        <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   0/1     Pending       0             0s    <none>           k8s-worker2   <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   0/1     ContainerCreating   0             0s    <none>           k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   1/1     Terminating         0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   0/1     Terminating         0             35m   <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   0/1     ContainerCreating   0             0s    <none>           k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   0/1     Terminating         0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-ft9s6   1/1     Running             0             1s    10.244.126.26    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   0/1     Terminating         0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-nqxgd   0/1     Terminating         0             35m   10.244.194.125   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   1/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   0/1     Pending             0             0s    <none>           <none>        <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   0/1     Pending             0             0s    <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   0/1     ContainerCreating   0             0s    <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   1/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   0/1     Terminating         1 (69m ago)   17h   <none>           k8s-worker2   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   0/1     ContainerCreating   0             0s    <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   1/1     Running             0             1s    10.244.194.127   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   0/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   1/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   0/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-sz42q   0/1     Terminating         1 (69m ago)   17h   10.244.126.24    k8s-worker2   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   1/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   0/1     Terminating         0             35m   <none>           k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   0/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   0/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    deployment-nginx-6977747dd9-knx9r   0/1     Terminating         0             35m   10.244.194.126   k8s-worker1   <none>           <none>
    
  5. 查看更新后的结果

    root@k8s-master1:~# kubectl get pods -owide
    NAME                                READY   STATUS    RESTARTS   AGE     IP               NODE          NOMINATED NODE   READINESS GATES
    deployment-nginx-6c94d644bd-ft9s6   1/1     Running   0          4m55s   10.244.126.26    k8s-worker2   <none>           <none>
    deployment-nginx-6c94d644bd-sj4hv   1/1     Running   0          4m54s   10.244.194.127   k8s-worker1   <none>           <none>
    root@k8s-master1:~# kubectl get deploy
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    deployment-nginx   2/2     2            2           17h
    root@k8s-master1:~# kubectl get rs
    NAME                          DESIRED   CURRENT   READY   AGE
    deployment-nginx-6977747dd9   0         0         0       17h
    deployment-nginx-6c94d644bd   2         2         2       6m1s
    

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

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

相关文章

20232820 2023-2024-2 《网络攻防实践》实践十一报告

20232820 2023-2024-2 《网络攻防实践》实践十一报告 1.实践内容 web浏览器渗透攻击 任务&#xff1a;使用攻击机和Windows靶机进行浏览器渗透攻击实验&#xff0c;体验网页木马构造及实施浏览器攻击的实际过程 取证分析实践—网页木马攻击场景分析 攻防对抗实践—web浏览…

非关系型数据库NOSQL

文章目录 1. NOSQL 概述2. 相关理论基础2.1 一致性2.2 分区2.3 存储分布2.4 查询模型 3. NOSQL 数据库的种类3.1 文档存储3.2 键值存储3.3 列存储3.3 图存储 4. NOSQL 应用案例和新技术4.1 HBase 数据库4.2 云数据库 GeminiDB 非关系型的数据库 NOSQL (Not Only SQL)是对不同于…

linux-x86_64-musl 里面的musl是什么意思?

在一些开源库里面可以看到&#xff0c;linux-x86_64-musl类似于这样的字符串&#xff0c;这个musl是什么意思呢&#xff1f; 在字符串 "linux-x86_64-musl" 中&#xff0c;musl 指的是 musl libc&#xff0c;这是一个轻量级的 C 标准库实现。 让我们来拆解一下这个字…

Linux系统(ubuntu)挂载jffs2文件系统

一. 挂载操作 1、加载mtdram模块&#xff1a; sudo modprobe mtdram total_size16384//total_size后面跟的参数单位是KB&#xff0c;并且其大小要大于jffs2镜像文件的大小 2、sudo modprobe mtd 3、sudo modprobe mtdblock 4、sudo modprobe jffs2 5、拷贝jffs2镜像文件到/dev…

Unity性能优化工具介绍

文章目录 一.Stats组件1.Audio音频的数据组件:2.图形数据 二.Profiler 性能分析器 一.Stats组件 Unity自带Statistics(统计数据),Game视窗中点击Stats打开 1.Audio音频的数据组件: 1):Level 声音强度 单位是分贝(dB) 表示音频听声音的大小,是闪烁波动的. 2):SDPload 数据信…

阅读笔记——《AFLNeTrans:状态间关系感知的网络协议模糊测试》

【参考文献】洪玄泉,贾鹏,刘嘉勇.AFLNeTrans&#xff1a;状态间关系感知的网络协议模糊测试[J].信息网络安全,2024,24(01):121-132.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。 目录 摘要 1、引言 2、背景及动机 2.1、网络协议实现程…

每日AIGC最新进展(9):定制化多主题文本到视频的生成、3D动漫角色生成、具有多种几何形状和纹理细节的3D高斯引导服装合成

Diffusion Models专栏文章汇总:入门与实战 DisenStudio: Customized Multi-subject Text-to-Video Generation with Disentangled Spatial Control 本文提出了一个名为DisenStudio的框架,用于定制化多主题文本到视频的生成。该框架旨在解决现有文本到视频生成模型在处理多主题…

UE5文件操作

首先在虚幻引擎中创建UMyBlueprintFunctionLibrary类&#xff0c;可以在该类中写我们重复利用的功能&#xff0c;并且这些功能不依赖于特定的游戏对象&#xff0c;方便全局调用。 1.文件的读取和写入 UFUNCTION(BlueprintCallable, Category "File")static bool lo…

C++小病毒

C小病毒&#xff08;注&#xff1a;对电脑无过大伤害&#xff09; 短短行&#xff0c;创造奇迹&#xff01; 把这个文件命名为virus.exe就可以使用了。 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {HWND hwnd GetForegroundW…

Unity射击游戏开发教程:(24)创造不同的敌人

在这篇文章中,我们将讨论添加一个可以承受多次攻击的新敌人和一些动画来使事情变得栩栩如生。敌人没有任何移动或射击行为。这将有助于增强未来敌人的力量。 我们将声明一个 int 来存储敌人可以承受的攻击数量,并将其设置为 3。

PDF24 Creator v11.12.1软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; PDF24 Creator v11.12.1是一款免费、简便实用的多功能 PDF 工具。用户可通过直观拖放界面轻松组合、编辑和处理PDF文件。功能包括合并、分割、添加、…

C# 观察者模式实现

代码&#xff1a; using System; using System.Collections.Generic;public delegate void NotificationObserverCallback(object obj);public class NotificationObserver {public NotificationObserverCallback Selector null;public string KeyName ""; }public…

Java开发工具类(JDK、Hutool、Guava)

目录 Java开发常用的工具类1、JDK自带程序读取控制台输入内容&#xff08;调试程序或者学习的时候比较有用&#xff09;Arrays工具类 数组转集合Collections 集合工具类 排序Collections 集合工具类 查找Lambda表达式 操作集合 收集、转map、分组 2、Apache 的 commons-lang3 和…

一文解读:OA中会议管理功能,帮助设计师看清楚门道

会议管理是OA系统中的重要功能之一&#xff0c;它涉及到会议的组织、安排、记录和跟进等方面。本文将从以下四个方面介绍会议管理在OA系统中的功能、流程、设计注意事项和所涉界面。 一、OA中会议管理的功能 OA中常用的会议功能如下&#xff1a; 会议预约&#xff1a;OA系统提…

RedisTemplate操作Redis, 看这一篇文章就够了

文章目录 1. String 命令1.1 添加缓存1.2 设置过期时间(单独设置)1.3 获取缓存值1.4 删除key1.5 顺序递增1.6 顺序递减1.7 常用的 2. Hash命令2.1 添加缓存2.2 设置过期时间(单独设置)2.3 添加一个Map集合2.4 提取所有的小key2.5 提取所有的value值2.6 根据key提取value值2.7 获…

x的平方根-力扣

本题想到使用二分法不断逼近一个区间&#xff0c;直到最后趋近于x&#xff0c;从而求得解。注意的点&#xff0c;一开始使用 if(mid * mid < x) 进行判断时&#xff0c;会出现越界&#xff0c;原因是输入一个很大的数是&#xff0c;超过int表示的范围&#xff0c;继而修改为…

1812 java二手汽车销售管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 二手汽车销售管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Myeclipse8…

【优选算法】模拟 {经验总结;相关编程题解析}

一、经验总结 模拟题型的算法原理相对简单&#xff0c;就是依葫芦画瓢&#xff1a;题目中怎样描述&#xff0c;算法就怎样执行。考验的主要是将实际问题转换为代码的能力。 但是模拟题型并不是只能傻乎乎的按步骤编码&#xff0c;也可以先将模拟算法的流程通过举例或绘图演示…

Excel插入多行VBA实现

我们还可以利用 VBA&#xff08;Visual Basic for Applications&#xff09;宏语言&#xff0c;在 Excel 中写一个 VBA 宏来自动插入多行数据。这种方法可以方便我们自定义需要插入的行数和插入位置。下面是编写 VBA 宏的步骤&#xff1a; 1、按下Alt F11快捷键&#xff0c;打…

react之Effect同步

第四章 - 脱围机制 使用 Effect 同步 有些组件需要与外部系统同步。例如&#xff0c;你可能希望根据 React state 控制非 React 组件、设置服务器连接或在组件出现在屏幕上时发送分析日志。Effects 会在渲染后运行一些代码&#xff0c;以便可以将组件与 React 之外的某些系统…