跨境互联网 跨境互联网
首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)

Revin

首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)
  • Docker

  • k8s

    • 基础入门-部署模式发展
    • 基础入门-k8s 概述
    • 基础入门-k8s 组件介绍
    • 基础入门-Pod使用
    • 基础入门-Pod生命周期
    • 基础入门-健康检查
    • 高级使用-Pod控制器
    • 高级使用-ReplicaSet控制器
    • 高级使用-Deployment控制器
      • 1 Deployment概述
        • 1.1 其他特性
      • 2 Deployment配置
        • 2.1 编辑资源清单
        • 2.2 配置项说明
        • 2.2.1 配置解释
        • 2.2.2 控制器描述
        • 2.3 创建控制器
        • 2.4 查看replicaset
      • 3 更新策略
        • 3.1 重建更新
        • 3.2 滚动更新
        • 配置参数
      • 4 更新控制器
        • 4.1 命令更新
        • 4.1.1 查看版本
        • 4.1.2 执行更新命令
        • 4.1.3 查看更新过程
        • 4.1.4 查看版本
        • 4.2 配置更新
        • 4.2.1 查看版本
        • 4.2.2 编辑资源清单
        • 4.2.3 应用更新
        • 4.2.4 查看更新过程
        • 4.2.5 查看版本
        • 4.3 回滚更新
        • 4.3.1 查看版本
        • 4.3.2 执行回滚命令
        • 4.3.3 查看更新过程
        • 4.3.4 查看版本
        • 4.4 再次回滚
        • 4.4.1 查看版本
        • 4.4.2 执行回滚命令
        • 4.4.3 查看更新过程
        • 4.4.4 查看版本
        • 4.5 回滚指定版本
        • 4.5.1 查看历史版本
        • 4.5.2 历史版本内容
        • 4.5.3 查看版本
        • 4.5.4 执行回滚命令
        • 4.5.5 查看版本
      • 5 Deployment扩缩容
        • 5.1 scale命令扩容
        • 5.1.1 查看当前容量
        • 5.1.2 执行扩容
        • 5.1.3 查看扩容过程
        • 5.2 配置文件缩容
        • 5.2.1 查看当前容量
        • 5.2.2 应用配置文件
        • 5.2.3 查看扩容过程
      • 6 删除Deployment
        • 6.1 查看集群情况
        • 6.1.1 查看Deployment
        • 6.1.2 查看POD
        • 6.1.3 删除Deployment
        • 6.1.4 查看Deployment
        • 6.1.5 查看POD
    • 高级使用-数据存储
    • 高级使用-pod调度策略
    • 高级使用-Service
    • 资料
  • k8s

  • Docker容器
  • k8s
Revin
2023-06-19
目录

高级使用-Deployment控制器

# 1 Deployment概述

Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新

只需要在 Deployment 中描述想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态,也可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

img

# 1.1 其他特性

Deployment控制器资源的主要职责是为了保证Pod资源的健康运行,其大部分功能均可通过调用ReplicaSet实现,同时还增添部分特性。

  • 事件和状态查看:必要时可以查看Deployment对象升级的详细进度和状态。
  • 回滚:升级操作完成后发现问题时,支持使用回滚机制将应用返回到前一个或由用户指定的历史记录中的版本上。
  • 版本记录:对Deployment对象的每一个操作都予以保存,以供后续可能执行的回滚操作使用。
  • 暂停和启动:对于每一次升级,都能够随时暂停和启动。
  • 多种自动更新方案:一是Recreate,即重建更新机制,全面停止、删除旧有的Pod后用新版本替代;另一个是RollingUpdate,即滚动升级机制,逐步替换旧有的Pod至新的版本。

# 2 Deployment配置

# 2.1 编辑资源清单

vi nginx-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  minReadySeconds: 2  # 这里需要估一个比较合理的值,从容器启动到应用正常提供服务
  strategy:  # k8s 默认的 strategy 就是 RollingUpdate, 这里写明出来可以调节细节参数
    #type: Recreate
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1  # 更新时允许最大激增的容器数,默认 replicas 的 1/4 向上取整
      maxUnavailable: 0  # 更新时允许最大 unavailable 容器数,默认 replicas 的 1/4 向下取整
  selector:
    matchLabels:
        app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 2.2 配置项说明

# 2.2.1 配置解释

  • 我们定义了一个Deployment,名字叫nginx-deployment;
  • 通过spec.replicas字段定义了Pod的副本数是2;
  • 通过minReadySeconds设置等待多长的时间后才进行升级
  • 通过spec.selector字段定义了被打上app: nginx的标签的Pod才会被管理;
  • tmplate字段定义了这个Deployment管理的Pod应该是怎样的,具有怎样的属性;

