k8s配置pods滚动发布
背景
采用微服务架构部署的应用,部署方式都要用到容器化部署+k8s容器编排,最近我在公司负载的系统也是用的上述架构部署,但是随着系统的运行,用户提的需求就会越多,每次更新的话都要停机发布,最用户侧来说就不太方便了,传统的部署方式是使用nginx来做负载均衡,然后手动来做滚动发布,殊不知k8s也有自己的一套配置,来解决滚动发布的事情,并且系统发布时用户侧其实是无感知的;
配置文件代码
先上代码,再讲解各个参数的含义
apiVersion: apps/v1
kind: Deployment
metadata: name: my-app-deployment labels: app: my-app
spec: replicas: 3 selector: matchLabels: app: my-app strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: your-image-repository/my-app:latest ports: - containerPort: 8080 readinessProbe: httpGet: path: /system/health/readniess port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: httpGet: path: /system/health/readniess port: 8080 initialDelaySeconds: 15 periodSeconds: 20minReadySeconds: 50
配置参数说明
这里的配置文件中主要用到了strategy,readinessProbe,livenessProbe等主要的参数,下面讲解一下这写参数的含义;
strategy
将现有 Pod 替换为新 Pod 时所用的部署策略。其下面有以下可用参数:
type:部署的类型。取值可以是 “Recreate” 或 “RollingUpdate”。默认为 RollingUpdate;Recreate是重建式更新,在创建新 Pod 之前,所有现有的 Pod 会被杀死;RollingUpdate是滚动更新,简单定义 更新期间pod最多有几个等。可以指定maxUnavailable 和 maxSurge 来控制 rollingupdate 进程;Recreate会导致站点的停机,RollingUpdate则可以通过相关的配置,保证站点正常接收流量的情况下,部署新版本升级,不影响用户使用;
rollingUpdate 当type=rollingUpdate时才需设置此参数,rollingUpdate下的参数有如下这些:
- maxSurge :超出预期的 Pod 数量之后可以调度的最大 Pod 数量。该值可以是一个绝对数(例如: 5)或一个预期 Pod 的百分比(例如:10%)。如果 MaxUnavailable 为 0,则此字段不能为 0。 通过向上取整计算得出一个百分比绝对数。默认为 25%。例如:当此值设为 30% 时, 如果滚动更新启动,则可以立即对 ReplicaSet 扩容,从而使得新旧 Pod 总数不超过预期 Pod 数量的 130%。 一旦旧 Pod 被杀死,则可以再次对新的 ReplicaSet 扩容, 确保更新期间任何时间运行的 Pod 总数最多为预期 Pod 数量的 130%
- maxUnavailable :更新期间可能不可用的最大 Pod 数量。该值可以是一个绝对数(例如: 5)或一个预期 Pod 的百分比(例如:10%)。通过向下取整计算得出一个百分比绝对数。 如果 MaxSurge 为 0,则此字段不能为 0。默认为 25%。 例如:当此字段设为 30%,则在滚动更新启动时 ReplicaSet 可以立即缩容为预期 Pod 数量的 70%。 一旦新的 Pod 就绪,ReplicaSet 可以再次缩容,接下来对新的 ReplicaSet 扩容, 确保更新期间任何时间可用的 Pod 总数至少是预期 Pod 数量的 70%
readinessProbe
就绪探针;指示容器是否准备好为请求提供服务。如果就绪态探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。 初始延迟之前的就绪态的状态值默认为 Failure。 如果容器不提供就绪态探针,则默认状态为 Success。
例如,应用在启动时可能需要加载大量的数据或配置文件,或是启动后要依赖等待外部服务。 在这种情况下,既不想杀死应用,也不想给它发送请求。 Kubernetes 提供了就绪探针来发现并缓解这些情况。 容器所在 Pod 上报还未就绪的信息,并且不接受通过 Kubernetes Service 的流量。
说明:就绪探针在容器的整个生命周期中保持运行状态。也就是说配置后就绪探针会一直运行,确服务是否就绪状态;
就绪探针可以使用使用 HTTP GET 请求、TCP 套接字、exec、 gRPC 健康检查协议来进行探测,我这里使用的是http请求后台服务的一个接口来判断应用是否已经启动好了,如果启动好了,那就对外部提供服务;
就绪探针下常用的参数配置:
initialDelaySeconds:容器启动后要等待多少秒后才启动启动、存活和就绪探针。 如果定义了启动探针,则存活探针和就绪探针的延迟将在启动探针已成功之后才开始计算。 如果 periodSeconds 的值大于 initialDelaySeconds,则 initialDelaySeconds 将被忽略。默认是 0 秒,最小值是 0。
periodSeconds:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。
failureThreshold:探针连续失败了 failureThreshold 次之后, Kubernetes 认为总体上检查已失败:容器状态未就绪、不健康、不活跃。 对于启动探针或存活探针而言,如果至少有 failureThreshold 个探针已失败, Kubernetes 会将容器视为不健康并为这个特定的容器触发重启操作。 kubelet 遵循该容器的 terminationGracePeriodSeconds 设置。 对于失败的就绪探针,kubelet 继续运行检查失败的容器,并继续运行更多探针; 因为检查失败,kubelet 将 Pod 的 Ready 状况设置为 false。
其他常用的配置可以查阅官网 k8s官网
livenessProbe
指示容器是否准备好为请求提供服务。如果就绪态探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。 初始延迟之前的就绪态的状态值默认为 Failure。 如果容器不提供就绪态探针,则默认状态为 Success。
存活探针来确定什么时候要重启容器。 例如,存活探针可以探测到应用死锁(应用在运行,但是无法继续执行后面的步骤)情况。 重启这种状态下的容器有助于提高应用的可用性,即使其中存在缺陷。
存活探针的常用参数和就绪探针完全一致,可以参考存活探针的使用方法;
最后我的配置文件内还使用了minReadySeconds参数,他的意思是:新建的 Pod 在没有任何容器崩溃的情况下就绪并被系统视为可用的最短秒数。 默认为 0(Pod 就绪后即被视为可用)。
相关文章:

