梗概

Pod 是 Kubernetes 中最小的可部署单元,通常包含一个或多个容器。容器在 Pod 中共享存储、网络和命名空间。一个 Pod 通常被设计为运行一个应用程序的一个实例。

详细说明

Pod 基本概念

  • K8s 最小部署单元,包含一个或多个紧密关联的容器(共享网络和存储)
  • 在一个集群中,通常会同时运行多个不同的Pod(对应不同的应用、服务或组件)
  • 每个Pod(更准确地说,是由控制器管理的Pod)可以根据需求创建多个副本
  • 示例:一个前端容器 + 一个日志收集容器可打包成一个 Pod

Pod 的特性

  • 共享网络命名空间:Pod 内的所有容器共享同一个 IP 地址、端口空间和网络设备
  • 共享存储卷:Pod 内的容器可以访问共同挂载的存储卷
  • 生命周期短暂:Pod 设计为可替换的,不推荐直接管理单个 Pod
  • 原子性:Pod 作为一个整体被调度、创建、删除和伸缩

Pod 与容器的关系

  • Pod 是容器的”包装”,将多个容器组织成一个部署单元
  • 每个 Pod 中通常会有一个主容器和若干辅助容器(sidecar)
  • 主容器提供核心功能,辅助容器提供支持服务(如日志收集、代理、监控等)
  • 同一 Pod 内的容器总是被调度到同一节点上

Pod 的调度与部署

  • Pod 通过调度器分配到集群中的节点上
  • 节点上的 Kubelet 负责创建和管理 Pod 中的容器
  • 通常通过更高级别的抽象(如 Deployment)来管理 Pod,而不是直接创建
  • Pod 可以通过污点和容忍控制其被调度到哪些节点

Pod 的生命周期

  1. 创建:通过 API 服务器接收创建请求
  2. 调度:调度器为 Pod 选择合适的节点
  3. 运行:节点上的 Kubelet 创建容器并运行
  4. 终止:Pod 完成任务或被删除时终止

Pod 与控制器

  • 很少直接创建单个 Pod,通常使用控制器管理 Pod
  • 控制器(如 Deployment、StatefulSet、DaemonSet 等)负责管理 Pod 的副本数、更新策略等
  • 控制器确保 Pod 的实际状态与期望状态一致
  • 当 Pod 失败时,控制器负责创建新的 Pod 替代它

Pod 与服务发现

  • Pod 的 IP 地址是不稳定的,Pod 重启后 IP 会改变
  • 通过 Service 资源可以为一组 Pod 提供稳定的网络访问点
  • Service 通过选择器与 Pod 关联,自动发现和路由到符合条件的 Pod

father:: kubernetes