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

Kubernetes Recreate 部署策略完整实战指南

30 分钟掌握 Kubernetes 最简部署策略,让更新过程清晰可见。

在这里插入图片描述

👉 关联文章|Containerd 从入门到精通:一篇吃透安装、镜像、排障全流程(涵盖 Containerd的基础使用和镜像加速配置及注意事项)

1 问题背景

在 Kubernetes 集群中,部署策略的选择直接影响应用的可用性、资源消耗和运维复杂度。很多工程师在面对 RollingUpdate、Blue-Green、Canary 等复杂策略时,往往忽略了最简单的 Recreate(重新创建) 策略的价值。

核心痛点

  • 复杂策略配置繁琐,学习成本高
  • 资源消耗大,小集群难以承受
  • 回滚机制复杂,故障排查困难

Recreate 策略的核心特征先删除所有旧版本 Pod,然后创建新版本 Pod。这种策略会导致短暂的服务中断,但在特定场景下具有独特优势。

2 方案总览

触发更新
终止所有旧 Pod
等待完全终止
批量创建新 Pod
新版本就绪

2.1 技术特性对比

特性Recreate 策略RollingUpdate 策略
服务可用性有短暂中断(秒级)零停机时间
资源消耗较低(无额外 Pod)较高(需要额外 Pod)
部署复杂度简单直接相对复杂
回滚支持完整支持完整支持
适用场景开发/测试环境、批处理应用生产环境、用户面应用
更新速度快速(批量操作)相对较慢(逐步替换)

2.2 核心优势

  • 零依赖:无需额外的服务网格或负载均衡器支持
  • 资源友好:更新过程中不会额外占用集群资源
  • 回滚完备:Kubernetes 原生支持版本回滚机制
  • 简单可控:过程直观,便于故障排查

3 逐步拆解

3.1 实验环境准备

集群配置

kubectl get nodes -o wide         # 查看所有节点的详细信息

网络架构详情(点击展开)

组件版本配置
Kubernetesv1.28.21 Master + 2 Worker
容器运行时containerd://1.6.33CentOS Linux 7
网络插件FlannelPod: 10.244.0.0/16
网络架构详情(点击展开)

网络规划

  • Pod 网络:10.244.0.0/16
  • Service 网络:10.96.0.0/12
  • 节点网络:192.168.209.0/24

验证命令

kubectl get pods -n kube-system -o wide    # 查看kube-system命名空间下所有Pod的详细信息
kubectl get svc -n kube-system             # 查看kube-system命名空间下的服务列表

3.2 完整实验流程

步骤 1:创建 Recreate 策略 Deployment

目标:创建使用 Recreate 策略的 Nginx Deployment

配置文件内容(点击展开)
cat > nginx-recreate.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-recreateannotations:kubernetes.io/change-cause: "Initial deployment with nginx:1.21"
spec:replicas: 2strategy:type: Recreate  # 核心:启用 Recreate 策略selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.21ports:- containerPort: 80resources:requests:cpu: 100mmemory: 128Milimits:cpu: 500mmemory: 512Mi
EOF

关键配置说明

配置项说明
strategy.type: Recreate明确指定使用 Recreate 策略
replicas: 2设置双副本,便于观察重建过程
kubernetes.io/change-cause记录变更原因,便于后续回滚管理
requests保证 Pod 启动所需的最小资源
limits防止 Pod 过度消耗集群资源
步骤 2:部署应用并验证初始状态

目标:应用配置并创建 Deployment

操作执行

kubectl apply -f nginx-recreate.yaml    # 应用配置文件创建Deployment

状态验证

kubectl get deploy nginx-recreate -o wide    # 查看Deployment的详细状态和资源信息
kubectl get pods -o wide --show-labels     # 查看所有Pod的详细信息,包括标签

预期输出

NAME             READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES       SELECTOR
nginx-recreate   2/2     2            2           4s    nginx        nginx:1.21   app=nginxNAME                             READY   STATUS    RESTARTS   AGE   IP           NODE    LABELS
nginx-recreate-76858866d-lwv2l   1/1     Running   0          7s    10.244.2.6   node2   app=nginx,pod-template-hash=76858866d
nginx-recreate-76858866d-lx82s   1/1     Running   0          7s    10.244.1.7   node1   app=nginx,pod-template-hash=76858866d

