Pod 是什么
Pod 是 Kubernetes 里可创建、可调度、可管理的最小单位,由一个或多个容器组成。同一 Pod 内的容器共享网络命名空间,因此共用同一个地址与端口空间,可以通过本机回环地址互相访问;文件系统默认各自独立,需要共享数据时就挂同一个卷。它们总是被一起调度到同一台节点上。
为什么很少直接建 Pod
裸 Pod 没有自愈能力:进程退出后没人拉起,节点故障后直接消失,也没有滚动升级与副本管理。生产环境的做法是交给控制器来管,由控制器负责数量、发布与重建,Pod 只是控制器实现目标状态的载体。直接建 Pod 基本只用于临时排查。
基本信息
| 适用环境 | 任何 Kubernetes 发行版,API 版本 v1 |
|---|---|
| 网络共享 | 同 Pod 内容器共享地址与端口空间,端口不能冲突 |
| 存储共享 | 默认文件系统相互隔离,靠挂载同一个卷实现共享 |
| 常用手段 | 边车容器:日志采集、代理、配置同步与主容器同生命周期 |
| 重启策略 | 默认总是重启,一次性任务场景可改为失败时重启或从不重启 |
| 终止流程 | 先发送终止信号,等待宽限期后再强制结束 |
典型使用场景
- 临时排查:建一个带常用工具的 Pod 在集群内测试网络与解析
- 理解调度:手动指定节点或资源,观察调度器的选择结果
- 边车模式:主容器加日志采集或代理容器,共享网络与卷
- 任务验证:在正式交给控制器之前先用裸 Pod 验证镜像能否启动
- 配置验证:验证挂载的配置文件与密钥在容器内是否生效
- 版本确认:使用特定镜像快速复现用户报的问题
Pod 结构要点
Pod 结构要点
apiVersion: v1
kind: Pod
metadata:
name: web-debug
spec:
containers:
- name: web
image: registry.example.com/nginx:1.25.3
ports:
- containerPort: 80
resources: # 加上请求与上限,便于观察与调度
requests:
cpu: 100m
memory: 128Mi
restartPolicy: Always # 默认值
terminationGracePeriodSeconds: 30查看与进入
查看与进入
kubectl get pod web-debug -o wide # 看地址与所在节点
kubectl describe pod web-debug # 看状态、事件与挂载
kubectl exec -it web-debug -- sh # 进入容器排查
kubectl logs web-debug # 看进程输出
kubectl delete pod web-debug # 用完即删,避免占资源概念边界
| 特性 | 说明 |
|---|---|
| 共享什么 | 网络命名空间与挂载的卷 |
| 不共享什么 | 文件系统、进程空间默认相互隔离 |
| 调度单位 | 整个 Pod 一起调度,不能拆到不同节点 |
| 生命周期 | 同 Pod 内容器同生共死,主容器退出时整个 Pod 结束 |
同 Pod 内多个容器监听同一端口会冲突,因为它们共享网络命名空间与端口空间。
删除 Pod 时会先发终止信号并等待宽限期;应用需要正确处理该信号,否则每次删除都会退化为强制结束。