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

K8s 核心资源详解(Pod/Deployment/Service 实战)

文章目录

    • 前言
    • 一、Pod:K8s 最小运行单元(彻底理清与 Docker 容器关系)
      • 1.1 什么是 Pod?
      • 1.2 Pod 和 Docker 容器的关系(白话终极解释)
      • 1.3 Pod 的核心特点(新手必记)
      • 1.4 为什么不直接管理容器,非要加一层 Pod?
    • 二、Deployment:无状态服务的大管家(企业 99% 业务都用它)
      • 2.1 为什么需要 Deployment?
      • 2.2 Deployment 五大核心能力(生产核心价值)
      • 2.3 适用场景
    • 三、Service:固定入口 + 负载均衡(解决 Pod 最大痛点)
      • 3.1 Pod 的致命问题
      • 3.2 Service 核心作用
      • 3.3 三种常用 Service 类型(新手重点记两种)
    • 四、YAML 清单手把手手写实战(企业标准模板)
      • 4.1 创建标准部署文件
      • 4.2 逐行核心参数详解(必懂)
        • Deployment 核心参数
        • Service 核心参数
      • 4.3 执行 YAML 部署命令
      • 4.4 查看部署结果
    • 五、核心实战:滚动更新、版本回滚、扩缩容
      • 5.1 动态扩缩容实战
        • 方式1:命令行快速扩缩容
        • 方式2:YAML 文件修改(企业标准)
      • 5.2 滚动更新实战(零停机升级)
        • 查看更新过程
        • 滚动更新核心策略参数(生产必备)
      • 5.3 版本回滚实战(生产故障救命功能)
        • 1. 查看所有历史版本
        • 2. 一键回退上一个版本
        • 3. 精准回退指定版本
        • 4. 限制历史版本数量(优化存储)
    • 六、三大核心资源关系总结(永久记住)
    • 七、本篇总结

前言

上一篇我们从零搭建了一套标准可用的 K8s 集群,拥有了完整的容器运行环境。但搭建集群只是入门,真正的 K8s 开发、部署、运维,全部围绕三大核心资源展开:Pod、Deployment、Service。

很多新手学 K8s 只会敲命令、看不懂配置、不会排查问题,本质原因是:分不清 Pod、Deployment、Service 的职责边界,不懂底层运行逻辑

本篇作为 K8s 核心实战第一篇,彻底打通理论+实操:白话讲透核心概念、手把手手写企业级 YAML 清单、完整演示滚动更新、版本回滚、动态扩缩容,学完可独立完成 K8s 日常项目部署与运维操作。

一、Pod:K8s 最小运行单元(彻底理清与 Docker 容器关系)

1.1 什么是 Pod?

核心定义:Pod 是 K8s 中最小、不可分割的部署与调度单元,K8s 不会直接管理 Docker 容器,所有容器都必须运行在 Pod 内部。

没有任何资源比 Pod 更小,所有服务部署、调度、自愈、扩容,全部基于 Pod 实现。

1.2 Pod 和 Docker 容器的关系(白话终极解释)

我们可以把Pod 理解为「容器的包装盒」

  • Docker 容器:真正运行业务代码、程序的实体(比如 Nginx 程序、Java 项目)
  • Pod:封装容器的外壳,为内部容器提供统一网络、存储、IP、命名空间

企业标准规范:一个 Pod 里面只跑一个业务容器

特殊场景才会一个 Pod 跑多个容器(主容器+辅助容器),日常开发、业务部署完全用不到,新手无需关注。

1.3 Pod 的核心特点(新手必记)

  • 短命、临时性:Pod 是一次性资源,删除、故障、重建后 IP 会彻底改变,绝对不能固定 IP 访问服务
  • 最小单元:K8s 调度、资源限制、监控的最小单位都是 Pod,不是容器
  • 不可自愈:单独创建的 Pod 崩溃后不会自动重启、不会重建,必须依靠上层控制器管理

