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

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实现了对应用的抽象,使得应用的描述、版本控制和发布变得更加简单和高效。

十、应用

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

相关文章:

  • 零依赖本地调试:VectorDB Lite +VectorDB CLI 高效构建向量数据库全流程
  • 多线程编程技术详解与实践(java篇)
  • java学习笔记——数组和二维数组
  • 使用反射对任意对象进行二进制序列化的程序
  • Gemini开源项目DeepResearch:基于LangGraph的智能研究代理技术原理与实现
  • 目标检测实战:让AI“看见“并定位物体(superior哥AI系列第11期)
  • Offline Transition Modeling via Contrastive Energy Learning
  • Nginx学习笔记
  • 百事公司借力一级方程式赛车拓展全球市场
  • gc2053驱动学习笔记
  • Python训练营---Day45
  • 60天python训练计划----day45
  • 《汇编语言》第15章 外中断
  • 从《现实不似你所见》探寻与缘起性空的思想交织
  • 【定昌linux开发板】关闭ssh 端口 22
  • 使用DrissionPage与Tkinter构建专业级抖音数据分析工具
  • 对象数组练习(增删改查)
  • 基于STM32的DS18B20温度远程监测LCD1602显示
  • float和float32有什么区别
  • ArcGIS Pro 3.4 二次开发 - 宗地
  • f2c网站建设/如何进行网络营销推广
  • 护士公共课在哪个网站做/营销手段
  • 网站备案有用/武汉百度百科
  • 湖北新闻网官方网站/网络营销公司名字大全
  • 门户网站规划方案/如何优化seo技巧
  • 南宁做网站推广的公司哪家好/铜川网络推广