问题描述
storage classes允许管理员定义各种所需的存储类。对于开发人员来说,storage classes可以抽象存储类型,并方便开发人员直接使用PVC,而无需关心存储本身。
解决方案
1)参考 StorageClass + PersistentVolumeClaim 笔记,获取驱动配置示例。
2)在 PVC 中,使用存储类来自动分配存储:
cat > storageclass-testing.yaml <<EOF --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-claim spec: storageClassName: nas-client-provisioner accessModes: - ReadWriteMany resources: requests: storage: 1Mi --- apiVersion: v1 kind: Pod metadata: name: task-pv-pod spec: volumes: - name: task-pv-storage persistentVolumeClaim: claimName: test-claim initContainers: - name: touch-file image: busybox command: ["touch", "/srv/pv-test/test-file.txt"] volumeMounts: - mountPath: "/srv/pv-test/" name: task-pv-storage containers: - name: busybox image: busybox command: ['sh', '-c', 'echo The app is running! && sleep 3600'] volumeMounts: - mountPath: "/srv/pv-test/" name: task-pv-storage EOF kubectl apply -f storageclass-testing.yaml # 检查 NFS 存储是否存在 test-file.txt 文件
on Minnikube
minikube中有默认的存储类,该存储类定义了一个默认的PV provisioner,这意味这当PVC创建时,k8s会自动创建一个相应的PV来忙组该PVC。
查看minikube的默认存储类:kubectl get storageclass,该存储类使用的存储provisioner会创建hostPath类型的PV。
你可以测试以下,直接定义一个PVC,然后使用kubectl get pv命令查看自动创建的PV。因此,即使Pod死亡,或者被删除,数据依旧会保存下来。
云商存储类文档
1)Alibaba Cloud/存储类(StorageClass)
2)Dynamically Provisioning Persistent Storage on GKE
常用参数解释(parameters)
nfs-client-provisioner源码分析 · Kubernetes 学习笔记
Persistent Volumes | Kubernetes
Storage Classes | Kubernetes
reclaimPolicy
Retain,将进行保留,后面能够重新使用。
Delete,仅进行删除。而 archiveOnDelete 能够控制在删除时是进行 归档 还是 实际删除;
archiveOnDelete
字面意思为“删除时是否存档”:
1)false,表示不存档,即删除数据,
2)true,表示存档,即重命名路径。默认值。表明需要删除时存档,即将oldPath重命名,命名格式为oldPath前面增加 archived- 的前缀;