📜  Kubernetes-卷

📅  最后修改于: 2020-11-01 04:14:14             🧑  作者: Mango


在Kubernetes中,可以将卷视为目录,容器中的容器可以访问该目录。 Kubernetes中有不同类型的卷,并且该类型定义了卷的创建方式及其内容。

卷的概念存在于Docker中,但是唯一的问题是卷非常受限于特定的Pod。吊舱的使用寿命一结束,音量也随之丢失。

另一方面,通过Kubernetes创建的卷不限于任何容器。它支持Kubernetes容器内部署的任何或所有容器。 Kubernetes卷的主要优势在于,它支持不同类型的存储,其中Pod可以同时使用多个存储。

Kubernetes卷的类型

这是一些流行的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数据保持不变。

  • nfsnfs卷允许将现有的NFS(网络文件系统)安装到您的Pod中。从节点中删除Pod时,不会擦除nfs卷中的数据。该卷仅被卸载。

  • iscsiiscsi卷允许将现有的iSCSI(IP上的SCSI)卷安装到Pod中。

  • flocker-这是一个开源集群容器数据卷管理器。它用于管理数据量。甲flocker体积允许Flocker数据集将被安装到吊舱。如果数据集在Flocker中不存在,那么您首先需要使用Flocker API创建它。

  • glusterfs – Glusterfs是一个开放源代码的网络文件系统。使用glusterfs卷可以将glusterfs卷安装到您的广告连播中。

  • rbd -RBD代表Rados Block Device。 rbd卷允许将Rados块设备卷安装到您的Pod中。从节点中删除Pod后,数据仍保留。

  • cephfscephfs卷允许将现有的CephFS卷挂载到您的Pod中。从节点中删除Pod后,数据将保持不变。

  • gitRepogitRepo卷挂载一个空目录,并将git存储库克隆到其中,以供您的pod使用。

  • 秘密秘密卷用于将敏感信息(例如密码)传递到Pod。

  • persistentVolumeClaim-持久卷体积用于将PersistentVolume安装到Pod中。 PersistentVolume是用户“声明”持久存储(例如GCE PersistentDisk或iSCSI卷)的一种方式,而无需了解特定云环境的详细信息。

  • DownwardAPIDownwardAPI卷用于使向下API数据可供应用程序使用。它安装目录,并将请求的数据写入纯文本文件。

  • azureDiskVolumeAzureDiskVolume用于将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” →此定义告诉计算机我们正在尝试在基础结构的该路径下创建卷。

创建PV

$ kubectl create –f local-01.yaml
persistentvolume "pv0001" created

检查PV

$ kubectl get pv
NAME        CAPACITY      ACCESSMODES       STATUS       CLAIM      REASON     AGE
pv0001        10Gi            RWO         Available                            14s

描述PV

$ 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我们正在尝试声明的空间量。

创建PVC

$ kubectl create –f myclaim-1
persistentvolumeclaim "myclaim-1" created

获取有关PVC的详细信息

$ kubectl get pvc
NAME        STATUS   VOLUME   CAPACITY   ACCESSMODES   AGE
myclaim-1   Bound    pv0001     10Gi         RWO       7s

描述PVC

$ kubectl describe pv pv0001

在POD中使用PV和PVC

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: →在此之下,我们定义将在定义的容器中使用的卷名。