📅  最后修改于: 2020-11-01 04:14:14             🧑  作者: Mango
在Kubernetes中,可以将卷视为目录,容器中的容器可以访问该目录。 Kubernetes中有不同类型的卷,并且该类型定义了卷的创建方式及其内容。
卷的概念存在于Docker中,但是唯一的问题是卷非常受限于特定的Pod。吊舱的使用寿命一结束,音量也随之丢失。
另一方面,通过Kubernetes创建的卷不限于任何容器。它支持Kubernetes容器内部署的任何或所有容器。 Kubernetes卷的主要优势在于,它支持不同类型的存储,其中Pod可以同时使用多个存储。
这是一些流行的Kubernetes卷的列表-
emptyDir-这是在Pod首次分配给节点时创建的一种卷。只要Pod在该节点上运行,它就保持活动状态。该卷最初是空的,并且容器中的容器可以读取和写入emptyDir卷中的文件。从节点中移除Pod后,将清空emptyDir中的数据。
hostPath-这种类型的卷将文件或目录从主机节点的文件系统挂载到您的Pod中。
gcePersistentDisk-这种类型的卷将Google Compute Engine(GCE)永久磁盘安装到Pod中。从节点中删除Pod后, gcePersistentDisk中的数据将保持不变。
awsElasticBlockStore-这种类型的卷将Amazon Web Services(AWS)弹性块存储装载到Pod中。就像gcePersistentDisk,当波德从节点取出在awsElasticBlockStore数据保持不变。
nfs – nfs卷允许将现有的NFS(网络文件系统)安装到您的Pod中。从节点中删除Pod时,不会擦除nfs卷中的数据。该卷仅被卸载。
iscsi – iscsi卷允许将现有的iSCSI(IP上的SCSI)卷安装到Pod中。
flocker-这是一个开源集群容器数据卷管理器。它用于管理数据量。甲flocker体积允许Flocker数据集将被安装到吊舱。如果数据集在Flocker中不存在,那么您首先需要使用Flocker API创建它。
glusterfs – Glusterfs是一个开放源代码的网络文件系统。使用glusterfs卷可以将glusterfs卷安装到您的广告连播中。
rbd -RBD代表Rados Block Device。 rbd卷允许将Rados块设备卷安装到您的Pod中。从节点中删除Pod后,数据仍保留。
cephfs – cephfs卷允许将现有的CephFS卷挂载到您的Pod中。从节点中删除Pod后,数据将保持不变。
gitRepo – gitRepo卷挂载一个空目录,并将git存储库克隆到其中,以供您的pod使用。
秘密–秘密卷用于将敏感信息(例如密码)传递到Pod。
persistentVolumeClaim-持久卷体积用于将PersistentVolume安装到Pod中。 PersistentVolume是用户“声明”持久存储(例如GCE PersistentDisk或iSCSI卷)的一种方式,而无需了解特定云环境的详细信息。
DownwardAPI – DownwardAPI卷用于使向下API数据可供应用程序使用。它安装目录,并将请求的数据写入纯文本文件。
azureDiskVolume – AzureDiskVolume用于将Microsoft Azure数据磁盘安装到Pod中。
永久卷(PV) -这是由管理员提供的一部分网络存储。它是群集中的一种资源,它与使用PV的任何单个吊舱无关。
持久体积声明(PVC) -Kubernetes为其容器请求的存储称为PVC。用户不需要知道基础供应。必须在创建容器的相同名称空间中创建声明。
kind: PersistentVolume ---------> 1
apiVersion: v1
metadata:
name: pv0001 ------------------> 2
labels:
type: local
spec:
capacity: -----------------------> 3
storage: 10Gi ----------------------> 4
accessModes:
- ReadWriteOnce -------------------> 5
hostPath:
path: "/tmp/data01" --------------------------> 6
在上面的代码中,我们定义了-
种类:PersistentVolume →我们将种类定义为PersistentVolume,它告诉kubernetes所使用的yaml文件是用来创建持久卷的。
名称:pv0001 →我们正在创建的PersistentVolume的名称。
容量: →此规格将定义我们尝试创建的PV的容量。
storage:10Gi →这告诉底层基础结构我们正在尝试在定义的路径上声明10Gi空间。
ReadWriteOnce →这将告诉我们正在创建的卷的访问权限。
路径:“ / tmp / data01” →此定义告诉计算机我们正在尝试在基础结构的该路径下创建卷。
$ kubectl create –f local-01.yaml
persistentvolume "pv0001" created
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv0001 10Gi RWO Available 14s
$ kubectl describe pv pv0001
kind: PersistentVolumeClaim --------------> 1
apiVersion: v1
metadata:
name: myclaim-1 --------------------> 2
spec:
accessModes:
- ReadWriteOnce ------------------------> 3
resources:
requests:
storage: 3Gi ---------------------> 4
在上面的代码中,我们定义了-
种类:PersistentVolumeClaim →它指示基础结构我们正在尝试声明指定的空间量。
名称:myclaim-1 →我们尝试创建的声明的名称。
ReadWriteOnce →这将指定我们尝试创建的声明的模式。
存储:3Gi →这将告诉kubernetes我们正在尝试声明的空间量。
$ kubectl create –f myclaim-1
persistentvolumeclaim "myclaim-1" created
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
myclaim-1 Bound pv0001 10Gi RWO 7s
$ kubectl describe pv pv0001
kind: Pod
apiVersion: v1
metadata:
name: mypod
labels:
name: frontendhttp
spec:
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: →在此之下,我们定义将在定义的容器中使用的卷名。