k8s配置pods滚动发布
背景 采用微服务架构部署的应用,部署方式都要用到容器化部署k8s容器编排,最近我在公司负载的系统也是用的上述架构部署,但是随着系统的运行,用户提的需求就会越多,每次更新的话都要停机发布,最用户侧来说就…...

C++vector的简单模拟实现
文章目录 目录 文章目录 前言 一、vector使用时的注意事项 1.typedef的类型 2.vector不是string 3.vector 4.算法sort 二、vector的实现 1.通过源码进行猜测vector的结构 2.初步vector的构建 2.1 成员变量 2.2成员函数 2.2.1尾插和扩容 2.2.2operator[] 2.2.3 迭代器 2…...

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):快启
前言: 汽车仪表是人们了解汽车状况的窗口,而仪表中的大部分信息都是以指示灯形式显示给驾驶者。仪表指示灯图案都较为抽象,对驾驶不熟悉的人在理解仪表指示灯含义方面存在不同程度的困难,尤其对于驾驶新手,如果对指示灯的含义不求甚解,有可能影响驾驶的安全性。即使是对…...

基于springboot+vue的招聘信息管理系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

使用STM32F103标准库实现自定义键盘
使用STM32F103标准库实现自定义键盘 在嵌入式系统中,自定义键盘的实现是一个经典的项目,能够帮助我们深入理解GPIO配置、按键扫描和中断处理等知识。本文将详细介绍如何使用STM32F103标准库来实现一个简单的自定义键盘。 1. 准备工作 1.1 硬件准备 S…...

面试八股之JVM篇3.5——垃圾回收——G1垃圾回收器
🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 🏃人生之义,在于追求,不在成败,勤通…...

