Kubernetes Volume 也支持多种 backend 类型,包括 emptyDir、hostPath、GCE Persistent Disk、AWS Elastic Block Store、NFS 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 1. 当前 Volume 来自 AWS EBS。 2. 要么询问管理员。 2. 要么自己就是管理员。 这样就带来一个管理上的问题:应用开发人员和系统管理员的职责耦合在一起了。如果系统规模较小或者对于开发环境这样的情况还可以接受。 PVC 通常由普通用户创建和维护。需要为 Pod 分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式(比如只读)等信息,Kubernetes 会查找并提供满足条件的 PV。 有了 PersistentVolumeClaim,用户只需要告诉 Kubernetes 需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息。
其含义是它们的生命周期可能很短,会被频繁地销毁和创建。容器销毁时,保存在容器内部文件系统中的数据都会被清除。 为了持久化保存容器的数据,可以使用 Kubernetes Volume。 Kubernetes Volume 也支持多种 backend 类型,包括 emptyDir、hostPath、GCE Persistent Disk、AWS Elastic Block Store、NFS 外部 Storage Provider 如果 Kubernetes 部署在诸如 AWS、GCE、Azure 等公有云上,可以直接使用云硬盘作为 Volume,下面是 AWS Elastic Block 开发人员要获得上面的信息: 要么询问管理员。 要么自己就是管理员。 这样就带来一个管理上的问题:应用开发人员和系统管理员的职责耦合在一起了。如果系统规模较小或者对于开发环境这样的情况还可以接受。 有了 PersistentVolumeClaim,用户只需要告诉 Kubernetes 需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息。
Vite学习指南,基于腾讯云Webify部署项目。
该过程使Kubernetes开发人员可以获得反馈,发现,并修复问题,迭代设计,并交付高质量的生产级特性。 为什么将in-tree插件迁移到CSI? 但是,我们不想通过破坏现有的通用存储API来强迫用户进行工作负载/配置的更改。前方的道路很明确-我们必须用CSI替换后端in-tree插件API。 什么是CSI迁移? 通过CSI迁移,可以使用相应的CSI驱动程序替换现有的in-tree存储插件,例如kubernetes.io/gce-pd或kubernetes.io/aws-ebs。 要在Beta中针对现有插件试用CSI迁移,必须使用Kubernetes v1.17或更高版本。 作为用户,我该做什么? 请注意,Kubernetes存储系统的所有新功能(如卷快照)将仅添加到CSI接口。
Kubernetes v1.11 中,持久卷扩容能力升级为 Beta 阶段。这个功能让用户可以轻松的通过编辑 PVC 对象的方式修改现有卷的容量。 在 Kubernetes v1.11 中,这两个项目都会被缺省激活。 虽然功能已经被激活,但是集群管理员还是需要进行操作,让用户能够对自己的卷进行扩容。 、AWS-EBS、Azure Disk、Cinder 以及 Ceph RBD 这些块存储卷通常需要首先进行文件系统的扩展,然后被扩展的卷的额外空间才能为 Pod 所用。 目前支持的有 GCE-PD、AWS-EBS、Cinder 以及 Ceph RBD。当激活这个功能后,引用被扩展的卷的 Pod 无需重启。文件系统会随着卷扩展的步骤进行扩展。 文件系统的扩展只有在 Pod 引用被扩展的卷的时候才会发生,所以如果没有 Pod 引用这个卷,那么就不会进行文件系统扩展。
创建 EBS 卷 在 pod 中使用的 EBS 卷之前,您需要先创建它。 gcePersistentDisk gcePersistentDisk 卷将 Google Compute Engine(GCE)Persistent Disk 挂载到您的容器中。 创建 PD 在您在 pod 中使用 GCE PD 之前,需要先创建它。 的 hostPath 允许 pod 指定给定的 hostPath 是否应该在 pod 运行之前存在,是否应该创建,以及它应该以什么形式存在 除了所需的 path 属性之外,用户还可以为 hostPath Directory 给定的路径下必须存在目录 FileOrCreate 如果在给定的路径上没有任何东西存在,那么会根据需要创建一个空文件,权限设置为 0644,与 Kubelet 具有相同的组和所有权。
Kubernetes 使用Persistent Volume和Persistent Volume Claim 两种API资源来管理存储。 就像节点(Node)是集群中的资源一样,PV也是集群中的资源。它包含存储类型,存储大小和访问模式。它的生命周期独立于Pod,例如当使用它的Pod销毁时对PV没有影响。 在删除pvc后PV变为Released不可用状态, 若想重新被使用,需要管理员删除pv,重新创建pv,删除pv并不会删除存储的资源,只是删除pv对象而已;若想保留数据,请使用该Retain。 关联的存储资产(如AWS EBS,GCE PD,Azure磁盘或OpenStack Cinder卷)将被删除。NFS不支持delete策略。 目前,只有NFS和HostPath支持回收。 AWS EBS,GCE PD,Azure磁盘和Cinder卷支持删除。
2.1 供应(Provisioning) 供应是为集群提供可用的存储卷,在Kubernetes中有两种持久化存储卷的提供方式:静态或者动态。 一旦绑定了,PVC绑定就是专属的,无论它们的绑定模式是什么。 如果没有匹配的PV,那么PVC会无限期的处于未绑定状态,一旦存在匹配的PV,PVC绑定此PV。 2.3 使用 Pod把PVC作为卷来使用,Kubernetes集群会通过PVC查找绑定的PV,并将其挂接至Pod。对于支持多种访问方式的卷,用户在使用 PVC 作为卷时,可以指定需要的访问方式。 在PVC能够支持的情况下,删除策略会同时删除卷以及AWS EBS/GCE PD或者Cinder卷中的存储内容。 2.5.3 删除 对于支持删除回收策略的存储卷插件,删除即会从Kubernetes中移除PV,也会从相关的外部设施中删除存储资产,例如AWS EBS, GCE PD, Azure Disk或者Cinder
如果经过优选将Nodes打分排名后,有多个Nodes并列得分最高,那么scheduler将随机从中选择一个Node作为目标Node。 Kubernetes提供了以下Predicates Policies的定义,你可以在kube-scheduler启动参数中添加--policy-config-file来指定要运用的Policies集合, 在这个过程中,会并发的根据每个Priorities Policy分别启动一个goroutine,在每个goroutine中会根据对应的policy实现,遍历所有的预选Nodes,分别进行打分,每个Node 如果经过优选将Nodes打分排名后,有多个Nodes并列得分最高,那么scheduler将随机从中选择一个Node作为目标Node。 Kubernetes提供了以下Priorities Policies的定义,你可以在kube-scheduler启动参数中添加--policy-config-file来指定要运用的Policies集合,
为什么内部不存在隐藏的 API Kubernetes 各个组件之间相互交互使用的 API 和客户端与 Kubernetes 交互 使用的 API 相同,使得 Kubernetes 的可扩展性更强。 为什么需要随时随地满足用户需求 这种设计可以最大限度地减少在 Kubernetes 上部署工作负载的障碍,可以轻松地在 Kubernetes 上运行现有的工作负载,而无需对其进行重写或者更改。 4. 但该方法还是有点小问题的,YAML 文件中直接引用了 Google Cloud Persistent Disk,如果此 Pod 没有部署在 Google Cloud Kubernetes 集群上,则无法启动 理想情况下,上面定义的 Pod 应该运行在没有 GCE PD 的集群上。 为什么需要工作负载的可移植性 工作负载可移植性原则突出了 Kubernetes 的核心优势:就像操作系统使应用程序开发人员不必担心底层硬件的细节一样,Kubernetes 将分布式系统应用程序开发人员从底层集群的细节中解放出来
快速回顾:CSI 迁移功能是什么?为什么要迁移? 容器存储接口旨在帮助 Kubernetes 取代其现有的树内存储驱动机制──特别是供应商的特定插件。 如果 CSI 迁移功能正确发挥作用,Kubernetes 终端用户应该不会注意到有什么变化。 例如,你可能希望在一个 GCE 集群上禁用 EBS 存储插件,因为 EBS 卷是其他供应商的云(AWS)所专有的。 如果你采用托管 Kubernetes 服务,请询问你的供应商是否有什么工作需要完成。在许多情况下,供应商将管理迁移,你不需要做额外的工作。 但是,如果您想利用快照等新功能,则需要进行手动迁移,将现有的树内持久卷重新导入为 CSI 持久卷。 我如何参与其中?
上一篇简单介绍了一下k8s是什么以及如何使用kubeadm快捷安装,今儿来聊一下k8s的几个基础概念及术语。k8s中的资源都可以使用yaml文件进行描述。 在K8s中,一个计算资源进行配额限定需要设定以下两个参数: Requests:最小申请量,必须满足此要求。 Limits:最大允许使用量,不能被突破,当容器试图突破时,会被kill掉然后重启。 Disk,PD)存放Volume的数据,PD上的内容会永久保存,当Pod被删除时,PD只是被卸载(Unmount),不会被删除,需要先创建一个永久磁盘(PD),才能使用gcePersistentDisk 限制条件: Node需要GCE虚拟机 这些虚拟机需要与PD存在与相同的GCE项目和zone中。 使用亚马逊公有云提供的EBS Volume存储数据,需要先创建一个EBS Volume才能使用 限制条件: Node节点需要AWS EC2实例 AWS EC2实例需要与EBS Volume
Kubernetes通过存储卷解决上述的两个问题。 在Docker有存储卷的概念卷,但Docker中存储卷只是磁盘的或另一个容器中的目录,并没有对其生命周期进行管理。 Kubernetes的存储卷有自己的生命周期,它的生命周期与使用的它Pod生命周期一致。因此,相比于在Pod中运行的容器来说,存储卷的存在时间会比的其中的任何容器都长,并且在容器重新启动时会保留数据。 另外在使用hostPath时,需要注意下面的事项: 具有相同配置的Pod(例如:从同一个podTemplate创建的),可能会由于Node的文件不同,而行为不同。 在宿主机上创建的文件或目录,只有root用户具写入的权限。您要么在容器中以root身份运行进程,要么在主机上修改的文件或目录的权限,以便具备写入内容到hostPath的存储卷中。 上的永久磁盘到容器,需要 Kubernetes 运行在 GCE 的 VM 中。
因此必须要将数据存储在某种类型的网络存储(NAS)中。 各种支持的方式不尽相同,例如 GlusterFS 需要创建 Endpoint,Ceph/NFS 之流就没这么麻烦了。 另一种是将ConfigMap做为存储卷挂载至Pod容器内,这样在修改ConfigMap配置信息后,Pod容器中的配置也会随之更新,不过这个过程会有稍微的延迟。 pod中使用持久化存储时,他们首先创建持久化声明(PVC)清单,指定所需要的最低容量要求,和访问模式,然后用户将持久卷声明清单提交给kubernetes API服务器,kubernetes将找到可以匹配的持久卷并将其绑定到持久卷声明 /nfsdata文件中的文件被删除了 因为 PV 的回收策略设置为 Recycle,所以数据会被清除,但这可能不是我们想要的结果。如果我们希望保留数据,可以将策略设置为 Retain。 NFS 的 PV 不支持 Delete,支持 Delete 的 Provider 有 AWS EBS、GCE PD、Azure Disk、OpenStack Cinder Volume 等。
这很重要,因为它表明 Rook 已成功扩展 Kubernetes,使 Cassandra 集群成为 Kubernetes 云原生环境中的一等公民。 Operator 之前,您可能需要考虑一些设置: 如果您使用 kubernetes v1.15 或更早版本,则需要在此处创建 CRD,在 /cluster/examples/kubernetes/ceph Storage 有关 Rook 公开的三种存储类型的演练,请参阅以下指南: Block:创建要由 Pod 使用的块(block)存储 Object:创建可在 Kubernetes 集群内部或外部访问的对象存储 要为 nfs-server pod 创建安全上下文约束,我们可以使用以下 yaml,它也可以在 /cluster/examples/kubernetes/nfs 下的 scc.yaml 中找到。 因此,如果您需要为卷指定磁盘配额,则可以按照此示例进行操作。 在这个例子中,我们将使用一个带有 prjquota 选项的作为 xfs 挂载的底层卷。
Delete(删除) Delete(删除)政策允许从Kubernetes自动删除绑定的VolumeSnapshotContent对象,以及外部基础结构中的关联存储资产(例如AWS EBS快照,或GCE 保护使用中的快照对象 “保护使用中的快照对象”(Snapshot Object in Use Protection)功能的目的,是确保不会从系统中删除正在使用的快照API对象(因为这可能会导致数据丢失) 有两种情况需要“使用中”(“in-use”)保护: 如果卷快照正在被PVC作为创建卷的源。 快照仅在CSI驱动程序支持(不适用于树内“in-tree”或Flexvolume)。要使用Kubernetes快照功能,请确保在群集上部署实现快照的CSI驱动程序。 有兴趣参与CSI或Kubernetes存储系统任何部分的设计和开发的人士,请加入Kubernetes存储特别兴趣小组(SIG)。我们正在快速成长,一直欢迎新的贡献者。
卷快照是卷在某个时间点的副本,快照可用于填充新的Volume(预填充快照数据)或将现有卷恢复到先前状态(由快照表示)。 为什么要将卷快照添加到Kubernetes? 此外,Kubernetes快照作为基本组件,可便于为Kubernetes提供开发高级企业级存储管理功能的能力,包括应用程序或集群级备份解决方案。 自测试版以来有什么新变化? 在此版本(使用Kubernetes 1.20)中,同时提供了v1和v1beta1,而存储的API版本仍为v1beta1。将来的发行版会将存储的版本切换到v1,并逐渐删除对v1beta1的支持。 当前,有50多个CSI驱动程序支持卷快照功能。在GCE Persistent Disk CSI Driver已通过了升级的测试时间里从卷快照公测GA。对其他CSI驱动程序的GA级别支持应尽快提供。 假设所有必需的组件(包括CSI驱动程序)已经在集群上部署并运行,则可以使用VolumeSnapshotAPI对象创建卷快照,或者VolumeSnapshot通过在其上指定VolumeSnapshot数据源使用现有的卷恢复
至于该目录是怎么来的,后端介质是什么,内容是什么,则是由所使用的具体卷类型(volume type)决定的。Kubernetes Volume 支持多种存储类型: ? 但是实际上,存储信息对于应用开发人员来说,其实是不需要可见的。他们只关心有没有满足要求的存储可用,而不需要关心后端是什么存储。 由 OpenShfit 管理员创建,后端是各种类型的存储,比如 AWS EBS,GCE Disk,NFS 等。管理员可以创建多个PV,形成一个存储池,供开发人员使用。 由开发人员创建,一个实例表示对某种存储资源的一个申请。每当开发人员创建一个新的PVC后,Kubernetes 会在已有的PV 池中进行搜索,找到一个最佳匹配的PV 来使用。 在此之前,集群管理员需要事先在集群外由存储提供者或者云提供商创建存储卷,成功之后再创建PersistentVolume对象,才能够在kubernetes中使用。
这里的所谓Pod的重启,实际上的做法是容器的重建,之前容器中的数据将会丢失,如果需要持久化数据,那么需要使用数据卷进行持久化设置。 分配一个唯一的ClusterIP,所以当使用ClusterIP:port的组合访问一个service的时候,不管port是什么,这个组合是一定不会发生重复的。 这就是为什么用户可以在创建service时随意指定访问端口。 回收策略可以是人工的也可以是Kubernetes自动进行清理(仅支持NFS和HostPath) 7.4信息数据卷 Kubernetes中有一些数据卷,主要用来给容器传递配置信息,我们称之为信息数据卷 传统的虚拟机正是一种有状态的宠物,运维人员需要不断地维护它,容器刚开始流行时,我们用容器来模拟虚拟机使用,所有状态都保存在容器里,而这已被证明是非常不安全、不可靠的。
kubernetes volume支持的类型:emptyDir hostPath GCE Persistent Disk AWS Elastic Block Store NFS 作用是在Pod中共享数据 创建Pod,volumeMounts ? image.png emptyDir是Host上创建的临时目录,其优点是能够方便地为Pod中的容器提供共享存储,不需要额外的配置。 它不具备持久性,如果Pod不存在了,emptyDir也就没有了。根据这个特性,emptyDir特别适合Pod中的容器需要临时共享存储空间的场景,比如前面的生产者消费者用例。 一般用来共享配置文件 cephfs 使用ceph ? image.png PV PVC 部署mysql的pv:nfs ? image.png ?
云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。
扫码关注云+社区
领取腾讯云代金券