一、Pod 到底是什么¶
Pod 是 Kubernetes 集群中运行和管理应用的最小部署单元。一个 Pod 里可以封装一个或多个容器,这些容器共享网络、存储以及部分命名空间资源,因此它们之间可以非常紧密地协作。
一个 Pod 不只是“容器的壳”,它本质上代表一组应该被一起调度、一起运行、一起销毁的进程集合。
另外,Pod 中通常还会有一个 pause 容器。它不负责业务处理,而是负责承载 Pod 级别的共享网络和命名空间环境。
二、Pod 的架构应该怎么理解¶
下面这张图很适合用来理解 Pod 架构:

如果以一个包含 Nginx 和 PHP 的 Pod 为例,可以这样理解:
pause容器:为整个 Pod 提供共享网络和命名空间基础- Nginx 容器:负责接收 Web 请求
- PHP 容器:负责处理动态业务逻辑
它们之所以能高效协作,是因为同一个 Pod 中的容器具备几个重要特性。
1. 共享网络命名空间¶
同一个 Pod 内的所有容器共享同一个 IP 和端口空间,因此容器之间可以直接通过 localhost 通信。
例如:
- Nginx 监听
80 - PHP-FPM 监听
9000 - Nginx 可以直接把请求转发给
localhost:9000
2. 可以共享存储卷¶
多个容器可以挂载同一个 Volume,从而共享文件数据。一个常见场景就是:
- Nginx 提供静态文件
- PHP 处理动态请求
- 两者共享同一份业务代码或静态资源目录
3. 生命周期天然协同¶
Pod 内的容器会被一起调度到同一个节点上,也通常一起启动、一起销毁。这非常适合强依赖协作的服务组合。
三、Pod 的设计思想是什么¶
Pod 的设计,不是为了“把多个容器随便塞一起”,而是为了表达进程级协作关系。
它背后的几个核心思想包括:
- 多容器协作:适合主容器和 Sidecar 一起运行
- 强依赖服务聚合:适合必须共享网络和生命周期的一组进程
- 生命周期管理简化:把多容器组视为一个调度对象
- 兼容多种运行时:通过 CRI 对接不同容器运行时实现
所以,Pod 关注的不是“单个容器有多强”,而是“一组进程怎样以最小单位稳定协作”。
四、Pod 的基本创建方式¶
1. 推荐方式:写 YAML 创建¶
一个最小 Pod 示例:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
ports:
- containerPort: 80
这个 YAML 里最关键的字段可以这样理解:
apiVersion:资源 API 版本kind:资源类型metadata.name:Pod 名称spec.containers:容器定义列表
创建命令:
kubectl create -f nginx.yaml
查看状态:
kubectl get -f nginx.yml
kubectl get -f nginx.yml -o wide
2. 直接通过命令创建¶
kubectl run nginx --image=registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
然后查看:
kubectl get po nginx
kubectl get po nginx -o wide
这种方式适合临时验证,但长期管理仍然更推荐 YAML。
五、写 Pod YAML 时两个很好用的辅助命令¶
查看 Pod 相关 API 资源:
kubectl api-resources | grep pod
查看 Pod 字段定义:
kubectl explain pod
它们能帮助你快速确认 Pod 对象的版本、字段层级和写法,避免纯靠记忆硬写 YAML。
六、操作 Pod 时要注意什么¶
一个很容易忽略的点是:Pod 不是为“频繁在线修改”设计的对象。
在很多场景下,只有 annotations 和 labels 这类字段修改后还能直接替换;如果涉及容器镜像、端口、命令等关键字段,通常更稳妥的做法是删除旧 Pod,再按新定义重新创建。
这也是为什么在真实生产环境中,更常见的是用 Deployment 来管理 Pod,而不是长期手工直接改 Pod。