在这里插入图片描述
状态分析

  • ✅ 2 个 Pod 均处于 Running 状态
  • ✅ Pod 分布在不同的工作节点上(node1 和 node2)
  • ✅ 使用镜像版本为 nginx:1.21
步骤 3:执行版本更新触发 Recreate 策略

目标:使用在线更新命令修改镜像版本,触发 Recreate 策略

更新操作

kubectl set image deployment/nginx-recreate nginx=nginx:1.23 \--record=true \--annotation="镜像版本更新从1.21到1.23"    # 更新镜像版本并记录变更原因
步骤 4:实时监控 Recreate 过程

目标:使用 watch 模式观察 Pod 重建过程,这是验证 Recreate 策略效果的关键步骤

监控命令

kubectl get pods -w    # 实时监控Pod状态变化(watch模式)

在这里插入图片描述
观察要点

  1. 终止阶段:所有旧 Pod 同时进入 Terminating 状态
  2. 清理阶段:旧 Pod 完全从集群中移除
  3. 中断期间:集群中无可用 Pod,服务暂时不可用(约 5-15 秒)
  4. 创建阶段:新 Pod 批量创建并进入 Running 状态
步骤 5:验证更新结果

目标:确认新版本 Pod 使用了更新后的镜像

验证命令

kubectl describe pods | grep "Image:" | grep nginx    # 查看Pod使用的镜像版本
kubectl get deployment nginx-recreate -o wide         # 查看Deployment的详细状态

在这里插入图片描述
预期输出

Image:          nginx:1.23
Image:          nginx:1.23NAME             READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES       SELECTOR
nginx-recreate   2/2     2            2           5m    nginx        nginx:1.23   app=nginx

验证结果

  • ✅ 所有 Pod 镜像版本已更新为 nginx:1.23
  • ✅ Deployment 状态正常,所有副本就绪

4 完整示例

4.1 回滚机制验证

查看部署历史

目标:查看可用的部署版本历史

查看命令

kubectl rollout history deployment/nginx-recreate    # 查看Deployment的版本历史记录

预期输出

deployment.apps/nginx-recreate 
REVISION  CHANGE-CAUSE
1         Initial deployment with nginx:1.21
2         Updated nginx from 1.21 to 1.23
执行回滚操作

目标:假设新版本出现问题,需要回滚到之前的稳定版本

回滚命令

kubectl rollout undo deployment/nginx-recreate \--to-revision=1 \--annotation="kubernetes.io/change-cause=Rolled back to nginx:1.21 due to compatibility issues"    # 回滚到指定版本并记录原因
验证回滚结果

验证命令

kubectl rollout status deployment/nginx-recreate    # 查看回滚操作的状态
kubectl get pods -o wide --show-labels             # 查看回滚后Pod的详细信息和标签

预期输出

deployment "nginx-recreate" successfully rolled outNAME                             READY   STATUS    RESTARTS   AGE   IP           NODE    LABELS
nginx-recreate-76858866d-abc12   1/1     Running   0          30s   10.244.1.8   node1   app=nginx,pod-template-hash=76858866d
nginx-recreate-76858866d-def34   1/1     Running   0          32s   10.244.2.7   node2   app=nginx,pod-template-hash=76858866d

验证结果

  • ✅ 成功回滚到修订版本 1
  • ✅ 所有 Pod 镜像版本恢复为 nginx:1.21
  • ✅ Deployment 状态正常

5 常见坑

现象原因验证命令
Pod 卡在 Terminating 状态应用未正确处理 SIGTERM 信号kubectl describe pod <pod-name> | grep -A 10 "Events"
新 Pod 无法创建集群资源不足kubectl describe nodes | grep -A 5 "Allocated resources"
回滚失败历史版本被清理kubectl rollout history deployment/nginx-recreate
服务中断时间过长terminationGracePeriodSeconds 设置过大kubectl get deployment nginx-recreate -o yaml | grep terminationGracePeriodSeconds
镜像拉取失败镜像仓库不可达或认证失败kubectl describe pod <pod-name> | grep -A 5 "Failed to pull image"
背景补充(点击展开)

Pod 终止流程详解

当 Kubernetes 删除 Pod 时,会经历以下阶段:

  1. 发送 SIGTERM 信号(默认 30 秒宽限期)
  2. 等待应用优雅关闭
  3. 发送 SIGKILL 信号(强制终止)
  4. 清理资源

资源不足排查命令