1.4 为什么不直接管理容器,非要加一层 Pod?

为了标准化!屏蔽底层容器差异(Docker/Containerd),让 K8s 可以统一管理所有容器,实现统一调度、统一网络、统一生命周期。

二、Deployment:无状态服务的大管家(企业 99% 业务都用它)

2.1 为什么需要 Deployment?

刚才讲到:单独的 Pod 毫无生产价值

Pod 删掉就没、崩了不重启、无法扩容、无法更新、无法回滚,完全无法满足线上业务需求。

于是 K8s 设计了Deployment 控制器,专门用来批量管理 Pod。

通俗理解:Pod 是干活的员工,Deployment 是工头,负责管员工数量、状态、更新、重启

2.2 Deployment 五大核心能力(生产核心价值)

  • 副本维持(自愈):指定运行 N 个 Pod,挂一个补一个,永远维持数量稳定
  • 动态扩缩容:随时增加/减少 Pod 数量,适配流量高低峰
  • 滚动更新:更新项目版本,不停机、零中断、逐步替换容器
  • 版本回滚:新版本报错,一键退回历史稳定版本
  • 版本历史保留:自动记录更新记录,方便追溯与回滚

2.3 适用场景

所有无状态服务全部用 Deployment:Nginx、Java 后端、Vue 前端、微服务等。

简单理解:重启服务不丢数据的项目,都可以用 Deployment。

三、Service:固定入口 + 负载均衡(解决 Pod 最大痛点)

3.1 Pod 的致命问题

前面说过:Pod 是临时资源,重启、重建、迁移后 IP 一定会变

如果直接用 Pod IP 访问项目,每次更新服务、重启容器,访问地址就失效,业务直接崩掉,完全无法用于生产。

3.2 Service 核心作用

Service 就是一组 Pod 的固定网关,两大核心能力:

  • 固定访问入口:Service IP 和端口永久不变,不管后端 Pod 怎么变,访问地址始终不变
  • 负载均衡:自动把流量分发到后端多个 Pod,分担压力,实现高可用

3.3 三种常用 Service 类型(新手重点记两种)

  • ClusterIP(默认):仅集群内部访问,外网无法访问,适合微服务之间互相调用
  • NodePort(学习/测试常用):暴露服务器端口,外网可直接通过「服务器IP+端口」访问服务
  • LoadBalancer(生产云环境):云厂商专属负载均衡,本地集群不用

四、YAML 清单手把手手写实战(企业标准模板)

前面我们用命令行临时部署服务,生产环境绝对不用!企业全部采用YAML 声明式配置文件,可版本管理、可复用、可批量部署。

本节手把手手写一套完整的Deployment + Service 一体化 YAML,逐行讲解含义,零基础看懂。

4.1 创建标准部署文件

新建nginx-full.yaml文件,完整配置如下(可直接复制使用):

# 1. 定义部署资源:管理Nginx PodapiVersion:apps/v1# 资源所属API版本,Deployment固定该版本kind:Deployment# 资源类型:部署控制器metadata:name:nginx-demo# 自定义部署名称,全局唯一labels:app:nginx-demo# 部署标签,用于匹配服务spec:replicas:2# 期望运行的Pod副本数量selector:matchLabels:app:nginx-demo# 匹配下方Pod的标签,建立关联关系# Pod模板:定义创建出来的Pod配置template:metadata:labels:app:nginx-demo# Pod标签,必须与上方匹配spec:containers:# 容器配置(真正运行的Docker容器)-name:nginximage:nginx:alpine# 镜像名称+版本ports:-containerPort:80# 容器内部端口---# 2. 定义服务资源:暴露端口+负载均衡apiVersion:v1kind:Servicemetadata:name:nginx-demo-svcspec:selector:app:nginx-demo# 关联上方Deployment管理的Podtype:NodePort# 服务类型:外网可访问ports:-port:80# 集群内部服务端口targetPort:80# 映射容器端口nodePort:30080# 固定外网端口(范围30000-32767)

