00:02
各位同学大家好,今天呢,我们一起来学习一下cubert的volume。本次课我们分为五步走,第一,为什么需要volume volume解决了什么问题?第二,Volume的一个类型叫做MTDRI,它是一个临时共享目录,我们要了解这个MTD的一个特性以及它的使用方法。第三,Host pass也是volume的一个类型,我们要学习这个host pass的工作原理,风险点和它的使用方法。第4,对比和选型,我们要对比MTDLL和的一个特性,以便于我们呢在后面的工作当中去更好的使用。第5,总结和最佳实践。在PPT部分后面呢,我会带着大家在环境当中实际的创建和使用一下这两种。
01:07
Volume类型。首先我们来看为什么需要volume容器的文件系统本质是临时的,当容器因崩溃重启或者是cos重新调度而销毁的时候,里面创建的里面创建的这些文件和数据都会随之丢失,这对于数据库、文件、服务器等需要持久化保存状态的应用来说是不可以接受的。Pod内多个容器,而且是完全隔离的,没有办法直接访问彼此的文件系统,但是呢,是在那个叫CD卡模式里面,比方说日志收集、数据处理等常见的设计当中,我们需要容器间能够高效的安全的共享数据。我们这原生的这个库ber ne集群,如果说你不挂载这个volume的话,它是没有办法去做到这么一个协同需求的。
02:08
来,我们再往下看,核心结论正式解决了器件系统的临时性和隔离性而生,它为集群提供了持久化存储和容器共享的标准解决方案。来,我们再往下看,为什么需要volume cooper volume打破了边界的。解决方案。Volume本质上是一个可以被破的中一个或多个容器访问的目录,其内容、存储介质和生命周期完全由volume类型来决定,为容器提供稳定的文件访问层。核心价值一是数据的持久化。Volume的生命周期和破的强绑定,而非依附于单个容器。即便某个容器崩溃重启,数据呢依然留存。当某一个pod销毁的时候,特定类型的volume卷才会被清理。
03:12
核心价值二,容器间数据共享同一个pod内,所有的容器可挂载同一个volume,实现高效的文件及数据交换和共享是实现容器间协同比方说日志收集、数据处理的关键基础能力。今天呢,我们重点学习两种类型,一个是MTTR,另外一个是。首先我们来看一下MTDMTD是pod级别的临时共享目录,我们来看一下它的定义,Pod启动的时候,它会自动创建这么一个目录,删除pod的时候,目录会被清理,它是pod内部所有容器可以访问的一个共享空间,你可以把它理做理解,理解成一个嗯。
04:03
大池子,你这个破的里边无论你有几个容器,你都可以访问的这个大池子的数据。然后我们再看存储特性,默认使用本地节点的磁盘来存储,若配置这个其他的一些个文件,访问文件系统也可以,嗯,挂载过来,然后给我们一个使用,然后再看第三典型的应用场景,适用于容器间数据传递,就像我们刚才提到的这个日志和这个等等等等吧,主要是日志收集这块可能会比较多一些,好吧,然后我们继续往后看。呃,定义和生命周期MTR是cooper中最基础最简单的类型,也是正如其名,它是一个在破的被调度成功分配到节点的时候,会自动创建一个空目录,无需提前准备那个存储资源。第二生命周期它和爆破的是绑定的关系,破的被调度到节点时自动创建目录,只要破的存在,目录就持续的存在,容器重启不会丢失数据。这里需要强调一下,容器的重启不会影响到我们这个数据的丢失。
05:24
当pod被删除、驱逐或者是因为其他原因离开节点的时候,MGTR以及包含的所有数据才会被删除掉,而且没有办法恢复。当然了,有没有办法说让他做到一个持久化的存储呢?是吧?比方说我写到这个地方了,能不能让他一直写到这个地方,而且我还作为可以作为一个拷贝和转储呢?也可以,这个东西我们放到后面来讲。第三,嗯,三大关键特性,破的级别的生命周期。
06:00
数据的存活时间和pod完全一致,是临时存储的理想选择。第二,破那个容器间共享。同一个破内的所有容器都可以读写这个目录,方便容器间的这个数据传递。第三,节点本地存储数据实际存储在pod所在节点的磁盘或者是内存中,读写速度非常的快。总结一下,MTDIR适用于破的内部容器间的临时数据共享缓存空间或无需持久化的。临时工作目录,呃,使用方法和事例,这里我们先简单的过一下,在后面的实验环节呢,我会来详细的介绍。典型使用场景刚才也提到了,这里就不再赘述了。好,下面我们开始学习一下的另外一个类型pass pass是直连速组机的这么一个持久化方式,来我们深入的看一下。
07:08
Host pass的核心定义是能够将pod所在数组机文件系统上的文件或者是目录直接挂载到破的内部的容器当中,来实现容器和速度机的文件共享。生命周期呢和节点是强绑定的,独立你跟也就是说这个数据是独立存在于这个嗯,节点上的,你这个破D被删除以后,数据就会直接保留到你这个。就是产生的数据嘛,相当于会写到你的这个node节点上,但是破的比方说你调度到其他的节点了,那你这个会访问你另外节点的相同的名称路径数据呢,没有办法跨节点进行一个迁移,是吧,也就是说它和MDDR是各有利弊的。
08:01
来,我们接着往后看它的使用方法,在后面的实验环节,我带着大家详细介绍吧。典型使用场景第一是系统级工具部署demon set核心应用场景是吧?它可以配合demon set的这个控制器来做一个使用,因为demon set的特性就是给每一个节点都调度一个pod,是吧?你看你每一个节点都有pod了,然后你每个节点你都存那么一份数据,相当于你可以给这个呃,所有的pod去提供一个数据访问嘛。嗯,然后呢,我们再看第二个容器运行时的交互,大概这个东西的话,嗯。今天这个实验环节不是特别好演示,我就给大家简单讲一下吧。访问套接字文件部分管理工具需要挂载docker或者是contain d的套接字来执行容器的操作,然后再看第三单节点开发调试,快速实现数据的持久化,简化本地开发流程。在Mini cooper等单节点的环节当中,将数据库比方说MY。
09:11
或者或服务的数据目,那个目录直接挂载到数组机路径,可以绕过网络存储配置,实现数据的及时持久化,极大便利的开发和测试验证。嗯,对比和选型我们来看一下,首先是MTR,生命周期和持久性,它和pod是同生共死,随着pod的创建而创建,删除而销毁,是临时的这么一个存储方式,Pod消失,数据及丢失,没有办法持久化的保存信息。再看第二,共享范围和位置,它仅仅限于破的内部,仅能在同一个pod内的多个容器间共享数据,那它跨破的就不可以了,它呢,存储于这个库lightt管理的节点,临时目录可配置为内存,以提升读写速度。再看第三,安全和用途,轻量安全的那个临时空间紧迫着内部可访问,安全性比较高,适用于这个容器间临时的文件交换、计算、缓存、编译等。无需持久化的临。
10:27
推10、工作目的、场景。我们再来看一下host pass host pass的生命周期和持久性,它是独立于破的存在的,数据存储在节点的,也就是我们node节点的这个指定路径上,Pod删除后呢,数据仍然保留在节点上,相当于我们比方说我们破的是一个网页服务吧,别人访问我产生的数据,我就可以直接的持久化到node节点上,属于节点级的持久化存储方案,而非集群持久化。
11:04
再看共享范围和位置,它是跨破的节点共享,可在同一个节点上的多个的间共享数据,直接映射节点本地的任意路径,但性能,但性能高,但与节点强耦合,因为它是直接写到节点的嘛,你一旦比方说你重新调度了,你跑到别的节点上了,那你这边数据就读不了了,好吧,他这块就表达这么一个意思。然后我们再看安全和用途强大,但需警惕风险,存在人容器逃逸和泄露节点敏感信息的高风险,仅适用于系统级的日志收集,节点资源监控,单节点调试或访问特定的硬件设备才需要用到这么一个东西,对吧?因为你挂载到你noe节点上了,那你noe节点上是不是比方说你要执行一个什么东西,或者你容器上执行一个什么东西,在你这个目录下挂载目录下你执行一个什么命令,会不会有可能影响到我们系统本身的,对吧?它是存在这么一个容器逃逸的风险的,所以这块大家掌握一下来,我们再往下看,嗯,对比和选型我们应该如何选择呢?嗯,先看第一个问题,数据需要在破的重启后保留吗?如果不需要保留是吧?你直接使用容器内部存储块即可,无需额外的配置。如果。
12:32
需要保留,则进入下一步决策流程。也就是说我们需要保留是吧?确实是需要持久化,那你可以选择一个这种,嗯,Host bus, 直接写到我们的note节点上来,然后再看第二个问题,需要在破的内多个容器间共享吗?临时共享选择MTR,如果数据需要持久化,则需要进一步考虑或pass,或者是网络存储方案,当然这里的网络存储方案我们会放到后边来给大家再深入的讲解,这个东西还是比较复杂的。来再看第三需访问宿主机特定文件的目录吧,如果是你需要,那你就使用host pass, 但是需要经过严格的评估和安全风险点的这个考虑。然后再看第四,需要跨节点调度后,数据仍然可用吗?
13:31
和MD都没有办法满足节点的这么一个需求,如果说你必须使用集群级别的这个持久化存储方案,后边呢,我们还要学习这个PV和PVCPV和PVC就是存储的券和存储券申请,好吧,这个我们放到后边来讲,不用担心。最后,我们来总结和最佳实践。嗯,MTPR破级的临时存储已经说过很多次了,然后host节点级的存储逃生舱,关键人认知二者数据均于特定节点绑定,无法实现跨节点数的跨节点的这个数据持久化。
14:14
并非真正的持久化存储方案。最小权限原则。嗯,始终默认使用only挂载,仅在业务必须写入时才开放写权限,降低攻击面。第二,严格路径设置,严禁挂载跟然后ETC等路径的这个等敏感路径,仅挂载业务必须的特定子目录,减少敏感信息泄露的风险。安全上下文运行那个,结合那个security security, 还有那个。配置强制容器以飞入的身份运行,避免容器内高权限进程威胁宿主机安全,也就是这块,它会涉及到一个容器逃逸的风险。第四,生产及环境的替代方案,对于需要节点本地持久化的场景,官方推荐使用PV代替原生的pass。最佳实践的核心可控最小权限,非root用户优先使用标准化的PV管理存储。好吧,这个东西PV我们会放到后面来详细的讲解的。然后PPT部分呢就到此结束了,下面开始我们的实验环节。
15:42
下面呢,就开始我们的实验环节,这里我提前准备了两母文件,我们一起来看一下,我要起一个pod,对吧,我给我的po的名字叫做empty Di-test,然后命名空间就是默认,然后我这个容器呢,我定义了两个,第一个名字叫做苏小娟1,然后使用的镜像是inx,拉取策略是if not present的意思是本地有就用本地的,本地没有就从远端仓库拉取,然后暴露了这个容器的80端口,然后给这个容器要挂载一个券,券的名字要做MTD-ABC,挂载到我容器里的根下的123。
16:29
然后再看第二个容器,名字叫做苏小轩2用的镜像是b z box, 然后拉取策略也是一样的,Bc box, 启动命令是SLEEP3600秒,如果我不这么设置的话,Bc box是是起不来的,相当于起来就立马终结了,然后呢也设置一个volume,然后名字叫做MTDRR-ABC和那上面那个是一样的,然后呢,挂载到这个容器的。跟下的456,然后下面我就声明了,这个VOLUME6嘛,名字叫做MTDR-ABC,然后类型呢,就是这个MTDRR,然后作为一个初始化目录嘛,来我们执行看一下库CTL。
17:14
Play-F,然后是MP点烟,好,我们来看一下这个状态好的好,你看起来了吧。里边有两个容器都是装进状态下面呢,我们要怎么测试呢?哎,那等我先清一下屏下面,我们要先给里边输入一些东西啊。诶诶,我粘贴一下,相当于我把哎苏小轩测试这个写到了哪儿呢?写到了苏小轩1这个容器的,呃,这个跟下的一二三里边是吧,然后呢,我们再来看一下,我们用另外一条命令输出一下苏小轩2这个容器的。
18:01
456跟下的456,下面的这个一二三。是不是没有问题,因为他俩挂载的是一块盘,只不过是每个容器的路径不一样,所以它可以做到这么一个数据的共享。好吧,来,我们再来改看一个别的东西吧,我们还可以看到这个容器里边儿。等等啊,我来给大家弄一下。我们还可以登录到这个对应的登的这个叫呃节点上,然后去看一下它的临时的这么一个文件,好吧,看之前呢,我们先得知道它在哪个破那个哪个note上面ay哦O。好好,他在WORKER1来,我们去到WORKER1,这是WORKER1哈。好,它在哪个目录下呢?哎,我这里有一条命令CD。
19:02
Hey.这样它在word下的lab下的cooper light, 然后ports,然后这个地方呢,需要写port的ID port的ID是什么?我告诉大家怎么查,我们来到master节点,CU c PL get.破D,然后叫MB港test,我们输出一下它的压部文件,牙部文件里面就有它的破展ad。来,我们找一下。好找到了这边啊UID好复制一下。这里粘贴相当于是这个目录下的portds里面有一个port ID的这个文件,然后呢,里面有一个photos的目录,然后里边还有个coopert.imtdr,然后有这么一个我创建的。呃,MTD的券好往回撤。好进来了,进来以后我要我要试一下里面是不是有一个一二三对不对,我看一下。
20:05
呃,Get一下是不是没有问题对吧?这个就是MTDRR的一个测试,它保证了在一个破内的多个容器可以去共享一份数据,好吧,这块还是比较好理解的,来,我们接着往后看。哦,我这退出了。来,我们看一下第二份yama文件,嗯,那个叫做host price, 来,我们来读一下这些yama文件,前面这里就不再赘述了,我们就看一下这个呗,啊。起一个port portd的名字叫做苏晓轩杠host,然后要起一个容器,这个容器的名字叫做host-test,呃,镜像是INS拉取策略还是iff not present, 然后我要挂载一个卷,我要挂在哪个卷呢?我要挂载host-ABC,这个卷挂载到哪儿,挂载到容器跟一下的A123,然后我下面我声明了一下,这个卷,我卷的名字叫做host ABC, 是不是对应上了。
21:14
然后我这个卷呢,你看我的宿主基因目录是word下的ABC是吧,而且而且我还会做一个类型检测,我确保我这个ABC是一个file类型,来我们来执行看一下CTL,我们先把刚才的先给回退一下啊,要不然的话后面容易看混。好了,因为它是异步的,所以我直接CTLC掉了,哎,库CTL,呃,PLLY, 杠F,然后host pass, 好创建完事儿了,我们来看一下它的状态怎么样,好,已经running了,然后刚才的那个呢,是terminating,这个正在销毁,我们就不再管了。好吧,来,我们一起来测一下我们的hostp,怎么测呢?我也准备了几个命令,我们先在我们本地先输出一段话到我们的这个文件夹里边,对吧?因为我们是把word下的ABC挂载到。
22:17
这个容器上了对不对,所以说我要先把这个先。文件先文件内容先给构构造出来对不对,然后构造出版以后我们要做什么,就是还记得我们这个特性嘛,Host派它其实是读你宿主机的这么一个文件方式,对吧,所以说我得把这个文件我得传到它对应的宿主机上才可以来,我们来看一下它在哪个速度机。Get port-o wide, 他在WORK2,那也就是我得把这个文件传到WORK2才行,对吧?来我传一下。呃,我写我这里提前把命令写好了,然后把这里改一下就可以了,20来SAP把word下的ABC传到192.168的00:20是吧,因为我的博客2就是这个地址嘛的。
23:13
这个腕下的ABC,好吧,来还好没有问题了,下面我们应该怎么办呢?我们应该输出一下这个容器的根下的一二三对不对,来执行一下这个命令。看见没有?是不是?有没有问题?你看苏晓轩到此一游对吧?哎,这里为什么有个一二三呢?前面为什么会多个123?因为这个是我上一次实验留下来的,好吧,这个可以忽略,实际上这个是已经没有问题了,好吧。来这里我看一下,我们接着改一下吧,改一下再查看一下,查看变化怎么样。听一下频。你看我又把一二三相当于是重定向到了,挖下来ABC,然后呢又SCP到了,哎,应该是20对吧。
24:10
20这台note节点上对不对,回车好,文件已经传过去了,我们再执行一下刚才的那个命令,再输出一下它这个容器跟下的一二三文件到底显示的什么,按照预期来说,应该显示的是一二三对不对?回撤没问题,一二三好,到这里呢,其实host PA的演示就已经完事儿了,我们来再做一个收尾,收尾验证吧。我们把这个破的给删掉,按照预期来说,这个pod的数据是吧,会持久化到它所在no的节点的这个。呃,Y下的ABC对不对,来我们来看一下,好,正在删除。好来,我们切换到这个20那个20这个机器哈,来我们可以进到五二下的,五二下来看一下是不是有个ABC,是不是ABC还在呀,来看一下ABC。
25:11
一二三没有问题,相当于是。我虽然把这个破给删掉了,但是它的数据却成功的持久化到我所在。这个node节点的磁盘上对不对,这也就是通过这一种方式进行了一个,嗯,是句19话吧,虽然说它不是集群级别的是吧,是它是破的级别的,但是我们先通过这种方式先了解一下啊,我们可以通过这样的一个方法来将我们破的的数据。可以就是写入到持久化到我们的本地,好吧,到这里呢,实验环节就已经结束了,呃,感谢大家的观看,下面我们开始我们的PV和PVC的学习,各位同学呢,也要做好对应的预习,好吧,再见。
我来说两句