volume解决两个问题:

  1. Pod中的文件是暂时的,Pod删除后会丢失。
  2. 同一个Pod中的容器之间有文件共享的需求。

Volume具备明确的lifetime:与创建它的Pod共生死。Pod中的容器重启、迁移,不会影响Volume。

本质上,Volume就是一个目录。

spec.volumes spec.containers.volumeMounts

Volume不能挂载到其他Volume上,也不能建立硬链接到其他Volume。

k8s支持的Volume类型:

云存储:awsElasticBlockStore,azureDisk,azureFile,gcePersistentDisk 企业自建:cephfs,glusterfs,iscsi,nfs,fc (fibre channel),rbd,vsphereVolume k8s:configMap,secret csi,downwardAPI 本地:emptyDir,hostPath,local storageos quobyte portworxVolume projected scaleIO flocker gitRepo persistentVolumeClaim

前3种,Pod被删除时,只是会将volume从Pod中卸载,并不会删除其数据,因此可以用来在Pod之间递交数据。