4.2 逐行核心参数详解(必懂)

Deployment 核心参数
  • apiVersion:资源版本,Deployment 固定为apps/v1
  • kind:资源类型,当前为 Deployment 部署资源
  • replicas:副本数,定义需要运行多少个业务 Pod
  • selector:标签选择器,通过标签绑定对应 Pod,是关联核心
  • template:Pod 模板,所有通过该 Deployment 创建的 Pod 都遵循此模板
  • containerPort:容器内部服务端口,必须和项目启动端口一致
Service 核心参数
  • selector:通过标签匹配后端 Pod,实现流量转发
  • type: NodePort:开启外网访问模式
  • port:Service 集群内部通信端口
  • targetPort:对应容器的服务端口
  • nodePort:外网访问固定端口,无需每次随机生成

4.3 执行 YAML 部署命令

# 根据YAML文件创建/更新所有资源kubectl apply-fnginx-full.yaml

参数详解kubectl apply是企业标准声明式部署命令,资源不存在则创建,已存在则更新,不会重复报错。

4.4 查看部署结果

# 查看部署状态kubectl get deploy# 查看Pod运行状态kubectl get pods# 查看服务端口状态kubectl get svc

浏览器访问:服务器IP:30080,成功打开 Nginx 页面即部署完成。

五、核心实战:滚动更新、版本回滚、扩缩容

这一节是 K8s 生产最核心的能力,也是面试、工作高频考点,全程手把手实操,看懂即会用。

5.1 动态扩缩容实战

业务流量暴涨扩容、流量低谷缩容,两种方式均可实现。

方式1:命令行快速扩缩容
# 将Pod副本调整为4个(扩容)kubectl scale deployment nginx-demo--replicas=4# 查看变化kubectl get pods

参数详解scale专属扩缩容命令,直接修改副本数量,秒级生效。

方式2:YAML 文件修改(企业标准)

修改 YAML 中replicas数值,重新执行kubectl apply -f nginx-full.yaml,配置永久生效。

5.2 滚动更新实战(零停机升级)

滚动更新核心逻辑:先启动新 Pod、再销毁旧 Pod,新旧服务交替运行,全程服务不中断。

我们通过更新镜像版本模拟项目升级:

# 更新镜像版本,触发滚动更新kubectlsetimage deployment nginx-demonginx=nginx:1.21-alpine

参数详解kubectl set image专门用于在线更新容器镜像版本。

查看更新过程
# 实时观察滚动更新进度kubectl rollout status deployment nginx-demo# 查看更新历史记录kubectl rollouthistorydeployment nginx-demo

可以清晰看到:新 Pod 先启动就绪,旧 Pod 才逐步销毁,全程服务可正常访问,无停机。

滚动更新核心策略参数(生产必备)

在 Deployment 中可配置更新策略,控制更新节奏,避免瞬间批量替换导致服务抖动:

strategy:type:RollingUpdate# 滚动更新策略(默认)rollingUpdate:maxSurge:1# 更新时最多超出期望副本数的数量maxUnavailable:0# 更新时最大不可用Pod数量(保证零不可用)

参数详解maxSurge控制更新峰值扩容数量,maxUnavailable保证更新过程服务100%可用。

5.3 版本回滚实战(生产故障救命功能)

新版本上线出现 Bug、报错、兼容问题,无需停机,一键回退到历史稳定版本。

1. 查看所有历史版本
kubectl rollouthistorydeployment nginx-demo
2. 一键回退上一个版本
kubectl rollout undo deployment nginx-demo
3. 精准回退指定版本
# --to-revision 指定版本号kubectl rollout undo deployment nginx-demo --to-revision=1
4. 限制历史版本数量(优化存储)

默认保留所有更新记录,生产环境可通过参数限制历史版本数量,避免资源浪费:

spec:revisionHistoryLimit:10# 仅保留最近10个历史版本