# 2.2.2 控制器描述

总的来说一个Deploymet控制器可以由两部分组成:

img

# 2.3 创建控制器

kubectl apply -f nginx-deployment.yml
kubectl get pods -o wide
1
2

image-20210521103802933

# 2.4 查看replicaset

ReplicaSet是一个副本控制器,ReplicaSet可以用selector来控制Pod的数量,而Deployments是一个更高层次的概念,它管理ReplicaSets,并提供对pod的声明性更新以及许多其他的功能。

kubectl get replicaset -o wide
1

通过查看资源对象可以看出,Deployment会自动创建相关的ReplicaSet控制器资源,并以"[DEPLOYMENT-name]-[POD-TEMPLATE-HASH-VALUE]"格式为其命名,其中的hash值由Deployment自动生成。而Pod名则是以ReplicaSet控制器的名称为前缀,后跟5位随机字符。

image-20210521103842706

# 3 更新策略

ReplicaSet控制器的应用更新需要手动分成多步并以特定的次序进行,过程繁杂且容易出错,而Deployment却只需要由用户指定在Pod模板中要改动的内容,(如镜像文件的版本),余下的步骤便会由其自动完成。Pod副本数量也是一样。

Deployment控制器支持两种更新策略:滚动更新(rolling updata)和 重建更新(recreate),默认情况下为滚动更新

# 3.1 重建更新

重建更新为:先删除所有的Pod再根据新的模板创建新的Pod,中间会导致服务的不可用,用户要么使用的是新版本,要么就是旧版本

# 3.2 滚动更新

滚动更新是默认的更新策略,它在删除一些旧版本的Pod的同时补充创建一些新的Pod,更新期间服务不会中断。

滚动更新期间,应用升级期间还要确保可用的Pod对象数量不低于某些阈值,确保可以持续处理客户端请求,变动的方式和Pod对象的数量范围将通过maxSurge和maxunavailable两个属性协同进行定义

# 配置参数

两个参数用法如下:

  • maxSurge:指定升级期间存在的总Pod对象数量最多以超出期望值的个数,其值可以为0或者正整数,也可以是一个期望值的百分比:例如如果期望值是3,当前的属性值为1,则表示Pod对象的总数不能超过4个。
  • maxUnavailable:升级期间正常可用的Pod副本数(包括新旧版本)最多不能低于期望的个数、其值可以是0或者正整数,也可以是一个期望值的百分比,默认值为1;该值意味着如果期望值是3,那么在升级期间至少要有两个Pod对象处于正常提供服务的状态

maxSurge和maxUnavailable的数量不能同时为0,否则Pod对象的复本数量在符合用户期望的数量后无法做出合理变动以进行滚动更新操作。

# 4 更新控制器

命令扩容一般用于短期的临时性扩容,应付完成后要记得缩容到原来水平

# 4.1 命令更新

# 4.1.1 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

image-20210521104513253

# 4.1.2 执行更新命令

kubectl set image deployment/nginx-deployment nginx=nginx:1.15
1

image-20210521141036311

# 4.1.3 查看更新过程

在更新前打开新窗口,监控pod的更新变化

kubectl get pods -o wide -w
1

image-20210521141234384

在更新前打开新窗口,监控RS的更新变化

kubectl get rs -o wide -w
1

我们发现更新后新建了一个RS,并且保留原来的RS但是节点数为0用来回滚

image-20210521141248541

# 4.1.4 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

image-20210521141144478

# 4.2 配置更新

# 4.2.1 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

image-20210521141313768

# 4.2.2 编辑资源清单

vi nginx-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
        app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20 # 将nginx版本改为1.20
        ports:
        - containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 4.2.3 应用更新

kubectl apply -f nginx-deployment.yml
1

image-20210521141415421

# 4.2.4 查看更新过程

在更新前打开新窗口,监控pod的更新变化

kubectl get pods -o wide -w
1

image-20210521141530210

在更新前打开新窗口,监控RS的更新变化

kubectl get rs -o wide -w
1

我们发现更新后新建了一个RS,并且保留原来的RS但是节点数为0用来回滚

image-20210521141600692

# 4.2.5 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

image-20210521141501810

# 4.3 回滚更新

通过rollout命令进行回滚操作

# 4.3.1 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

image-20210521105106947

# 4.3.2 执行回滚命令

