00:00
大家好,欢迎大家继续收看上硅谷的Linux云计算视频,我是汪洋老师,上节课呢,已经带大家学习了怎样去进行所谓的email格式的。文件的书写对吧?那现在呢,我们就带大家去看一下,到底再去K8S定义一个pod的时候,有哪些常用字段需要我们去解释说明的。好,那首先我们先看第一个部分叫必须存在的属性,也就是含义,如果你创建炮的书写压麦文件的时候。没有这些属性的存在。他是不允许被执行的。那我们先看第一个属性叫做wson,那它的字段类型呢,是我们的STEM类型对吧,也就是剑值队对吧?好,通过这里指的是K8S的I版本,目前是基于V1的,可以通过我们的库CTLIP沃son去命令去查看。这是什么含义呢?我们之前给大家说过the four风格的编程风格对吧?它一般就是通过我们的gate或P或put等操作,对一个URL指令进行上传啊,下载啊等等,那URL指令后面有一个有两个值,一个是我们当前的。
01:19
主一个是我们当前的版本,那也就意味着如果我们去调度对应的一些资源的话,你必须要先确定是向哪个组的哪个版本里去写入数据,或叫调用对象。那每一种类型呢,比如我们的pod,比如我们的SVC,每一种类型的调度的主或者是版本是不一致的,甚至在不同版本调度都不一致,那这个呢,需要大家去查阅官方文档,能理解我的意思吧?好,那如果你想看完整版本的,可以通过这么一条命令去查看,我们到现在有多少个主,有多少个版本是没有问题的。
02:00
好,下一个看。也是一个string类型,字符串类型,这里指的是ma文件定义的资源类型和角色。那比如我们现在创建的是一个pod,那就是pod类型,你创建的一些是一个s service,那就s service类型,你创建的是一个deployment,那你就写deployment,需要注意一下,也是一个必选字段,好,Melo。Object对象类型对吧?原数据对象那固定值就写mad data也就意味着什么啊,Mad是一个字段,对象里面写的是它的一些语言数据类型,那这个对象类型有哪些字段呢?第一个内幕字段。那需要去写我们的元数据对象的名称,第二个namespace,也就是写的是我们的名称空间,这个需要注意哈,我们之前说过pod的pod的级别。它是一个民生空间级别的这么一个对象资源,也就意味着如果你在这里不去定义me的namespace的话,它默认使用的是default名称空间,如果你想把它放在一些特殊的名称空间下,你就可以加一个me data下的namespace去编写即可。
03:17
好,下一个Spark叫详细定义的对象,这是一个对象类型,对吧?好,Spark contain list列表类型,这里写的是我们的对象的容器的列表定义。那可能呢,下面有哪些值呢?第一个就是我们的name。这是一个对象类型,定义的是我们的容器的名称,第二是image,定义的是我们的镜像名称,那只要有这些属性的存在,就可以帮我们去运行一个pod的。这么一个方案了。好,那接下来我们再去看一下还有哪些一些主要的对象类型,对吧?那主要的对象类型的含义就是这里的值是比较重要的,但是呢,你不写也可以,他会帮你补充一些默认值,能理解我的意思吧?好比如第一个我们的容器的名称,如果你不写的话,它会随机去创建一个,那image呢,就需要去写了,这个并不会随机创建,对吧?好,Image policy,也就是我们镜像的下载策略。
04:22
那它会有三个值,一个是always,一个是never,一个是if not。那always的含义就是每次你在使用镜像的时候,它都会尝试从远程的仓库去下载,而不使用本地已经存在的镜像。ne呢,就是永远永远都使用本地的镜像,没有的话我就不用了。能理解我意思吗?没有我就不用了,If not,也就如果本地有,那就用本地镜像,如果没有就从远程去下载。如果你这一行值没有设置的话,那默认会用always取代,也就每次都从远程去拉镜像,那这个肯定是不太友好的,对吧?那最好的方案是不是就是我们的if not。
05:06
有我就用,没有我就下载对吧,好下一个。呢,下面有一个command command,它也是一个列表类型,好指定我们容器启动的命令,也就是一个pod。里面呢,会有很多的容器,每一个容器再去封装镜像的时候,是不是都会写一个CMD对吧?都会写个CMD,也就是这个容器在运行的时候需要去运行的指令,那如果你在这里通过这么一个指令对它做替换以后呢,相当于就是容器原来的指令不运行了,而运行你这这里指定的这么一条命令。好,Lgs可以指定我们的运行的命令的启动命令的时候一些参数对吧,比如iOS,比如它加一个杠V。或杠A对吧,都可以去使用,两个可以结合起来去使用,那work d指定我们的容器的工作目录,工作目录的含义就是我们一旦进入到这个容器的内部的时候,它就会处于这么一个目录下。
06:13
Volume mount,像这些W的含义呢,我们现在就不看了,因为我们后面会讲我们的存储件的时候,会给大家去定义好,指定我们容器需要用到的端口列表,Name。下面有个name,看到了吗?点name PS下面有个name,也就它是它的二级字段,对吧?二级字段好指定的是我们这个端口名称contain port。指定的是我们需要监听的端口号,House port指定的是我们在主机需要监听端口号,默认跟我们的c po一致。好。Pro的pro需要注意一下哈,也是一个二级字段,那指定我们是TCP协议啊,还是udp协议啊,默认是TCP协议。好,可能下的二级字段,因为指定我们的环境变量,可以赋予一些新的环境变量。
07:06
因为给这个环境变量呢起一个名称,给这个环境变量呢起一个值,以及它的。Contain的二级字段resource,对吧,指定我们的资源限制类型,那同理,这些资源限制呢,可以做我们的CPU的,可以做我们的内存的,我们现在还是跳过,原因是我们后面会对它专门去讲解,我们现在先简单有个概念,对于容器来说,对于我们的K8S来说,它也是可以定义我们的可用的资源的阀值的。我们看一下额外的一些参数选项,比如this policy,那这里呢,Policy有三个值,一个是。Always,一个是on few,一个叫na,那always的含义就是pad只要退出了。因为我pod里面运行的是容器,对吧,那容器是不是有可能会退出,容器退出以后,Pod就会呈现一个退出状态,那我们的light去负责整个容器周期的生命周期的,对吧?所以它要负责把它重启,那如果你是always的话,它会一直重启,一直重启。
08:12
并且默认值就是always,那当然这个重启也不是一辈子的,对吧,当然重启了很多次以后还不行的话,那就默认代表这个是意外退出的。那就不会再重启了,对吧?还是有一个限制的好,Onfiel unfiel的含义就是如果你的pot里面的容器的退出码如果是非零的话。非零的话,那我就会将它重启,因为它没有正常退出,对吧?如果是零的话,代表这个容器已经正常退出了,那我就不会重启它。never的含义就是不管怎样子,状态码,退出码。返回到了我们的master以后都不会重启该炮,也就不管你是意外退出的还是正常退出的,我都不重启你。Not select。
09:01
可以去选择我们的node节点去运行magic secret代表我们在使用。镜像在下载这个镜像的时候要使用什么样的,呃,Secret密钥对吧,或叫用名密码信息house network,那如果是force的话。代表的是不使用主机的网络,如果使用true的话,代表使用的数据网络,不使用刀和零网桥,那默认呢,就是我们的fo。那有些人可能会说,哎,老师,这里你讲的很多东西都太快了,对吧?原因是什么呢?这里的很多东西如果我们现在直接去讲解的话,比如这个wall,龙姆瓜仔,你根本听不出来什么含义,到底怎么用的,因为我们现在还没有讲wall。这些东西给大家列出来的含义是给你当做一个参考资料。你后期如果想去看的话,你可以去回过头来去重复看一下。并且我们每一个大概的给你过一遍以后,你在脑海中有一个简单的印象。
10:03
主要是起这么一个目的,并不是让你现在把每一个选项都给记住,不可能因为里面的很多参数含义你还不了解是什么东西。那在后面我们再讲到一些特殊的功能的时候,那这些参数就会回来,我们会详细的讲解每一个参数有哪些指标。能理解我的意思吗?所以现在不要着急。好,并且其实这里我们列的还是不是那么全的,只是一些比较主要的重要的,那如果你想看全的怎么办呢?我们可以连接一下我们的服务器,对吧。我们有个参数叫库CR。比如我们看的。好,告诉你了,泡模板下有这么些模板,看到了吗?有这么些模板。好。那比如我们想看我们的。
11:00
I沃森的。那你只需要在po后面加个点加IP沃son,你就可以看到它的IP沃的描述信息。当然,如果你觉得这里的描述信息还不太过瘾的话,这里有更详细的信息。你可以去直接访问这一个官方的说明文档。好,比如我们去看一下pod下面还有哪些东西,比如是Spark,我们之前说过对吧,一个详细的模板。好,Spark,那Spark下面是不是有很多信息了。看到了吧,好。往上翻,我们去找一下。比如这里有个can,并你会发现这里有一些有requirery,只要是标含requirery代表这个字段是必须写的,不写是不可以的,那query呢,是一个对象对吧?那对象列表,那所以底下还有一些东西,我们可以看一下,那里面是不是还有一些选项可以去选择,并且每个选项呢,都有它自己的介绍了,当然如果你的英文不太好的话,你可以去翻译一下是不是即可,对吧,好。
12:07
那接下来呢,我可以给大家去写一个最简单的我们的pod模板了。那首先呢,我们去创建一下泡的点。杨吧。那第一个阶段是我们必选的,对吧,IP沃森。那告诉他采用哪一个。我们的呃主以及版本去进行所谓的资源的申请。炮第二看的告诉他我们的类型是pop类型,都是必选的。Mad that。原数据类型,比如给他一个名称,Pod的名称还是必须的,对吧,比如叫我们的map APP。Pod吧,好,下一个是给的是我们的namespace。那默认的也是default。我们可以写一个default对吧,如果这个不写的话,它代表的含义就是default,因为是一个默认值,我们就不写,我们看一下。
13:05
然后下一个呢,是我们的labels。标签对吧,我们给它加一个标签,因为后期标签还是非常有意义的,所以标签最好给它加上,比如IAPP等于什么呢?等于我们的。必须是我们的英文哈,APP等于是我们的MYAPP,那可以再来一个沃son版本对吧,比如V1版。好。然后接下来呢,我们是写Spark。那Spark写的就是我们的一个里面运行的容器的详细信息了,对吧,好。那里面呢是contain。如果你觉得这个字段比较长的话,那你可以这样。City啊。PLA。看炮。
14:01
泡的下了什么呢?的下的Spark。你可以看到,诶,这里有一个。可能死了对吧,你可以复制粘过来,最起码这个印象还是要有的,对吧,那你就方便你去找到,完全没有问题。好,那接下来呢,是我们的。名字叫什么,我们这个第一个容器的名字叫APP吧。第二个他用的是什么镜像呢。用的是我们的,呃。呃,之前已经下载过,已经使用过的这个MPT的镜像。也就意味着其实这里啊,可以运行多个容器是没有问题的,我们还可以这样定义,比如。内幕。对吧,内蒙。然后再来一个什么test。然后image。给大家扑个坑哈。大家觉得这样可以吗?就这个炮筒能够正常运行吗?大家想一下。
15:01
一个炮的里。放了两个容器,一个容器叫APP。一个溶剂,叫test。他们肯定是没问题的,这两个容器单独运行都没问题,对吧,但现在他是不是要先运行一个pie,然后他们共享网络站。这个镜像它用的端口是八零,这个镜像用的端口也是八零,所以会出现什么意外。端口被占用,我们可以试一下。保持了束。编写完成以后呢,我们去运行一下Co CL啊,Play-F跑的慢。这里报错了是吧。说我们炮在V1的时候没有这个炮的资源,我们看一下什么情况。然后这里需要注意一下,这个pod呢,必须是大P,需要注意一下,我们再创建一下是不是创建成功了。啊,Get。两个都在运行对吧。
16:02
看了吗?错误了。开始重启对吧。好,重启了,后面显示的是我们的冲击次数,又错误了。原因是什么,我可以进去看一下对吧,比如cooper city啊。Po。是我们的麦APP。这里说的是我们的,重启的是我们的。哪个容器啊,是我们第二容器对吧,因为第一个容器已经正常启动成功了,第二容器老是退出,第二容器是什么呢?是我们的。这里没有显示是吧,我们可以往上看。第一个APP。可能呢,T。第一个是IB,第二是test,也就是test的容器,这里是不是也报错了对吧?好,那我们再看一下test容器的日志库c log。
17:05
看的是我们的MYAPP叫什么了?CTR看的是我们的MY杠。的C-C指定我们的容器叫什么?容器叫test。这里是不是告诉了?老是八零被占用对吧?老是八零被占用,这个这个报错应该能看懂,对吧,老是被占用,好给大家解释一下我的思路,当你的容器出现报错以后,你要先确定诶是因为什么,第script可以看我们的pod里面的一些信息,那我们看的是MYAPP的pod,也就这个报错的pod。报出报道以后,进来以后,你会发现有很多的一些信息,对吧,比如他叫什么,在哪个名字空间下等等等等,我们后面再去详细去说明吧,见到一个说一个,因为太多了,对吧,大部分大家也能看得懂,好里面有容器,第一个容器是APP。第二容器是我们的test在哪里?
18:04
Test以及每个容器的状态在这里是不是都有显示出来,这个容器是不是正在正在运行的running了,但这个容器是不是已经失败了,对吧?好,已经报错了,那并且重启了几次,这里都有显示,好。A,一些事件就是告诉你一个大概当前这个炮的运行的状态,那既然我知道是第二容器出现错误了,那我可以看一下第二个容器的日志对吧?所以我接着去看日志,酷ctl log查看日志,查看的是myb pod的日志,如果你这个pod里只有一个容器的话,你就不需要指定杠C,如果你有多个容器,你就需要加个杠C,指定我们的容器名称叫T,你就可以查看出来对应的。容器里面爆出的日志了,那这样的话我就可以排错了。这跟我们之前讲的是不是一样。共享网络站,不然的话,他这个八零不会被占用啊,对吧,所以我们再给简单的修改一下。
19:02
好保存退出那库珀CTR,我们可以把原来的给删掉。Get pot,如果想删除的话就是delete port。跑什么名声MYAPP跑的。我们再看一下已经没有了,对吧,我们在库CTR create。创建以我们的pot样板文件去创建库CTR get。已经装订了对吧?好,那我们可以加个杠O的藏娜的详细信息,那它的地址是102442028,我们可以在本机直接访问了。没问题吧?那这个呢,就是我们的一个pod模板比较常用的一些字段的说明。那后面不管是deploying的控制器还是RS控制器去控制的,都需要这个跑的模板的参与,所以它的一些参数还是比较重要的,一些个基础概念的铺垫还是非常有意义的。那当然并不是所有的字段我都给大家详细的解释了,大部分的篇章都是跳过的,对吧?原因是我们在后面遇到对应的一些服务的时候,一些插件的一些功能的时候,会给大家详细的把每个字段给演示一下,所以现在不用急,明白我意思吗?如果我上来给你灌输这么多的一些概念的话,你肯定记不住。
20:22
那你的主要作用,你的主要现在的工作就是根据我的上课讲的东西,自己在脑海中过一下即可,然后最后把这个泡的模板给它实现出来就够了。那后面的一些子的一些篇章,我们会在后面的一些课程中给大家逐渐逐渐去介绍以及深入。那这节课呢,我们就先讲到这里,我们下节课再见。
我来说两句