2. Kubernetes 基础回顾:Pod、Service、Deployment、StatefulSet 核心概念
在部署 MinIO 存储集群之前,必须牢固掌握 Kubernetes 的四个核心抽象:Pod(最小调度单元)、Service(网络访问抽象)、Deployment(无状态工作负载)和 StatefulSet(有状态工作负载)。MinIO 作为有状态分布式存储,其持久化标识、网络拓扑和扩缩容行为与 StatefulSet 的设计理念高度吻合。
2.1 Pod:最小部署单元
Pod 是 Kubernetes 中可创建和管理的最小计算单元。一个 Pod 可以包含一个或多个容器(通常为一个主容器加若干 sidecar 辅助容器),这些容器共享同一网络命名空间、存储卷和生命周期。
- 共享 IP 与端口空间:Pod 内所有容器通过
localhost互相通信。 - 共享存储卷:Pod 级别的 Volume 可被内部所有容器挂载。
- 原子调度:Pod 要么全部运行在同一节点,要么全部不运行。
- 临时性:Pod 被设计为可丢弃的,IP 地址不固定。
MinIO 关联:每个 MinIO 实例运行在一个 Pod 中,但 MinIO 的分布式模式要求 Pod 之间通过固定的 DNS 名称(而非 IP)互相发现,因此不能直接使用普通 Pod。
2.2 Service:稳定的网络访问入口
Service 为一组动态变化的 Pod 提供稳定的虚拟 IP(ClusterIP)和 DNS 名称,实现服务发现与负载均衡。根据访问场景,Service 分为四种类型:
| 类型 | 访问范围 | 典型用途 |
|---|---|---|
| ClusterIP | 集群内部 | 后端服务间调用(MinIO 内部通信) |
| NodePort | 集群外部(节点 IP + 端口) | 开发测试环境暴露服务 |
| LoadBalancer | 集群外部(云负载均衡器) | 生产环境对外暴露 MinIO S3 API |
| Headless Service | 无 ClusterIP,直接返回 Pod DNS | StatefulSet 的有状态网络标识 |
关键点:MinIO 分布式集群使用 Headless Service(
clusterIP: None)为每个 Pod 提供稳定的 DNS 名称,格式为 <pod-name>.<service-name>.<namespace>.svc.cluster.local。
2.3 Deployment:无状态应用管理
Deployment 是 Kubernetes 中最常用的工作负载控制器,用于管理无状态应用的声明式更新和扩缩容。其核心特性包括:
- ReplicaSet 管理:Deployment 控制 ReplicaSet,ReplicaSet 确保指定数量的 Pod 副本运行。
- 滚动更新:支持逐步替换旧版本 Pod,实现零停机发布。
- 回滚:保留历史版本,可快速回退到任意稳定版本。
- 水平扩缩:调整副本数,Pod 名称随机生成,无持久标识。
不适用于 MinIO:Deployment 生成的 Pod 名称是随机的(如
nginx-7c8b9d6f8f-abcde),且 Pod 重建后名称和 IP 都会改变。MinIO 分布式集群要求每个节点有固定的标识,因此不能使用 Deployment。
2.4 StatefulSet:有状态应用管理
StatefulSet 是为有状态应用设计的工作负载控制器,解决了 Deployment 无法提供稳定网络标识和持久存储的问题。它是部署 MinIO 分布式集群的唯一正确选择。
| 特性 | Deployment | StatefulSet |
|---|---|---|
| Pod 命名规则 | 随机后缀(如 app-6b8d9f-xyz) |
有序索引(如 minio-0, minio-1) |
| 网络标识 | Pod 重建后 IP 变化 | 稳定的 DNS 名称(Headless Service) |
| 存储卷 | 所有 Pod 共享同一卷或临时卷 | 每个 Pod 绑定独立的 PersistentVolumeClaim |
| 扩缩容顺序 | 任意顺序创建/删除 | 按索引顺序(0→N-1 创建,N-1→0 删除) |
| 典型场景 | Web 服务、API 网关 | 数据库、消息队列、分布式存储(MinIO) |
MinIO 为何需要 StatefulSet:MinIO 分布式模式使用
http://minio-{0..N-1}.minio-hl.namespace.svc.cluster.local:9000 格式进行节点间通信。StatefulSet 保证每个 Pod 的 DNS 名称在重建后保持不变,这是 MinIO 集群拓扑稳定的基础。
2.5 核心概念总结
下表汇总了四个核心抽象在 MinIO 部署中的角色:
| 概念 | MinIO 中的角色 | 关键配置 |
|---|---|---|
| Pod | 运行 MinIO 容器实例 | 资源限制、健康检查、存储卷挂载 |
| Service | Headless Service 提供稳定 DNS;ClusterIP/LB 对外暴露 S3 API | clusterIP: None 用于内部发现 |
| Deployment | 不用于 MinIO 本身,可用于 MinIO Client 或辅助工具 | 无状态工具部署 |
| StatefulSet | MinIO 分布式集群的主控制器 | serviceName 指向 Headless Service |