Pod 与容器
理解 Pod 的概念与本质
掌握 Pod 的结构、生命周期、重启策略
能编写标准的 Pod 定义 YAML
核心讲解
Pod 是 K8s 中最小的调度单元,不是容器,是一组容器的封装,一个 Pod 里可以有多个容器,共享网络、存储、命名空间。
(1)Pod 核心特性
一个 Pod 一个 IP,多个容器共享网络栈
共享存储卷,多个容器可以访问同一个卷
原子调度:整个 Pod 一起调度,一起启动一起停止
临时的:Pod 本身是 disposable 的,故障、更新都会重建,不会原地修复
(2)Pod 结构
apiVersion: v1
kind: Pod
metadata:
name: pod名
labels:
键: 值
spec:
containers: # 容器列表
- name: 容器名
image: 镜像
ports:
- containerPort: 端口
resources: # 资源限制
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
env: # 环境变量
- name: ENV
value: test
restartPolicy: Always # 重启策略
(3)重启策略
Always:总是重启,默认,适合常驻服务OnFailure:失败才重启,适合一次性任务Never:从不重启,任务完成就结束
(4)生命周期
Pending → Running → Succeeded / Failed
Pending:调度中、镜像拉取中
Running:正常运行
Succeeded:成功结束(OnFailure/Never)
Failed:异常退出
操作示例
# pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-pod
labels:
app: demo
env: test
spec:
restartPolicy: OnFailure
containers:
- name: nginx
image: nginx:1.25-alpine
ports:
- containerPort: 80
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 100m
memory: 128Mi
env:
- name: MODE
value: production
# 创建
kubectl apply -f pod-demo.yaml
# 查看状态
kubectl get pods -o wide
# 查看详细事件
kubectl describe pod demo-pod
# 查看日志
kubectl logs demo-pod
# 删除
kubectl delete -f pod-demo.yaml
常见误区
一个 Pod 一个容器:可以多个,比如主容器 + 边车容器,日志代理、代理都可以放一个 Pod 里
Pod 是持久的:Pod 是临时的,随时可能被销毁重建,永远不要在 Pod 里存数据
资源限制不用设:生产环境必须设 limits,防止容器占满节点资源
重启了就是故障:健康检查失败、OOM 都会自动重启,是自愈机制,不是故障
课后练习
编写一个完整的 Pod YAML,包含镜像、端口、环境变量、资源限制
设置重启策略为 OnFailure,测试异常退出的重启行为
查看 Pod 的事件,理解每个状态的含义
思考:为什么 K8s 不直接管理容器,要抽象出 Pod 这一层?

