首页 > 其他分享 >在K8S中,Deployment 升级过程有哪些?

在K8S中,Deployment 升级过程有哪些?

时间:2024-10-09 13:21:57浏览次数:10  
标签:ReplicaSet Kubernetes 哪些 升级 版本 Deployment Pod K8S

在Kubernetes(K8s)中,Deployment的升级过程是一个受控且平滑的过程,用于将应用的新版本无缝地替换旧版本。以下是Deployment升级过程的详细步骤:

1. 更新Deployment配置
  1. 准备新版本镜像或配置:
    • 确定新版本的应用程序镜像或需要更改的配置。
    • 更新Deployment的YAML配置文件,例如更改镜像标签到新版本的应用程序镜像,或修改应用配置(如环境变量、命令参数等)。
  2. 应用更改:
    • 通过kubectl apply命令或API调用将新的配置应用到集群中。例如,kubectl apply -f my-deployment.yaml
2. Deployment控制器检测到配置变化
  1. 开始执行滚动更新策略:
    • Kubernetes Deployment控制器检测到配置变化后,会开始执行滚动更新(Rolling Update)策略。这是Deployment的默认升级策略。
3. 滚动更新过程
  1. 创建新的ReplicaSet:
    • Deployment控制器根据新的Pod模板创建一个新的ReplicaSet。
    • 新的ReplicaSet开始创建并启动指定数量的新Pod,同时确保任何时候集群中至少有一部分旧Pod仍在提供服务。
  2. 逐步替换旧Pod:
    • 滚动更新策略会按照ReplicaSet中的Pod副本数量和指定的.spec.strategy.rollingUpdate.maxUnavailable.spec.strategy.rollingUpdate.maxSurge参数来逐步创建新版本Pod,并同时删除旧版本Pod。
    • maxUnavailable定义了可以有多少个Pod不可用(未就绪)而不会影响服务的整体可用性。
    • maxSurge则指定了可以比期望副本数多创建多少个Pod,以加速升级过程。
  3. 健康检查:
    • 在每个新Pod被创建之后,Kubernetes会根据定义的livenessProbe(存活探针)和readinessProbe(就绪探针)来检查新Pod是否已经启动并准备好接收流量。
    • 当新Pod通过健康检查并标记为“就绪”时,Service会逐渐将流量从旧Pod转移到新Pod。
  4. 完成替换:
    • 一旦所有旧Pod都被新Pod替换并且新版本的所有Pod都已准备就绪,则升级过程结束。
4. 监控与回滚
  1. 监控状态:
    • 在升级过程中,可以通过kubectl或Kubernetes Dashboard监控Deployment的状态以及Pod的健康状况。
  2. 回滚操作:
    • 如果在升级过程中发现问题,可以立即执行回滚操作回到上一个已知稳定版本。
    • Kubernetes自动维护着每个Deployment的历史记录,允许用户轻松地基于修订历史(revision history)回滚到之前任何一个版本。
5. 清理与验证
  1. 清理旧资源:
    • 一旦验证新版本的应用程序正常工作,可以考虑清理旧的ReplicaSet和Pod副本,以释放资源。不过通常这些旧的ReplicaSet会被保留一段时间,以备回滚之需。
  2. 验证新版本:
    • 测试新版本应用程序的功能,确保一切正常。
6. 其他操作
  1. 暂停与恢复更新:
    • 在滚动更新过程中,如果需要暂停更新过程,可以使用kubectl rollout pause deployment命令。这会阻止新的Pod创建,但不会影响现有Pod的运行。
    • 当准备好继续时,可以使用kubectl rollout resume deployment命令继续滚动更新。
  2. 检查更新状态:
    • 使用kubectl rollout status deployment命令来检查滚动更新的状态。

综上所述,Kubernetes中的Deployment升级过程旨在实现最小的服务中断和最大程度的可恢复性。通过滚动更新策略、健康检查、监控与回滚机制等,可以确保应用程序在升级过程中的稳定性和可靠性。

标签:ReplicaSet,Kubernetes,哪些,升级,版本,Deployment,Pod,K8S
From: https://www.cnblogs.com/huangjiabobk/p/18454027

