Pod 是什么
学习目标
- 理解 Pod 在 Kubernetes 中的定位
- 理解 Pod 与容器的关系
- 了解为什么需要 Pod 而不是直接管理容器
核心概念
一句话解释
Pod 是 Kubernetes 中最小的可部署单元,它封装了一个或多个紧密关联的容器。
为什么需要 Pod
Docker 方式:
┌─────────────────────────────────────┐
│ 容器 1 (Web) 容器 2 (Log Agent) │
│ 共享网络?共享存储?调度在一起? │
│ 手动管理,容易出错 │
└─────────────────────────────────────┘
Kubernetes Pod 方式:
┌─────────────────────────────────────┐
│ Pod │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 容器 1 │ │ 容器 2 │ │
│ │ (Web) │ │ (Log Agent) │ │
│ └─────────────┘ └─────────────┘ │
│ 共享网络命名空间 │
│ 共享存储卷 │
│ 一起调度到同一个节点 │
└─────────────────────────────────────┘
Pod 的核心特性
| 特性 | 说明 |
|---|---|
| 最小部署单元 | 不是容器,而是包含容器的抽象 |
| 共享网络 | 同一 Pod 内容器共享 IP 和端口空间 |
| 共享存储 | 可以挂载相同的 Volume |
| 原子调度 | Pod 整体调度,不会拆分 |
| 短暂存在 | Pod 是临时的,随时可能被替换 |
Pod vs 容器
| 方面 | 容器 | Pod |
|---|---|---|
| 粒度 | 单个进程 | 一个或多个容器 |
| 网络 | 独立网络命名空间 | 共享网络命名空间 |
| 存储 | 独立文件系统 | 可共享 Volume |
| 调度 | 不可调度 | 可被 K8s 调度 |
| 生命周期 | 独立 | 容器共享生命周期 |
什么时候用多容器 Pod
典型场景:
1. Sidecar 模式
主容器 + 辅助容器(日志收集、监控)
2. Ambassador 模式
主容器 + 代理容器(网络代理)
3. Adapter 模式
主容器 + 适配容器(格式转换)
原则:只有紧密关联的容器才放在同一个 Pod
Pod 的网络模型
┌────────────────────────────────────────┐
│ Node │
│ ┌──────────────────────────────────┐ │
│ │ Pod (IP: 10.244.1.5) │ │
│ │ ┌─────────┐ ┌─────────┐ │ │
│ │ │ 容器 A │ │ 容器 B │ │ │
│ │ │ :8080 │ │ :9090 │ │ │
│ │ └─────────┘ └─────────┘ │ │
│ │ localhost:8080 → 容器 A │ │
│ │ localhost:9090 → 容器 B │ │
│ └──────────────────────────────────┘ │
└────────────────────────────────────────┘
同一 Pod 内的容器可以通过 localhost 互相访问
实践练习
练习 1:理解概念
回答以下问题:
- Pod 和容器的关系是什么?
- 为什么 Kubernetes 选择 Pod 作为最小部署单元,而不是容器?
- 列举一个适合使用多容器 Pod 的场景。
练习 2:架构图画出
画出以下关系:
- Node → Pod → Container
- 标出 Pod 的共享网络和共享存储
练习 3:判断场景
判断以下场景是否适合放在同一个 Pod:
- Web 服务器 + 日志收集器
- Web 服务器 + 数据库
- 前端 + 后端 API
常见误解
1. Pod 不是容器
错误:Pod 就是一个容器
正确:Pod 是容器的封装,可以包含多个容器
Pod = 共享环境 + 一个或多个容器
2. Pod 是短暂的
错误:Pod 会一直存在
正确:Pod 随时可能被删除、重建
不要依赖 Pod 的 IP 或状态
使用 Service 来访问 Pod
小结
| 要点 | 说明 |
|---|---|
| Pod | Kubernetes 最小可部署单元 |
| 核心价值 | 封装紧密关联的容器 |
| 网络 | 同一 Pod 内容器共享网络 |
| 存储 | 可共享 Volume |
| 调度 | 原子调度,整体分配到节点 |
| 生命周期 | 短暂,不应依赖 Pod 状态 |
练习编辑器
bash
Loading...