六、三大核心资源关系总结(永久记住)

  1. Pod:最小运行单元,跑真实容器程序,临时、易变、无自愈能力
  2. Deployment:管理者,管理 Pod 生命周期,实现自愈、扩容、滚动更新、版本回滚
  3. Service:统一入口,屏蔽 Pod 动态 IP,提供固定访问地址+负载均衡

企业完整链路:YAML定义Deployment & Service → K8s创建Pod运行容器 → Deployment维持副本稳定 → Service对外提供稳定访问。

七、本篇总结

1、Pod 是 K8s 最小调度单元,基于 Docker/Containerd 容器运行,自身无自愈、无稳定IP,不能单独用于生产;

2、Deployment 是无状态服务核心控制器,承担副本自愈、动态扩缩容、滚动更新、版本回滚四大核心生产能力;

3、Service 解决 Pod IP 动态变化问题,提供固定访问入口与负载均衡,是服务对外暴露、内网互通的关键;

4、掌握企业标准 YAML 手写规范,告别命令行临时部署,适配团队协作与版本管理;

5、熟练掌握扩缩容、零停机滚动更新、故障版本回滚,具备基础 K8s 生产运维能力。

http://www.jsqmd.com/news/788413/

相关文章:

  • 2026年华铁智能科技性价比排名 - mypinpai
  • B站视频转文字终极指南:3分钟学会用AI高效提取视频内容
  • 火爆分享的AI应用背后,如何用Taotoken实现稳定低成本的API调用
  • 智能空间架构解析:从多模态感知到智能体协同的AI环境构建
  • WELearn网课助手终极指南:告别熬夜刷课,5分钟实现学习自由
  • 机器学习模型漂移检测实战:从数据漂移到概念漂移的监控与应对
  • AI编码助手本地技能库:实现项目专属智能开发环境
  • 实验揭示:大语言模型委托工作不可靠,前沿模型平均损坏 25% 文档内容
  • qmcdump终极指南:5分钟快速解密QQ音乐加密格式的完整解决方案
  • Dell G15散热控制终极指南:3分钟告别AWCC卡顿与臃肿
  • 【12.MyBatis源码剖析与架构实战】MyBatis与设计模式-10. 责任链模式
  • 从零构建角色定制应用:技术架构、核心难点与实现方案
  • 影刀RPA企业级店群自动化架构:多浏览器并发与核心业务防泄密实战
  • FunClip视频剪辑终极指南:3分钟快速上手AI智能剪辑
  • CANN/cann-recipes-train:基于verl框架和代码沙盒环境的代码强化学习实践
  • 声明式CLI交互工具cli-jaw:构建优雅命令行界面的新范式
  • 【毕业设计项目】大数据文献综述管理系统:Hadoop/Spark 选题库、参考文献、LaTeX 提交与评分统计
  • 3个实战场景:用Windows Cleaner专业解决Windows系统空间管理难题
  • LlamaPen:基于Web的Ollama图形化界面,实现本地大模型高效交互
  • Parsec VDD虚拟显示器深度解析:从架构设计到性能调优的完整指南
  • QMCDecode:3步解锁QQ音乐加密格式,让音乐文件重获自由
  • 为OpenClaw AI工作流注入安全审计能力:trust-openclaw实战指南
  • 基于FPGA硬件加速的ANN体温检测系统:从算法到芯片的完整实现
  • 3步解锁Zotero插件市场:一站式插件管理终极指南
  • OBS多路推流插件:一键同步多平台直播的专业解决方案
  • 3步解决百度网盘限速难题:baidu-wangpan-parse工具实战指南
  • Dell G15终极散热控制指南:3分钟掌握开源神器TCC完整教程
  • GTA5线上小助手:完全免费的洛圣都游戏体验增强工具完整指南
  • 开源技能网关Skills Gateway:微服务架构下的团队技能管理与评估平台实践
  • Webpack插件实现浏览器日志实时转发至终端,提升前端调试效率