# 查看节点资源使用情况
kubectl top nodes                                           # 显示各节点的CPU和内存使用情况# 查看 Pod 资源请求和限制
kubectl get pods -o yaml | grep -A 5 "resources:"          # 查看Pod的资源请求和限制配置# 检查是否有 Pod 处于 Pending 状态
kubectl get pods --field-selector=status.phase=Pending     # 筛选出处于Pending状态的Pod

6 结论与建议

核心结论

结论说明
适用场景Recreate 策略适合开发测试环境,简单直接,资源消耗低
服务中断更新过程中会有 5-15 秒的服务不可用时间
资源效率更新时不需要额外的 Pod 资源,适合资源受限场景
回滚机制支持快速回滚到任意历史版本,机制完善

使用建议

场景类型推荐程度原因说明
开发环境⭐⭐⭐⭐⭐ 强烈推荐快速迭代,无需考虑服务连续性
测试环境⭐⭐⭐⭐ 推荐验证功能,可接受短暂中断
生产环境⭐⭐ 谨慎使用仅在维护窗口或后端服务场景使用
用户面应用⭐ 不推荐用户体验要求高,不能容忍服务中断

7 实践任务

基础实践

  1. 在测试集群中创建 Recreate 策略的 Deployment
  2. 执行版本更新并观察 Pod 重建过程
  3. 尝试回滚到之前的版本
  4. 记录服务中断时间,验证是否符合预期

进阶挑战

  • 结合监控工具测量服务中断时间
  • 对比 Recreate 和 RollingUpdate 的资源消耗差异
  • 编写自动化脚本实现一键部署和回滚

总结

通过本实验,我们验证了 Recreate 策略的完整工作流程,包括部署、更新、监控和回滚等关键环节。理解不同部署策略的特点和适用场景,有助于在实际项目中做出最佳的技术选择。

关键要点

  • Recreate 策略简单高效,适合开发测试环境
  • 存在短暂服务中断,需要合理规划更新时间
  • 资源消耗最低,适合资源受限场景
  • 回滚机制完善,支持快速恢复到任意版本

参考资料

  • Kubernetes 官方文档 - Deployments
  • Kubernetes Deployment Strategies
  • kubectl rollout 命令参考
  • Kubernetes Best Practices
http://www.dtcms.com/a/573528.html

相关文章:

  • 企业级Agent智能体(智能小秘)之LangGraph智能体
  • 外卖开源系统源码设计思路:商家、骑手、用户三端一体化方案
  • MySQL数据库基础操作:
  • 有什么网站可以做商业网站需要多少钱
  • 早教网站模板哈尔滨门户网站制作哪家好
  • 从入门到精通:OpenAI Prompt Engineering 与 Prompt Caching 实战详解
  • HGDB单机修改IP地址或主机名(含Linux和windows )
  • 重庆公司章程网上查询平台网站建设优化话术
  • 神奇的工作室最新网站设计网站怎么设计
  • WordPress站点添加ssl证书东莞网站设计排行榜
  • Nestjs框架: 高可用微服务架构实践之动态gRPC客户端切换与异常处理优化
  • Git 拉取代码冲突操作
  • 【简易聊天室】使用 HTML、CSS、JavaScript 结合 WebSocket 技术实现
  • 外设模块学习(14)——雨滴传感器、土壤湿度传感器(STM32实现)
  • 小白银行测试初步了解(一)
  • 第14讲:HTTP网络请求 - Dio库的使用与封装
  • 西安市城乡建设管理局网站唐山专业网站建设公司
  • Flink集群部署以及作业提交模式详解
  • Windows系统Git的安装及在IDEA中的配置
  • Linux网络(二)——socket编程
  • 图书出版的幕后故事-《JMeter核心技术、性能测试与性能分析》背后不为人知的事
  • 最好的做网站公司有哪些河北网站推广优化
  • Voronoi 图及其在路径搜索中的应用
  • 网站模版自适应建设商务网站ppt
  • 舞台灯光透镜厂数字化:AI赋能光学检测与镀膜调控新范式
  • 买国外空间哪个网站好中国正式宣布出兵
  • 建设网站需要注册证书吗建站排行榜
  • AWS区域显示工具:统一化设计与实现
  • Valgrind 在嵌入式 Linux 平台:工作原理、典型场景与案例分析
  • 仙桃网站设计游戏优化是什么意思