【51CTO.com快译】
您可能知道Pod中的数据在Pod的整个生命周期过程中一直存在。如果Pod消失,属于该Pod的所有数据也随之消失。因此,如果您希望在Pod的生命周期结束后保留数据,Kubernetes中就要有所谓的持久卷。
不妨学习如何创建HostPath持久卷,这很容易上手。同时了解有关持卷的基础知识。
就不同供应商而言,kubernetes中可供使用的持久卷有以下类型。
- GCEPersistentDisk
- AWSElasticBlockStore
- AzureFile
- AzureDisk
- CSI
- FC(光纤通道)
- FlexVolume
- Flocker
- NFS
- iSCSI
- RBD(Ceph Block Device)
- CephFS
- Cinder(OpenStack块存储)
- Glusterfs
- VsphereVolume
- Quobyte Volumes
- HostPath(仅用于单节点测试——不以任何方式支持本地存储,无法在多节点集群中运行)
- Portworx Volumes
- ScaleIO Volumes
- StorageOS
如您所见,就HostPath而言,应仅将其用于测试目的。它也不支持多节点集群。如果您想了解有关持久卷的更多信息,可以点击该链接(https://kubernetes.io/docs/concepts/storage/persistent-volumes/)。
持久卷的基本过程如下:
- K8s管理员在集群中创建持久卷。
- 用户一旦声明其状态变为“Bound”,便使用“持久卷声明”对其进行声明。
- 然后Pod使用该卷存储将在Pod的生命周期结束后持续存在的数据。
理论方面讲得够多了,不妨说说技术步骤:
- 创建持久卷
在该步骤中,我们使用以下yaml清单文件来实现同样的目的。
图1
如上述定义文件显示,其存储大小是1GB。路径是“/tmp/kube”。不妨创建PV,如下所示:
图2
使用以下命令,再次核查PV和持久卷声明:
图3
如您所见,PV已创建,其状态为Available;由于我们未指定重新声明策略,使用默认值“Retain”,这意味着即使pvc(持久卷声明)被删除,PV和数据也不会自动被删除。我们会对此进行测试。
- 创建持久卷声明
为了使用PV,我们需要创建持久卷声明或PVC来使用它。以下是同样的yaml清单文件。
图4
上述定义中有必要指出,声明仅针对100mb(>= size of PV),另外Access模式是“ReadWriteOnce”,这与PV的模式一样。因此,我们能够创建PVC,如下所示:
图5
检查pv和pvc的状态。
图6
您会看到,pv的状态已从之前的Available变成了Bound。
- 创建Pod,把该PV作为里面的挂载点来使用。
图7
如Pod定义文件中所述,它会在Pod里面创建挂载点/tmp/mydata。不妨使用上述定义文件创建Pod。
图8
检查状态,并检查Pod:
图9
在描述输出中,您可以看到/tmp/mydata卷是使用来自声明pvc-hostpath的host-volume创建的。另外,Pod是在节点“kworker01”上按计划/创建的。
不妨登录进入到Pod创建示例文件。为了演示Pod消失后数据的生命周期:
图10
在上述演示中,我们在/tmp/mydata里面创建了“Hello.txt”。现在不妨删除Pod。
图11
Pod已成功删除,不妨登录入节点“kworker01”,Pod之前已按计划创建,检查数据在Pod删除后是否持久存在。
图12
您可以看到,即便Pod已消失,我们的文件“Hello.txt”仍驻留在节点上。
原文标题:How to create HostPath persistent volume in Kubernetes
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】