开发手册 欢迎您!
软件开发者资料库

Kubernetes - Volumes

Kubernetes Volumes - 从简单和简单的步骤学习Kubernetes,从基本到高级概念,包括概述,体系结构,设置,图像,作业,标签和选择器,命名空间,节点,服务,Pod,复制控制器,副本集,部署,卷,秘密,网络政策,API,Kubectl,Kubectl命令,创建应用程序,应用程序部署,自动扩展,仪表板设置,监控。

在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中使用的卷名.