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

Deployment实现扩展/收缩,以及滚动更新

一、Deployment概述

  • 功能‌:实现了Pod的“水平扩展/收缩”(horizontal scaling out/in),是Kubernetes中重要的编排能力。
  • 核心概念‌:依赖ReplicaSet API对象实现。

二、ReplicaSet详解

  • 定义‌:由副本数目的定义和一个Pod模板组成。
  • 结构‌:
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:name: nginx-setlabels:app: nginx
    spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9
  • 关系‌:ReplicaSet是Deployment的一个子集,Deployment通过操纵ReplicaSet来间接控制Pod。

三、Deployment与ReplicaSet、Pod的关系

  • 关系图‌:

    Deployment → ReplicaSet → Pod

  • 解释‌:
    • ReplicaSet‌:负责保证系统中Pod的个数等于指定的个数。
    • Deployment‌:通过操作ReplicaSet的个数和属性,实现“水平扩展/收缩”和“滚动更新”。

四、水平扩展/收缩

  • 实现方式‌:Deployment Controller修改ReplicaSet的Pod副本个数。
  • 命令示例‌:
    kubectl scale deployment nginx-deployment --replicas=4

五、滚动更新

  • 定义‌:通过交替升级Pod的方式,实现应用的平滑升级。
  • 策略配置‌:
    spec:strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 1
    • maxSurge‌:除了期望的Pod副本数之外,最多可以额外创建的Pod数。
    • maxUnavailable‌:在升级过程中,最多可以同时不可用的Pod数。
  • 触发方式‌:修改Deployment的Pod模板。
  • 过程‌:
    1. 创建一个新的ReplicaSet,初始Pod副本数为0。
    2. 逐步将新ReplicaSet的Pod副本数增加到指定值,同时将旧ReplicaSet的Pod副本数减少到0。
    3. 在整个过程中,确保只有指定数量的Pod处于不可用状态,同时只有指定数量的新Pod被创建。
  • 命令示例‌:
    kubectl set image deployment/nginx-deployment nginx=nginx:1.91
  • 状态查看‌:
    kubectl rollout status deployment/nginx-deployment

六、滚动更新的好处

  • 服务连续性‌:在升级过程中,始终有部分旧版本的Pod在线,减少服务中断的风险。
  • 健康检查‌:依赖Pod的HealthCheck机制,确保新版本的Pod正常运行后再进行替换。

七、版本控制与回滚

  • 版本记录‌:使用kubectl rollout history查看Deployment的变更历史。
  • 回滚命令‌:
    kubectl rollout undo deployment/nginx-deployment
  • 回滚到指定版本‌:
    kubectl rollout undo deployment/nginx-deployment --to-revision=2

八、优化ReplicaSet生成

  • 暂停滚动更新‌:使用kubectl rollout pause暂停Deployment,修改后再恢复。
  • 恢复滚动更新‌:使用kubectl rollout resume恢复Deployment。
  • 控制历史版本数量‌:通过spec.revisionHistoryLimit字段限制保留的历史ReplicaSet数量。

九、总结

  • Deployment的两层控制关系‌:
    • Deployment控制ReplicaSet(版本)
    • ReplicaSet控制Pod(副本数)
  • 抽象与应用‌:Kubernetes通过Deployment实现了对应用的抽象,使得应用的描述、版本控制和发布变得更加简单和高效。

十、应用

  • 金丝雀发布和蓝绿发布‌:
    • 金丝雀发布‌:先发布少量机器进行验证,无误后再全面更新。
    • 蓝绿发布‌:准备两组机器,一组为当前版本(蓝),一组为新版本(绿),通过切换流量实现更新。
http://www.xdnf.cn/news/12192.html

相关文章:

  • 数据结构第八章(二)-交换排序
  • dvwa14——JavaScript
  • 多层PCB技术解析:从材料选型到制造工艺的深度实践
  • Python 训练营打卡 Day 44
  • Linux下JSON序列化与反序列化方法
  • Python Day44
  • 数据可视化大屏案例落地实战指南:捷码平台7天交付方法论
  • 【达梦数据库】OOM问题排查思路
  • React 新项目
  • OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本
  • Spring框架学习day7--SpringWeb学习(概念与搭建配置)
  • Eureka REST 相关接口
  • 云原生思维重塑数字化基座:从理念到实践的深度剖析
  • Python基于蒙特卡罗方法实现投资组合风险管理的VaR与ES模型项目实战
  • Django CMS 的 Demo
  • 每日算法 -【Swift 算法】三数之和最接近目标值
  • Golang——9、反射和文件操作
  • Redis:介绍和认识,通用命令,数据类型和内部编码,单线程模型
  • 深入浅出玩转物联网时间同步:基于BC260Y的NTP实验与嵌入式仿真教学革命
  • 从《现实不似你所见》探寻与缘起性空的思想交织
  • MySQL间隙锁入手,拿下间隙锁面试与实操
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: TTask创建多线程, 更简单, 更快捷.
  • 报告精读:“数据银行”概念模型与建设规划研究报告【附全文阅读】
  • JavaSec-SSTI - 模板引擎注入
  • 【ArcGIS应用】ArcGIS‌应用如何进行影像分类?
  • adb 连不上真机设备问题汇总
  • ros2--图像/image
  • halcon c# 自带examples报错 Matching
  • JVM中的各类引用
  • 设计模式域——软件设计模式全集