「Kubernetes」- StorageClass, PersistentVolumeClaim

问题描述

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- 的前缀;