k8s中的Pod

Pod 是 Kubernetes 调度和管理的最小单位,一个 Pod 里可以包含一个或多个 Docker 容器。在k8s当中,Pod更像是一种思想,一种统一的规范,更好的理解的话应该这么说:就像是产品经理整理的需求和想法,所以叫做思想,而docker则是其中的一种实现方式

Pod 与 Docker 容器的关系

Pod ≠ Docker 容器,一个 Pod = 一个逻辑主机,里面跑的多个 Docker 容器 = 这台主机上的多个进程,最常见两种模式:

  1. 单容器 Pod(绝大多数场景)
    1. 1 个 Pod = 1 个 Docker 容器
  2. 多容器 Pod(Sidecar 模式)
    1. 1 个 Pod = 主业务容器 + 日志容器 + 监控容器等,它们共享网络和存储,一起启停

为什么 K8s 不直接用 Docker 容器?

  1. 容器太小、太原子,不方便管理(网络、存储、启停、亲和性)
  2. Pod 提供了统一的部署、网络、存储、生命周期管理单元
  3. K8s 还支持替换 Docker(比如 containerd、CRI-O),但 Pod 概念不变

明明 Docker 已经能跑容器了,为什么 K8s 非要多搞一层 Pod?

Docker 容器 = 进程,太 "小" 了

一个 Docker 容器本质就是一个隔离环境,跑一个主进程但真实业务不是单进程,而是一组进程,例如一组服务可能需要:Nginx 反向代理

  • 业务应用
  • 日志收集
  • 监控 agent
  • 配置热更新 sidecar

这些进程必须一起调度、一起启停、共享网络和存储。Docker 做不到天然把多个容器绑定在一起,而 Pod 就是为了解决这个问题诞生的。

多个容器必须 "亲密协作"

Docker 做不到天然支持,典型场景:业务容器写日志到本地文件,Log 容器读取日志并上传,如果是两个独立 Docker 容器:

  • 网络不互通
  • 存储不共享
  • 调度可能被分到不同机器
  • 无法保证一起启动 / 一起销毁

Pod 解决了:

  • 共享 Network Namespace:同一 IP,localhost 互通
  • 共享 Volume:文件互通
  • 一起调度:要么都在一台机器,要么都不在
  • 一起生命周期:同生共死

这就是 Sidecar 模式,是微服务基石,Docker 本身不支持。

Docker 缺少 "调度单元" 需要的元信息

K8s 调度要知道:

  • 资源需求(CPU / 内存)
  • 亲和性、反亲和性
  • 健康检查
  • 重启策略
  • 存储挂载
  • 网络配置

这些不属于单个容器,而是属于一组容器整体,Pod 就是用来承载这些调度属性的 "壳",Docker 容器只管运行,不管调度。

最通俗的类比

Docker 容器 = 进程,Pod = 一台虚拟机(逻辑主机),一台机器里可以跑多个进程,它们:

  • 共享 IP
  • 共享目录
  • 一起开关机
  • 统一资源分配

这就是 Pod,Docker 只提供 "进程",不提供 "逻辑主机"。

相关推荐
CodeMartain3 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
牛奶咖啡134 小时前
k8s容器编排技术实践——使用containerd作为容器运行时部署k8s集群
kubernetes·k8s的安装部署·开启系统的ipvs支持·安装containerd·containerd配置加速器·安装k8s的工具·安装calico网络插件
万里侯4 小时前
云原生数据备份与恢复:保障数据安全的最佳实践
微服务·容器·k8s
llrraa20105 小时前
配置docker国内镜像源
运维·docker·容器
阿里云云原生5 小时前
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
云原生
2301_780789666 小时前
手游遇到攻击为什么要用SDK游戏盾手游遇到攻击为什么要用 SDK 游戏盾?
安全·web安全·游戏·架构·kubernetes·ddos
35岁程序员的自救之路6 小时前
AiBBS - 面向下一个十年的AI + 云原生社区系统
人工智能·云原生
珂玥c7 小时前
k8s集群ingress碎碎念
云原生·容器·kubernetes
佳杰云星7 小时前
如何给大模型集群选“大脑”?智算调度与管理平台 10 维选型指南(附选型评分表)
人工智能·kubernetes·大模型·云计算·gpu·算力调度·智算中心
比特森林探险记9 小时前
context 在 gRPC / Gin / K8s 中的实战
容器·kubernetes·gin