当前位置: 首页 > news >正文

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下的参数有如下这些:

  1. maxSurge :超出预期的 Pod 数量之后可以调度的最大 Pod 数量。该值可以是一个绝对数(例如: 5)或一个预期 Pod 的百分比(例如:10%)。如果 MaxUnavailable 为 0,则此字段不能为 0。 通过向上取整计算得出一个百分比绝对数。默认为 25%。例如:当此值设为 30% 时, 如果滚动更新启动,则可以立即对 ReplicaSet 扩容,从而使得新旧 Pod 总数不超过预期 Pod 数量的 130%。 一旦旧 Pod 被杀死,则可以再次对新的 ReplicaSet 扩容, 确保更新期间任何时间运行的 Pod 总数最多为预期 Pod 数量的 130%
  2. 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文件中且先格式化文件名

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

前端 CSS 经典:元素倒影

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

ROS学习记录:用C++实现IMU航向锁定

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

设计模式-策略模式-使用

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

WebSocket——相关介绍以及后端配置

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

单片机设计注意事项

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

Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装

目录 一、查询推荐安装的驱动版本 二、安装推荐版本的驱动 1. 通过终端安装&#xff0c;只安装 nvidia 驱动&#xff08;亲测可用&#xff01;&#xff09; 2. 通过 software & Updates 安装&#xff0c;安装 nvidia 驱动。 三、查询能安装的最新的显卡驱动版本 1. 方…...

如何选择一款安全高效的数据自动同步工具?

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

【linux】docker下nextcloud安装人脸识别插件

一、插件源码地址&#xff1a; GitCode - 开发者的代码家园 二、插件官网地址&#xff1a; Releases - Face Recognition - Apps - App Store - Nextcloud 三、插件安装教程&#xff1a; 1、查看本地nextcloud版本号 http://ipAddress:8080/settings/admin/overview 2、找…...

2. C++服务器编程-信号

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

C#_库的引用

类库的引用 还可以自己引用类库&#xff1a;解决方案-添加-新建项目 主程序 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&#xff08;Standard Template Library&#xff09;中的算法是为了操作数据集合&#xff08;如容器&#xff09;而设计的函数模板集合&#xff0c;它们提供了丰富的功能和灵活的接口&#xff0c;可以用于对数据进行排序、查找、遍历等操作。STL中的…...

2026年冷干机十大品牌深度测评:从能效到服务的工业级选型指南

冷冻式干燥机&#xff08;冷干机&#xff09;作为压缩空气系统的“水分守门员”&#xff0c;直接影响工业生产的稳定性——食品加工的卫生级空气、电子制造的低露点要求、化工行业的腐蚀防护&#xff0c;都依赖冷干机的可靠运行。对于处于购买阶段的企业而言&#xff0c;选型的…...

Gemma-3-12b-it开源大模型教程:Transformers + PIL + Gradio全栈整合

Gemma-3-12b-it开源大模型教程&#xff1a;Transformers PIL Gradio全栈整合 1. 项目概述 Gemma-3-12b-it是一个基于Google最新开源大模型的多模态交互工具&#xff0c;专为本地化部署设计。这个工具将强大的12B参数大模型与直观的用户界面相结合&#xff0c;让开发者能够轻…...

LangChain + LangGraph:多 Agent 流程的“积木层”与“编排层”全解析,轻松搭建企业级智能系统!

本文深入解析了 LangChain 和 LangGraph 在多 Agent 系统中的应用。LangChain 作为“通用积木层”&#xff0c;提供统一模型接口、消息格式、Prompt、Tool、Retriever、结构化输出、Middleware 等能力&#xff0c;便于快速构建 Agent。LangGraph 则作为“编排/状态机层”&#…...

Linux I/O 演进史:从管道到零拷贝,一篇串起个服务端核心原语阑

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时&#xff0c;输出结果中包含大量由集群自动生成的元数据&#xff08;如 managedFields、resourceVersion、uid 等&#xff09;。这些信息在实际复用 yaml 清单时需要手动清理&#xff0c;增加了额外的工作量。 使用 kube…...

RP2040上的CBUS协议栈:CAN总线模型铁路通信实现

1. CBUSACAN2040 库深度解析&#xff1a;面向 RP2040 平台的 MERG CBUS 协议栈实现1.1 项目定位与工程价值CBUSACAN2040 是一个专为 Raspberry Pi Pico&#xff08;RP2040&#xff09;系列微控制器设计的嵌入式通信库&#xff0c;其核心使命是将英国模型铁路电子组织 MERG&…...

OpenClaw调试技巧:Qwen3.5-9B-AWQ-4bit任务执行日志分析

OpenClaw调试技巧&#xff1a;Qwen3.5-9B-AWQ-4bit任务执行日志分析 1. 为什么需要关注OpenClaw日志 第一次用OpenClaw对接Qwen3.5-9B-AWQ-4bit模型时&#xff0c;我遇到了一个典型问题&#xff1a;任务明明显示"执行成功"&#xff0c;但最终输出结果却牛头不对马嘴…...

AI写论文软件哪个最好?精选7款AI论文生成神器,轻松掌握毕业论文!

你是否曾在深夜面对空白文档&#xff0c;为论文框架和文献综述绞尽脑汁&#xff1f;从本科生到博士生&#xff0c;从职场评职称到科研发表&#xff0c;论文写作始终是绕不开的挑战。别担心&#xff01;如今AI论文写作工具已成为提升效率的利器&#xff0c;尤其是一些专业工具能…...

用 Microsoft Agent Framework 构建 SubAgent(Multi-Agent)伎

本文能帮你解决什么&#xff1f; 1. 搞懂FastAPI异步&#xff08;async/await&#xff09;到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑&#xff08;比如阻塞操作、数据库连接池耗尽、GIL限制&#xff09;。 …...

设置echarts 图例为长方形

在 ECharts 中&#xff0c;要将图例&#xff08;legend&#xff09;的 标记&#xff08;icon&#xff09; 设置为 长方形&#xff08;矩形&#xff09;&#xff0c;可以通过 legend 配置项中的 icon 属性来实现。✅ 方法&#xff1a;使用 icon: rect ECharts 内置了多种图例标记…...

CKKS 同态加密数学基础推导昧

背景 StreamJsonRpc 是微软官方维护的用于 .NET 和 TypeScript 的 JSON-RPC 通信库&#xff0c;以其强大的类型安全、自动代理生成和成熟的异常处理机制著称。在 HagiCode 项目中&#xff0c;为了通过 ACP (Agent Communication Protocol) 与外部 AI 工具&#xff08;如 iflow …...