type
status
date
slug
summary
category
tags
create_time
Sep 2, 2025 06:29 AM
icon
password
my_create_time

📝 前言

在 Kubernetes 中,Pod 是最小的可部署单元。
理解 Pod 的资源对象,对于掌握集群调度机制、应用运行状态以及运维策略都至关重要。
很多同学初学时会将 Pod 视为“容器的集合”,但在生产实践中,Pod 不仅仅是容器的载体,它还包含网络、存储、生命周期管理等一整套资源对象特性。
本文将从概念、组成、生命周期,到实际操作全面解析 Pod 资源对象,并通过多个实战案例帮助你更好地掌握。

🧠 本章知识卡片

notion image

🚀 本章小节

1️⃣ 什么是Pod?

Pod 是 Kubernetes 中最小的调度和运行单元,可以理解为“一组紧密相关的容器的逻辑宿主”。
它具备以下特点:
  • 最小调度单元:Pod 不是容器,而是容器的封装,Kubernetes 调度时以 Pod 为基本单位。
  • 单容器或多容器:多数情况下 Pod 只包含一个容器;当需要共享网络、存储时,可在 Pod 内运行多个容器
  • 共享网络与存储:同一 Pod 内容器共享一个 IP 地址、端口空间,以及声明的 Volume。
  • 短暂性:Pod 本身是临时的,用完即弃,通常通过控制器(如 Deployment、StatefulSet、Job)来创建和管理。
一句话总结:Pod 就是 Kubernetes 世界里承载和运行应用的“最小盒子”。

2️⃣ Pod 资源对象模型

和其他 Kubernetes 对象一样,Pod 遵循统一的资源对象模型:
  • metadata:标识信息,如名称、标签、命名空间。
  • spec:期望状态,定义容器镜像、端口、卷等。
  • status:实际状态,由系统维护,反映 Pod 当前的运行情况。
一个最简单的 Pod 定义如下:
保存为一个yaml文件,然后通过kubectl apply -f nginx.yaml即可创建出资源。
也可以通过run命令快速创建出一个 Pod:
PS:在实际生产中,通常不会直接创建 Pod,而是通过 Deployment、Job 等控制器管理 Pod 的模板,从而获得自动化调度和高可用。

3️⃣ Pod 生命周期与状态管理

一个 Pod 资源从创建到销毁主要会经历以下状态变化:
  • Pending:已提交,调度中或拉取镜像。
  • ContainerCreating: 正在创建容器。
  • Running:至少一个容器在运行。
  • Succeeded:容器成功退出。
  • Failed:容器失败退出。
  • Unknown:无法获取状态。
生命周期状态流程图如下:
notion image
 
状态查看:

4️⃣ Pod 的资源申请和限制

在 Kubernetes 中资源的管理是非常重要的,合理的资源管理是保障集群稳定性和应用性能的关键。
常见的资源申请和限制主要有以下几种:
资源类型
说明
单位示例
CPU
计算资源
1(1核), 500m(0.5核)
Memory
内存资源
1Gi, 512Mi
GPU
算力资源
1(1卡)
示例如下:

5️⃣ Pod 的健康检查

使用 Kubernetes 管理容器的一大核心杀器就是故障自愈,这里主要就是依靠健康检查特性来实现应用的高可用,当 Pod 健康检查未通过时,集群就会自动将其重启或迁移到其他节点再启动。
健康检查的类型主要有以下几种:
检查类型
说明
执行时机
Liveness Probe
存活检查
容器运行期间定期检查
Readiness Probe
就绪检查
容器启动后和服务流量前
Startup Probe
启动检查
容器启动初期
检查方式也有多种:
检查方法
说明
适用场景
HTTP GET
HTTP请求检查
Web服务、API服务
TCP Socket
TCP端口检查
数据库、缓存、网络服务
Exec
执行命令检查
复杂状态检查、自定义逻辑
示例如下:
PS:若未添加健康检查配置则默认自动通过 exec 根据容器主进程状态进行检测。

6️⃣ 多容器 Pod 的协作

在日志收集、监控代理和网络代理等场景中,多容器的Pod模式比较常见,通常称之为:sidecar。
示例如下:
说明:这里就是通过 volumes 实现了 存储共享 ,app 容器写日志到共享卷,log-agent 容器实时收集日志。

7️⃣ Pod 的初始化容器

与多容器不同,Pod 的初始化容器(Init Containers)仅在主容器运行前执行一次,常用于初始化准备工作,如创建一些目录文件、等待依赖服务启动等场景。
示例如下:
初始化容器支持添加多个,默认按照顺序进行启动,若初始化容器未执行结束是不会开始运行主容器的。

8️⃣ Pod 的常见命令

命令
描述
kubectl get pods
列出当前命名空间的所有 Pod
kubectl get pods -n <namespace>
列出指定命名空间的所有 Pod
kubectl get pods -A
列出所有命名空间的所有 Pod(生产慎用,太多了很卡)
kubectl get pods -o wide
以宽格式显示(包含 IP 和节点信息)
kubectl describe pod <pod-name>
显示 Pod 的详细信息、事件和状态(排查问题非常有用)
kubectl logs -f <pod-name>
实时跟踪 Pod 日志输出
kubectl exec -it <pod-name> -- <command>
在 Pod 中执行命令,类似docker exec 可直接进入 pod 容器内
kubectl apply -f <file.yaml>
通过 YAML 文件创建/更新 Pod
kubectl delete pod <pod-name>
删除指定 Pod,注意 Pod 删除是不会重启的,Deployment 会。
kubectl delete -f <file.yaml>
通过 YAML 文件删除 Pod

✅ 总结

Pod 是 Kubernetes 的核心构建块,承载了应用运行的基本单元。
从资源对象模型、生命周期管理到实际部署,理解 Pod 的运行机制有助于我们更高效地运维和优化集群。
在生产环境中,正确使用 Pod 及其控制器,不仅能提升应用的可靠性,还能让资源调度更高效,充分发挥 Kubernetes 的自动化与弹性伸缩能力。
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
若文章对您有帮助,欢迎 请我喝杯咖啡~
 
上一篇
Nginx+ACME服务器搭建
下一篇
第四部分:使用 sealos 部署集群

评论
Loading...