因为环境问题,下面的例子使用minikube运行。
创建StorageClass # storageclass-fast.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: k8s.io/minikube-hostpath parameters: type: pd-ssd运行查看
-> [feifei@ffmac.local] [~/work/k8s] kubectl create -f storageclass-fast.yaml storageclass.storage.k8s.io/fast created -> [feifei@ffmac.local] [~/work/k8s] kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE fast k8s.io/minikube-hostpath Delete Immediate false 114m standard (default) k8s.io/minikube-hostpath Delete Immediate false 117m 创建PVC引用StorageClass # pvc-storageclass.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-sc spec: resources: requests: storage: 10Mi accessModes: - ReadWriteOnce storageClassName: fast # 引用了上面名为fast的StorageClass可以看到,成功创建了一个名为pvc-be95fa9c-0666-4e3b-a2e2-a68c0bbea6f6的持久卷,绑定的持久卷声明是default/pvc-sc。访问模式与存储大小与pvc-sc的都一致。
-> [feifei@ffmac.local] [~/work/k8s] kubectl create -f pvc-storageclass.yaml persistentvolumeclaim/pvc-sc created -> [feifei@ffmac.local] [~/work/k8s] kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-be95fa9c-0666-4e3b-a2e2-a68c0bbea6f6 10Mi RWO Delete Bound default/pvc-sc fast 3m36s -> [feifei@ffmac.local] [~/work/k8s] kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-sc Bound pvc-be95fa9c-0666-4e3b-a2e2-a68c0bbea6f6 10Mi RWO fast 3m40s 不指定存储类的动态配置如果将PVC配置中的storageClassName设置为空,那么创建PVC时将优先绑定到预先配置的PV,而不是由StorageClass配置新的PV。
流程图 小结卷是Pod的一部分,与Pod共享生命周期。它不是独立的Kubernetes对象,因此不能单独创建。
卷提供的存储功能不但可以解决容器重启后数据丢失的问题,还可以使数据在容器间共享。
gitRepo卷基本上相当于emptyDir,它在容器启动前从git仓库检出填充数据。但git仓库与gitRepo的内容并不保持同步。
hostPath卷提供的是映射到工作节点本地的持久存储
PV是一种资源,并且不属于任何命名空间。它的功能与卷类似,但是它的生命周期是独立于Pod的。PV由集群管理员创建,并被Pod通过PVC使用。
PVC创建好后,Kubernetes会寻找适当的PV将其绑定到PVC。持久卷必须要足够大,并且包含声明中指定的访问模式。
可以在现有的PV上更改卷回收策略,比如开始设置为Delete,可以改为Retain。
StorageClass为引用它的PVC在创建的时候通过置备程序创建一个PV
如果将PVC配置中的storageClassName设置为空,那么创建PVC时将优先绑定到预先配置的PV,而不是由StorageClass配置新的PV。