PVC(持久卷)
PVC 是一种 Kubernetes 原生资源,是对存储的需求声明,它抽象了底层存储细节,允许用户请求特定大小和访问模式的存储,而不必关心存储的具体实现。
创建 PVC
下面是一个基本的 PVC 配置示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-demo
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: cephfs-hdd
在该例中:
spec.resources.requests.storage字段定义了所申请的存储空间容量大小为1Gi。spec.accessModes字段定义了访问模式为ReadWriteMany,表示该 PVC 能够同时被多个节点上的 Pod 使用。spec.storageClassName字段定义了所使用的存储类名称为cephfs-hdd,集群中可用的存储类由管理员提供。
使用 PVC
下面是在 Pod 中使用 PVC 的示例:
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
spec:
  containers:
  - name: myfrontend
    image: nginx
    volumeMounts:
    - mountPath: "/var/www/html"
      name: data
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: pvc-demo
在该例中,pod-demo 将 pvc-demo 作为一个数据卷(volume)来使用,其中容器 myfrontend 将该数据卷挂载到 /var/www/html 目录下。
在 TensorStack AI 平台中,PVC 是通用的持久化存储资源,你在 Notebook、Job、MLService、Workflow 等 TensorStack 资源中都可以使用 PVC。以 Notebook 为例:
apiVersion: tensorstack.dev/v1beta1
kind: Notebook
metadata:
  name: notebook-demo
spec:
  type: jupyter
  template:
    spec:
      containers:
      - image: t9kpublic/torch-2.0.0-notebook:1.72.0
        name: notebook
        resources:
          limits:
            cpu: "4"
            memory: 4Gi
          requests:
            cpu: "0.5"
            memory: 500Mi
        volumeMounts:
        - name: workingdir
          mountPath: /t9k/mnt
      volumes:
      - name: workingdir
        persistentVolumeClaim:
          claimName: pvc-demo
在该例中,notebook-demo 将 pvc-demo 作为一个数据卷(volume)来使用,其中容器 notebook 将该数据卷挂载到 /t9k/mnt 目录下。
生命周期
PVC 有以下几种状态:
Pending:PVC 正在由对应的存储类处理。Bound:PVC 创建成功,可以被使用。Unknown:无法获取 PVC 状态。
PVC 与 Pod
PVC 的生命周期独立于 Pod。一个 PVC 可以被多个 Pod 使用。当 PVC 正在被 Pod 使用时,它无法被删除。
PVC 与 StorageShim
在 TensorStack AI 平台中,你可以:
- 创建一个独立的 PVC,申请全新的存储空间。
 - 创建一个 StorageShim,将已有存储系统的某个子目录挂载为一个 PVC。此时 StorageShim 控制器将为所创建的 StorageShim 创建一个同名的 PVC,此 PVC 的生命周期由 StorageShim 管理。
 
容量请求
创建 PVC 时,spec.resources.requests.storage 字段用于指定 PVC 的容量,你无法在 PVC 中存储超过此容量限制的文件。
访问模式
创建 PVC 时,spec.accessModes 字段用于指定 PVC 的访问模式,可选择以下几种访问模式:
ReadWriteMany:PVC 能被多个节点上的 Pod 读写。ReadWriteOnce:PVC 只能被一个节点上的 Pod 读写。ReadOnlyMany:PVC 只能被多个节点上的 Pod 读。
一般选择 ReadWriteMany 即可。
存储类
创建 PVC 时,spec.storageClassName 字段用于指定 PVC 的存储类,集群中可用的存储类由管理员提供。
例如,一个集群可能提供两个存储类,名为 cephfs-hdd 和 cephfs-ssd,分别提供基于 HDD 机械硬盘和 SSD 固态硬盘的存储空间,用于不同的数据存储目的。