相关文章

  • 在K8S中,初始化容器(initcontainer)作用是什么?
    在Kubernetes(K8s)中,初始化容器(InitContainer)是一种特殊的容器,它在Pod的主容器启动之前运行,并执行一系列初始化任务。以下是关于初始化容器作用的详细解释:1.定义与特性定义:初始化容器是定义在Pod规格中的一个或多个容器,它们在Pod中的任何应用程序容器(即普通的容器)启动之前执行。......
  • 股市里有哪些事儿,是几乎每个人都要经历的?
    Python股票接口实现查询账户,提交订单,自动交易(1)Python股票程序交易接口查账,提交订单,自动交易(2)股票量化,Python炒股,CSDN交流社区>>>初入股市:梦想与残酷现实的碰撞初入股市的美好憧憬初入股市的投资者,就像踏入了一个充满无限可能的新世界。股市在他们眼中,仿佛是一座取之......
  • 企业文件防止外发软件有哪些
    以下是一些常见的企业文件防止外发软件:数据加密软件:可以对文件进行加密,只有授权用户才能解密和访问文件。数据丢失防护软件:可以监控文件的复制、粘贴、移动等操作,并阻止未经授权的文件外发。信息安全管理软件:可以对企业文件进行分类、标记和控制访问权限,防止文件被非授......
  • Kubernetes(K8S)介绍
    官网:Kubernetes应用部署方式演变传统部署:互联网早期,会直接将应用程序部署在物理机上;优点:简单,不需要其他技术的参与。缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容器产生影响。虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独......
  • 性能测试的类型有哪些
    目录1.基准测试2.负载测试3.压力测试4.峰值测试5.并发测试6.容积测试7.稳定性测试8.可扩展性测试9.配置测试性能测试是为测量或评估被测软件系统与性能效率相关的特性而实施的一类测试,它关注被测系统在不同负载下的各种性能效率。软件系统的性能效率相关特性的覆盖......
  • k8s 修改 pod 时区
    将时区文件挂载到Pod中在定义pod上层控制器的时候,添加一个用于挂载时区的卷,挂载宿主机的时区文件...containers:-name:xxx...volumeMounts:-name:timezonemountPath:/etc/localtimevolumes:-name:timezonehostPath:......
  • java中对比两个对象哪些字段不同(反射获取对象的字段和value值)
    场景:当需要对比两个对象的哪些字段的value值不同时,使用原理:通过反射来获取对象中每个字段的value值,进行对比1.获取需要比对对象的Class对象 比对的是obpPurQualityCheckTaskItem和obpPurQualityTaskItemExportDto对象,但因为他们是两个不同的类,所以都需要获取2.获取需要比......
  • kubekey 快速构建重构测试k8s 环境 allinone单机 or cluster 集群
    exportKKZONE=cncurl-sfLhttps://get-kk.kubesphere.io|VERSION=v3.0.13sh-生成配置k8s集群yml指定k8s版本及管理面板./kkcreateconfig--with-kubernetesv1.23.10--with-kubespherev3.4.1apiVersion:kubekey.kubesphere.io/v1alpha2kind:Clustermetada......
  • 有哪些事一看就知道一个硬件工程师是个水货?
    某网友表示,自己是一名硬件工程师,在日常工作中总能碰到对同事不满的事儿,他发现总有一些人和自己的追求不一样,从工作中的方方面面都能体现一个人的不专业,于是它总结了几条,希望能通过对“水”的批判来修正自己!1、示波器,DDS,电源,负载基本仪器原理操作不懂,电脑手机配置,基本参数......
  • 一个后端接口响应时间太长,可能有哪些原因?
    1.网络问题:网络延迟:网络拥堵、带宽限制和网络故障都可能导致请求在传输过程中延迟,影响响应时间网络不稳定:网络波动或者网络中断2.服务器性能问题服务器过度负载:在使用过程中,服务器在处理大量并发请求时,可能因为资源占用(cpu、内存、磁盘)空间不足,导致响应时间变长服务器配置不......