1.简化版
Node 、 Pod 和Container 都属于Kubernetes体系的核心概念:
- Node是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。
- - 是集群的基础设施层
- - 提供计算资源(CPU、内存、存储、网络)
- - 可以是 Master 节点或 Worker 节点
- Pod是 Kubernetes 中最小的可部署单元(最小调度单位),是对容器的封装。
- - 是应用程序的运行载体
- - 包含一个或多个容器
- - 共享网络命名空间和存储卷
- Container是 Pod 中实际运行应用程序的单元,基于容器镜像创建。
直观对比:
┌─────────────────────────────────────────┐ │ Node(节点) │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Pod A │ │ Pod B │ │ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │ │ │ │Container│ │ │ │Container│ │ │ │ │ └─────────┘ │ │ └─────────┘ │ │ │ └─────────────┘ └─────────────┘ │ │ CPU / Memory / Disk / Network │ └─────────────────────────────────────────┘类比:
Node ≈ 酒店(提供房间和基础设施) Pod ≈ 客房(实际住人的地方) 容器 ≈ 房间里的床位 一个酒店可以有多个客房 一个客房可以有多个床位(多容器 Pod) 客人(应用)住在床位上2. Kubernetes 核心概念介绍
2.1 🖥️ Node(节点)
Node 是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。
节点类型:
集群架构 ├── Master Node(控制节点) │ ├── API Server # 集群入口,处理所有请求 │ ├── Scheduler # 负责 Pod 调度 │ ├── Controller Manager # 管理控制器 │ └── etcd # 集群状态存储 │ └── Worker Node(工作节点) ├── kubelet # 管理节点上的 Pod ├── kube-proxy # 网络代理,处理服务转发 └── Container Runtime # 容器运行时(如 Docker、containerd)查看节点:
kubectl get nodes kubectl describe node <node-name>2.2 📦 Pod
Pod 是 Kubernetes 中最小的可部署单元,是对容器的封装。
核心特性:
| 特性 | 说明 |
|---|---|
| 共享网络 | Pod 内所有容器共享同一个 IP 和端口空间 |
| 共享存储 | Pod 内容器可以访问相同的 Volume |
| 生命周期 | Pod 是临时性的,重启后 IP 会变化 |
| 最小单元 | 调度、扩缩容的基本单位 |
Pod 示例:
apiVersion: v1 kind: Pod metadata: name: my-pod labels: app: myapp spec: containers: - name: main-container # 主容器 image: nginx:latest ports: - containerPort: 80 - name: sidecar-container # 边车容器 image: busybox command: ['sh', '-c', 'echo Hello']Pod 生命周期:
Pending → Running → Succeeded ↘ Failed ↘ Unknown2.3 🐳 Container(容器)
Container 是 Pod 中实际运行应用程序的单元,基于容器镜像创建。
容器类型:
Pod 中的容器类型 ├── Init Container(初始化容器) │ └── 在主容器启动前运行,用于初始化工作 │ ├── Main Container(主容器) │ └── 运行业务应用 │ └── Sidecar Container(边车容器) └── 辅助主容器,如日志收集、监控等容器配置示例:
containers: - name: my-app image: my-app:1.0 # 资源限制 resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" # 环境变量 env: - name: ENV_NAME value: "production" # 健康检查 livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 # 挂载存储 volumeMounts: - name: config-volume mountPath: /etc/config2.4 三者关系
2.4.1 Node和Pod的区别和联系
Node和Pod的区别:
| 维度 | Node | Pod |
|---|---|---|
| 本质 | 物理/虚拟机器 | 逻辑运行单元 |
| 层级 | 基础设施层 | 应用层 |
| 生命周期 | 长期稳定存在 | 短暂、可随时重建 |
| IP 地址 | 节点 IP(固定) | Pod IP(重启会变) |
| 资源 | 提供资源 | 消耗资源 |
| 数量关系 | 集群节点数较少 | Pod 数量可以很多 |
| 管理者 | 运维/云平台 | Kubernetes 调度器 |
Node和Pod的联系:
1. 包含关系 Node 承载 Pod,每个 Pod 必须运行在某个 Node 上 2. 资源关系 Pod 申请资源 → Kubernetes 调度 → 分配到合适的 Node 3. 生命周期关联 Node 宕机 → 其上的 Pod 被重新调度到其他 Node2.4.2 调度过程
用户创建 Pod ↓ Scheduler 根据资源需求选择合适的 Node ↓ Pod 被绑定到 Node 上运行 ↓ Node 上的 kubelet 负责管理该 PodContainer 是 Pod 的内部实现细节,用户不直接管理 Container:
用户/开发者 → 创建 Pod(或更高层的工作负载) ↓ Kubernetes 负责在 Pod 内创建和管理 Container在生产中,用户很少直接创建pod,通常创建的是更高层的工作负载对象,由它们来管理 Pod:
用户创建 │ ├── Deployment # 无状态应用(最常用) ├── StatefulSet # 有状态应用(数据库等) ├── DaemonSet # 每个 Node 跑一个(日志收集等) ├── Job / CronJob # 一次性/定时任务 └── (直接创建 Pod) # 极少,仅用于测试因为直接创建的 Pod(裸 Pod)有致命缺陷:
1.直接创建的 Pod(裸 Pod)有致命缺陷: Node 宕机 ↓ Pod 消失 ↓ ❌ 没有人重建它!应用就挂了 2. Deployment 管理的 Pod: Node 宕机 ↓ Pod 消失 ↓ ✅ Deployment Controller 自动在其他 Node 重建 Pod典型用户操作示例:
# 用户实际写的是 Deployment apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 # 我要 3 个 Pod selector: matchLabels: app: my-app template: # 这里描述 Pod 的模板 spec: containers: # Pod 内的容器定义 - name: app image: nginx调度流程:
用户创建 Deployment ↓ Deployment Controller 自动创建 3 个 Pod ↓ Scheduler 将每个 Pod 调度到合适的 Node ↓ kubelet 在 Node 上启动 Container层级总结:
用户关心 → Deployment / StatefulSet(我要几个副本,用什么镜像) ↓ 自动管理 K8s 负责 → Pod(调度、重启、健康检查) ↓ 自动管理 K8s 负责 → Container(启动、停止容器进程)