解决LabVIEW通过OPC Server读取PLC地址时的错误180121602
在使用LabVIEW通过OPC Server读取PLC地址时,若遇到错误代码180121602,建议检查网络连接、OPC Server和PLC配置、用户权限及LabVIEW设置。确保网络畅通,正确配置OPC变量,取消缓冲设置以实时读取数据,并使用诊断工具验证…...

npm,yarn,cnpm,tyarn,pnpm 安使用装配置镜像
npm 安装 安装node后就可以使用了 官方默认地址 npm config set registry https://registry.npmjs.org 镜像 npm config set registry https://registry.npm.taobao.org npm config set registry http://registry.npmmirror.org全局安装依赖 npm install -g <包名&g…...

使用python将一段文本写入一个txt文件中且先格式化文件名
有一段文本内容,有“标题”和“内容”组成。 任务:要将这段文本,存放到一个txt文件中,文件名为当天的日期加上“标题”内容。因为“标题”内可能有/<>之类的,还需要格式化一下。 已经将上述功能都写成了函数&a…...

前端 CSS 经典:元素倒影
前言:好看的元素倒影,可以通过-webkit-box-reflect 实现。但有兼容问题,必须是 webkit 内核的浏览器,不然没效果。但是好看啊。 效果图: 代码实现: <!DOCTYPE html> <html lang"en"&g…...

ROS学习记录:用C++实现IMU航向锁定
前言 获取IMU数据的C节点 在了解了如何获取到IMU的姿态信息(链接在上面)后,接下来尝试实现让一个节点在订阅IMU数据的时候,还能发布运动控制指令,使机器人能对姿态变化做出反应,达到一个航向锁定的效果。 …...

设计模式-策略模式-使用
设计模式-策略模式-CSDN博客 系统中有很多类,它们之间的区别仅在于它们的行为。策略模式可以定义一系列的算法,并将它们一个个封装起来,使它们可以相互替换。这样,算法就可以独立于使用它的客户而变化。需要使用算法的不同变体。…...

WebSocket——相关介绍以及后端配置
一、WebSocket介绍: WebSocket是一种在单个TCP连接上进行全双工通信的协议,旨在改进客户端和服务器之间的实时通信。以下是关于WebSocket的详细介绍: 1、定义与标准 WebSocket是独立的、创建在TCP上的协议,通过HTTP/1.1协议的10…...

单片机设计注意事项
1.电源线可以30mil走线,信号线可以6mil走线 2.LDO推荐 SGM2019-3.3,RT9013,RT9193,1117-3.3V。 3.单片机VCC要充分滤波后再供电,可以接0.1uf的电容 4.晶振附件不要走其他元件,且放置完单片机后就放置晶振,晶振靠近X1,X2。...

Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装
目录 一、查询推荐安装的驱动版本 二、安装推荐版本的驱动 1. 通过终端安装,只安装 nvidia 驱动(亲测可用!) 2. 通过 software & Updates 安装,安装 nvidia 驱动。 三、查询能安装的最新的显卡驱动版本 1. 方…...

如何选择一款安全高效的数据自动同步工具?
随着科技的不断发展,企业处理的数据量愈发庞大。数字化浪潮的涌现使得数据在业务活动和决策中的角色变得日益重要,然而这些数据往往分布在不同的位置,需要进行同步和分类,以便更有效地利用。以下是一些常见的数据自动同步场景&…...

【linux】docker下nextcloud安装人脸识别插件
一、插件源码地址: GitCode - 开发者的代码家园 二、插件官网地址: Releases - Face Recognition - Apps - App Store - Nextcloud 三、插件安装教程: 1、查看本地nextcloud版本号 http://ipAddress:8080/settings/admin/overview 2、找…...

2. C++服务器编程-信号
什么是信号 其实信号就是一个中断。就是在执行程序的时候突然来了一个信号,然后我们去执行这个新来的程序了,这就是中断。 处理方法 信号的处理方式∶忽略、捕获、默认处理 linux中都有那些信号 man7 signal 比如说kill -9 安装man中文手册 自己百…...