kubectl rollout undo deployment/nginx-deployment
1

image-20210521105339822

# 4.3.3 查看更新过程

在更新前打开新窗口,监控pod的更新变化

kubectl get pods -o wide -w
1

image-20210521141810709

在更新前打开新窗口,监控RS的更新变化

kubectl get rs -o wide -w
1

我们发现回滚没有创建新的rs而是将使用了原来的rs

image-20210521141839614

# 4.3.4 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

image-20210521141728970

# 4.4 再次回滚

# 4.4.1 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

image-20210521142048655

# 4.4.2 执行回滚命令

kubectl rollout undo deployment/nginx-deployment
1

image-20210521105339822

# 4.4.3 查看更新过程

在更新前打开新窗口,监控pod的更新变化

kubectl get pods -o wide -w
1

image-20210521142223871

在更新前打开新窗口,监控RS的更新变化

kubectl get rs -o wide -w
1

我们发现回滚没有创建新的rs而是将使用了原来的rs

image-20210521142252276

# 4.4.4 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

我们发现rollout回滚只在最近的两个版本之间来回回滚,不会回滚到在上一个版本。

image-20210521142314747

# 4.5 回滚指定版本

# 4.5.1 查看历史版本

通过rollout history查看版本历史

kubectl rollout history deployment/nginx-deployment
1

image-20210521143155537

# 4.5.2 历史版本内容

通过指定版本号来查看变更内容,找到需要回滚的版本,这里我会回滚到最早版本nginx:1.7.9

kubectl rollout history deployment/nginx-deployment --revision=1
1

我们找到了需要回滚的版本是1

image-20210521143414814

# 4.5.3 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

image-20210521105106947

# 4.5.4 执行回滚命令

写入我们需要回滚到的指定版本1

kubectl rollout undo deployment/nginx-deployment --to-revision=1
1

image-20210521105339822

# 4.5.5 查看版本

通过命令查看pod的版本号

kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
1

到此我们已经回滚到了指定版本

image-20210521143703191

# 5 Deployment扩缩容

# 5.1 scale命令扩容

命令扩容一般用于短期的临时性扩容,应付完成后要记得缩容到原来水平

# 5.1.1 查看当前容量

当前是两个节点

 kubectl get pods -o wide
1

image-20210521145000222

# 5.1.2 执行扩容

使用scale命令可以对集群进行扩缩容,扩充到4个节点

 kubectl scale deployment nginx-deployment --replicas=4
1

image-20210521144340229

# 5.1.3 查看扩容过程

在更新前打开新窗口,监控pod的更新变化

kubectl get pods -o wide -w
1

image-20210521145123507

在更新前打开新窗口,监控RS的更新变化

kubectl get rs -o wide -w
1

我们发现扩容后只是在原来的RS集群上面增加了两个节点

image-20210521145142117

# 5.2 配置文件缩容

配置文件扩缩容一般用于初始容量变更,长期进行扩缩容

# 5.2.1 查看当前容量

当前是4个节点

 kubectl get pods -o wide
1

image-20210521145316540

# 5.2.2 应用配置文件

因为我们没有更改配置文件,直接应用配置文件即可

kubectl apply -f nginx-deployment.yml
1

image-20210521145233580

# 5.2.3 查看扩容过程

在更新前打开新窗口,监控pod的更新变化

kubectl get pods -o wide -w
1

image-20210521145436250

在更新前打开新窗口,监控RS的更新变化

kubectl get rs -o wide -w
1

我们发现扩容后只是在原来的RS集群上面减少了两个节点

image-20210521145456486

# 6 删除Deployment

# 6.1 查看集群情况

# 6.1.1 查看Deployment

kubectl get deployments -o wide
1

image-20210521151608664

# 6.1.2 查看POD

kubectl get pods -o wide
1

image-20210521151622361

# 6.1.3 删除Deployment

执行删除命令删除Deployment

kubectl delete deployment nginx-deployment
1

image-20210521151716912

# 6.1.4 查看Deployment

kubectl get deployments -o wide
1

image-20210521151751483

# 6.1.5 查看POD

kubectl get pods -o wide
1

image-20210521151805966

上次更新: 2025/04/03, 11:07:08
高级使用-ReplicaSet控制器
高级使用-数据存储

← 高级使用-ReplicaSet控制器 高级使用-数据存储→

最近更新
01
tailwindcss
03-26
02
PaddleSpeech
02-18
03
whisper
02-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 跨境互联网 | 豫ICP备14016603号-5 | 豫公网安备41090002410995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式