行业资讯
Node、Pod和Container的概念简介
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-name2.2 PodPod 是 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的区别维度NodePod本质物理/虚拟机器逻辑运行单元层级基础设施层应用层生命周期长期稳定存在短暂、可随时重建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启动、停止容器进程
郑州网站建设
网页设计
企业官网