在Kubernetes中,卷可以被认为是pod中容器可以访问的目录.我们在Kubernetes中有不同类型的卷,类型定义了卷的创建方式及其内容.
卷的概念与Docker一起出现,但唯一的问题是卷非常局限于特定的吊舱.一旦pod的生命周期结束,音量也会丢失.
另一方面,通过Kubernetes创建的卷不仅限于任何容器.它支持部署在Kubernetes容器内的任何或所有容器. Kubernetes卷的一个关键优势是,它支持不同类型的存储,其中pod可以同时使用多个存储.
Kubernetes卷的类型
以下是一些流行的Kubernetes音量和减号的列表;
emptyDir : 它是首次将Pod分配给节点时创建的卷类型.只要Pod在该节点上运行,它就会保持活动状态.卷最初为空,并且pod中的容器可以读取和写入emptyDir卷中的文件.从节点中删除Pod后,emptyDir中的数据将被删除.
hostPath : 这种类型的卷将文件或目录从主机节点的文件系统安装到您的pod中.
gcePersistentDisk : 此类型的卷将Google Compute Engine(GCE)永久磁盘装入您的Pod.从节点中删除Pod时, gcePersistentDisk 中的数据保持不变.
awsElasticBlockStore : ;此类卷将Amazon Web Services(AWS)弹性块存储装入Pod.就像 gcePersistentDisk 一样,当从节点中删除Pod时, awsElasticBlockStore 中的数据保持不变.
nfs : nfs 卷允许将现有NFS(网络文件系统)安装到您的pod中.从节点中删除Pod时,不会删除 nfs 卷中的数据.该音量仅是未安装的.
iscsi : iscsi 卷允许将现有的iSCSI(SCSI over IP)卷安装到您的pod中.
flocker : 它是一个开源的集群容器数据卷管理器.它用于管理数据卷. flocker 卷允许将Flocker数据集安装到pod中.如果Flocker中不存在数据集,那么首先需要使用Flocker API创建它.
glusterfs : Glusterfs是一个开源的网络文件系统. glusterfs音量允许将glusterfs音量安装到您的吊舱中.
rbd : RBD代表Rados Block Device. rbd 卷允许将Rados Block Device卷安装到您的pod中.从节点中删除Pod后,数据仍保留.
cephfs : cephfs 卷允许将现有的CephFS卷安装到您的pod中.从节点中删除Pod后数据保持不变.
gitRepo : gitRepo 卷安装一个空目录,并将 git 存储库克隆到其中,供您使用.
秘密 : 秘密卷用于将敏感信息(如密码)传递到广告连播.
persistentVolumeClaim : 去; persistentVolumeClaim 卷用于将PersistentVolume挂载到pod中. PersistentVolumes是用户在不知道特定云环境的详细信息的情况下"声称"持久存储(例如GCE PersistentDisk或iSCSI卷)的方式.
向下API : 向下API 卷用于向应用程序提供向下的API数据.它挂载一个目录并以纯文本文件写入请求的数据.
azureDiskVolume : AzureDiskVolume 用于将Microsoft Azure数据磁盘装入Pod.
持久卷和持久卷索赔
持续交易量(PV) : 它是管理员配置的网络存储.它是群集中的资源,独立于使用PV的任何单个pod.
持久性卷声明(PVC) : Kubernetes要求其存储容器的存储称为PVC.用户不需要知道底层配置.声明必须在创建pod的同一命名空间中创建.
创建持久卷
kind: PersistentVolume ---------> 1apiVersion: v1metadata: name: pv0001 ------------------> 2 labels: type: localspec: capacity: -----------------------> 3 storage: 10Gi ----------------------> 4 accessModes: - ReadWriteOnce -------------------> 5 hostPath: path: "/tmp/data01" --------------------------> 6
在上面的代码中,我们定义了 :
种类:PersistentVolume → 我们已经将类型定义为PersistentVolume,它告诉kubernetes正在使用的yaml文件是创建持久卷.
name:pv0001 → 我们正在创建的PersistentVolume的名称.
容量: → 此规范将定义我们正在尝试创建的PV容量.
存储:10Gi → 这告诉底层基础设施我们试图在定义的路径上声明10Gi空间.
ReadWriteOnce → 这告诉我们正在创建的卷的访问权限.
路径:"/tmp/data01" → 该定义告诉机器我们正在尝试在底层基础架构上的此路径下创建卷.
创建PV
$ kubectl create -f local-01.yaml persistentvolume"pv0001"created
检查PV
$ kubectl create –f local-01.yamlpersistentvolume "pv0001" created
描述PV
$ kubectl describe pv pv0001
创建持久性卷索赔
kind: PersistentVolumeClaim --------------> 1apiVersion: v1metadata: name: myclaim-1 --------------------> 2spec: accessModes: - ReadWriteOnce ------------------------> 3 resources: requests: storage: 3Gi ---------------------> 4
在上面的代码中,我们定义了 :
种类:PersistentVolumeClaim → 它指示我们试图声明指定空间量的底层基础架构.
name:myclaim-1 → 我们正在尝试创建的声明的名称.
ReadWriteOnce → 这指定了我们尝试创建的声明模式.
存储:3Gi → 这将告诉kubernetes我们要申请的空间数量.
创建PVC
$ kubectl create –f myclaim-1persistentvolumeclaim "myclaim-1" created
获取详细信息关于PVC
$ kubectl get pvcNAME STATUS VOLUME CAPACITY ACCESSMODES AGEmyclaim-1 Bound pv0001 10Gi RWO 7s
描述PVC
$ kubectl describe pv pv0001
将PV和PVC与POD一起使用
kind: PodapiVersion: v1metadata: name: mypod labels: name: frontendhttpspec: containers: - name: myfrontend image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: ----------------------------> 1 - mountPath: "/usr/share/tomcat/html" name: mypd volumes: -----------------------> 2 - name: mypd persistentVolumeClaim: ------------------------->3 claimName: myclaim-1
在在上面的代码中,我们定义了 :
volumeMounts: → 这是安装将要进行安装的容器中的路径.
卷: → 该定义定义了我们要声明的卷定义.
persistentVolumeClaim: → 在此下,我们定义将在定义的pod中使用的卷名.