C#_库的引用
类库的引用 还可以自己引用类库:解决方案-添加-新建项目 主程序 using System; using System.Windows.Forms; using Tools;namespace ConsoleApp2 {class Program{static void Main(string[] args){//Console.WriteLine("helloword");// Form form ne…...

C++:STL—算法
C:STL—算法 算法 算法 STL(Standard Template Library)中的算法是为了操作数据集合(如容器)而设计的函数模板集合,它们提供了丰富的功能和灵活的接口,可以用于对数据进行排序、查找、遍历等操作。STL中的…...

深入探索:移动云服务器的强大之处
文章目录 一 什么是移动云二 移动云服务器的使用三 移动云服务器的优点四 在移动云上部署node.js项目五 移动云服务器的应用场景六 移动云服务器的使用体验总结 一 什么是移动云 移动云是指用户可以通过移动设备访问云端的数据和应用,无需在本地设备上进行存储和处…...

线性表(从数据结构的三要素出发)
文章目录 逻辑结构存储结构顺序存储链式存储单链表双链表循环单链表循环双链表静态链表 数据的操作顺序结构链式结构单链表双链表 逻辑结构 线性表是具有相同数据类型的 n ( n ≥ 0 ) n(n≥0) n(n≥0)个数据元素的有限序列,其中 n n n为表长,当 n 0 n0…...

[SCTF2019]babyre
打开看看还是有花指令 解除后首先pass1是解maze,好像又是三维的 x是25,也就是向下跳五层,注意是立体的 得到 passwd1: ddwwxxssxaxwwaasasyywwdd 接着往下看 有一个加密函数IDA逆向常用宏定义_lodword-CSDN博客 unsigned __int64 __fastca…...

uniapp实现下拉过滤查询列表
<picker bindchange"bindPickerChanges" value"{{selectedIndex}}"range"{{pickerArray}}"range-key"name"><view class"area-select">在线状态:<label for"">{{pickerArray[select…...

C++—— set、map、multiset、multimap的介绍及使用
目录 关联式容器 关联式容器的特点和使用场景 树形结构与哈希结构 树形结构 哈希结构 键值对 set set的介绍 set的定义方式 set的使用 multiset map map的介绍 map的定义方式 map的使用 multimap 关联式容器 C标准模板库(STL)中的关联…...

STM32 学习——1. STM32最小系统
这是一个最小系统的测试,LED灯会进行闪烁。选用PC13口,因为STM32F103C8T6 硬件开发板中,这个端口是一个LED 1. proteus8.15 原理图 2. cubemx 新建工程 3. keil 代码 while (1){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);HAL_Delay(100);…...

react实现table可拖拽表头(给react-jss样式传递参数、滚动条样式)
目录 react实现table可拖拽表头安装依赖resizableTitle / index.tsxdrapTable.tsx使用DragTable 组件滚动条样式效果 react实现table可拖拽表头 安装依赖 yarn add react-resizable yarn add react-jssresizableTitle / index.tsx import { createUseStyles } from react-js…...

如何跨过robots协议的限制爬取内容?
在讨论如何“跨过robots协议的限制爬取内容”之前,重要的是强调遵循网络礼仪和法律法规的必要性。robots协议(Robots Exclusion Standard)是网站所有者向网络爬虫(包括搜索引擎和其他自动化工具)传达其爬取意愿的一种方…...

Parasoft C++Test软件静态分析操作指南_编码规范/标准检查
系列文章目录 Parasoft CTest软件安装指南 Parasoft CTest软件静态分析操作指南_编码规范/标准检查 Parasoft CTest软件静态分析操作指南_软件质量度量 Parasoft CTest软件静态分析_自动提取静态分析数据生成文档 Parasoft CTest软件单元测试_操作指南 Parasoft CTest软件单元…...

[AIGC] CompletableFuture如何实现任务链式调用?
Java 中的 CompletableFuture 提供了多种方法来支持任务链式调用。这些方法允许你将一组操作链接在一起,形成一个任务链,每一个任务只有在上一个任务成功完成后才会被执行。现在,我们来看一下一些常用的链接任务的方法: thenAppl…...