Kubernetes 中的 StorageClass 是什么?

发布: (2026年2月26日 GMT+8 19:49)
5 分钟阅读
原文: Dev.to

Source: Dev.to

存储流程的原理

在 Kubernetes 中,存储链路如下:

Pod → PVC → StorageClass → PV → Physical Storage

持久卷(PV)

PV 代表集群内部的真实磁盘资源。该资源可以是以下之一:

  • 节点上的本地磁盘
  • NFS 共享
  • 云磁盘
  • 分布式存储

也就是说,PV 就是存储本身。

持久卷声明(PVC)

PVC 是应用对磁盘的需求。例如:

resources:
  requests:
    storage: 10Gi
accessModes:
  - ReadWriteOnce
storageClassName: fast-storage

PVC 并不会创建磁盘;它仅仅是请求一块磁盘。

StorageClass 是什么?

StorageClass 是在创建 PVC 时决定磁盘如何被提供的策略层。例如:

  • 磁盘是本地的、NFS 还是云块存储?
  • 是否自动创建?
  • 使用哪种性能等级?

静态 vs 动态供给

静态供给(Static Provisioning)

  • 手动创建 PV。
  • 先定义存储资源,然后将 PVC 绑定到该 PV。
  • 提供更高的可控性,但每次需要新磁盘时都要手动操作。
  • 通常在测试环境或本地/NFS 部署中使用。

动态供给(Dynamic Provisioning)

  • 只创建 PVC。
  • 与之关联的 StorageClass 会在后台自动创建合适的 PV 并绑定到 PVC。
  • 该过程依赖 CSI(容器存储接口)驱动实现。
  • 在生产环境中常被采用;更自动化且易于扩展。

磁盘实际位于哪里?

这个问题的答案在 PV 的定义中。

本地 PV

如果 PV 指向某个路径,例如 /mnt/k8s/data,则磁盘位于节点本地。节点故障时数据可能会丢失;如果 Pod 被调度到其他节点,则无法访问该磁盘。

NFS

nfs:
  server: 192.168.1.10
  path: /srv/nfs/share

磁盘位于 NFS 服务器上。无论 Pod 运行在哪个节点,都可以访问相同的数据。

云存储

如果 PV 绑定到云卷,则磁盘位于云提供商侧。

访问模式(Access Modes)

  • ReadWriteOnce (RWO) – 只能被单个节点写入。
  • ReadWriteMany (RWX) – 可被多个节点写入。
  • ReadOnlyMany (ROX) – 可被多个节点只读访问。

回收策略(Reclaim Policy)

决定 PVC 被删除后磁盘如何处理。Kubernetes 中有三种回收策略(其中一种已废弃):

  • Retain – 即使 PVC 被删除,PV 及其内部数据仍被保留。
  • Delete – 删除 PVC 时,同时删除 PV 和其背后的存储资源。
  • Recycle(已废弃) – 简单清理 PV 中的数据,使其可以再次使用。

示例:MariaDB 与 PostgreSQL 数据存放在哪里?

MariaDB

  • 默认数据目录:/var/lib/mysql
  • 如果未配置持久化,该目录位于容器文件系统上;Pod 被删除时数据会丢失。
  • 开启持久化后,这个路径会通过 volumeMount 绑定到 PVC:PVC → PV → Physical storage。即使 Pod 被删除,数据仍然保留。
kubectl describe pod <pod-name>

使用上述命令可以查看挂载的路径。

PostgreSQL

  • 默认数据目录:/var/lib/postgresql/data
  • 原理与 MariaDB 相同。若没有持久化,数据是临时的;若有持久化,则该目录会挂载到 PVC,实际磁盘由 PV 管理。

如何找到真实磁盘位置?

# 查找 PVC
kubectl get pvc -n <namespace>

# 查看绑定的 PV
kubectl describe pvc <pvc-name>

# 查看 PV 详细信息
kubectl describe pv <pv-name>

通过这些命令可以判断 PV 是本地路径、NFS 服务器、云卷还是分布式存储。真实磁盘位置在 PV 的定义中说明。

0 浏览
Back to Blog

相关文章

阅读更多 »