00:00
大家好,欢迎大家继续收看上硅谷的Linux云计算视频。我是汪老师。那上节课呢,已经给大家去讲解了我们的资源清单相关的一些知识点了,对吧?好,那这节课呢,我们继续过去看。之前呢,给大家讲过一个概念,就是对于我们的pad来说,它是有一个简单分类的,对吧。给大家看一下。好泡的分类,那第一个分的类型呢,就是我们的叫什么赤主式泡的,第二个是我们的控制器的炮。这两个其实最大的区别就是它的生命周期不太一致,会叫生命周期被管理的机制不太一致,对于我们的自主式泡D来说,只要是pad退出了。
01:08
此类型的泡的不会被创建。那你可以理解为这个po没有管理者。他的死亡也不会被拉起。那对于我们的控制器管理的炮友来说呢?在控制器的生命周期里,始终要维持炮的的复本数,这是我们说的这两种炮的最大的一个特点。也就是我们的资源管理器管理的这些炮的,我们不需要去考虑这个炮的会不会死亡了,哪怕他死亡了以后,我们的控制器依然可以把这个炮的维持在对应想要的这么一个副本数目上。
02:04
好。那对于我们的生产环境来说呢?如果我们想要去部署的话,部署的方案基本上都会去选择控制器管理的pod。因为这种车炮筒没有去办法去确保它的一个稳定性。好。那接下来呢,我们就在今天的课程中呢,大家去学习一下对于K8S中有哪些控制器,以及每种控制器有哪些特点。好,那我们一个一个去看。首先我们今天给大家讲过了一个空气的概念,这里呢有一个总结对吧,这些相当于是一个状态机,用来控制我们的pod的具体状态和行为,这就是我们的控制器,以及控制器呢有这么一些类型,每一种都有各自的优点,我们需要去掌握每一种优点以后,才能去比较合理的在不同情况下去选择对应的控制器。
03:07
那第一个呢,是我们的RC和RRS,那RC呢,已经是一个过去态了,对吧,现在已经被淘汰了,那淘汰的结果呢,就是我们现在的RS。好,以及deploy,以及我们的DEMO set step job cn job和我们的HP。每一种呢都有它自己的特点,那接下来呢,就带大家去每一种呢,给大家讲解一下对吧,到底有什么样的特点,以及适用在哪种环境之下。首先第一个就是我们的RC和我们的RS,它写在一起的原因就是这是我们的现在进行时,这是我们的过去时,对吧?好,那RC用来确保容器应用的副本数目始终维持在我们的用户定义的副本数。也就是他是一个最基本的。
04:01
控制器类型。就是维持我们的pod的副本数目的。好,那即使如果有容器异常退出,则会创建新的pod来取代,也就是会始终维持我们的pod数目。当异常多出来,容器会回收,那不管是多还是少都不行,必须要在我的期望值上。那下一个呢,就是在新版本中会告诉我们通过R取代了RC,他们最大的一个不同点就是RS支持了集合式的select。那这里的选择是通过什么选择呢?是通过一个东西叫做标签,通过我们的levels去进行所谓的选择及控制。那对于我们的RS来说,它支持大量的一些算法去进行标签的匹配。那RC是没有的,所以它是历史了。
05:00
好。那下一个是我们的deployment deployment呢,为我们的pod和RS提供了一个声明式的方法,用来替代以前的RC方便的管理应用。这里有些东西需要给大家解释一下,第一个就是我们的声明式定义的方法。什么是声明式定义?我们可以看一个说明。对于我们的声明式定义来说,它也有一个对立面,叫做命令识别证。这是两类完全不同的思想。命令是侧重于如何实现程序。就像我们刚接触编程的时候,需要把程序实现的结果按照逻辑结果一步一步写下来进行,所谓的呃,叫做过道,对吧?好,那声明式编程呢,侧重于定义想要什么,然后告诉计算机或者引擎,然后他帮你去实现。
06:01
这两种其实我们已经看出来一个特点了,就是一个我需要一步一步一步的把想要得到的结果按照它的顺序执行,关系定义出来以后,他帮我们去实现,另一个就是我只需要告诉他结果,他就帮我去实现。从我们的客户这里来说,或者客户端这里来说。那肯定是声明式变成更友好的,但是我们是不是也看出了一个问题了,声明式编程是不是对开发人员不太友好?是这个意思吧?一个是你需要一步一步告诉他怎么走,他就会去走,另一个是你只告诉他结果他自己去实现,那真的能自己去实现吗?其实是不是还是前端定了一些我们的语法结构,他去理解以后帮我们去实现的,对吧?好,那再给大家通过一个通俗的例子给大家解释一下,比如现在早上没吃饭,比较饿,对吧,我想去吃一个煎饼。
07:01
那我去告我们,告诉我们隔壁的一个小王,我说哎,小王,你帮我买个煎饼呗,我给你十块钱,你先出门左转坐电梯,然后到一楼以后,再左转到我们的小卖部,你去买个煎饼果子回来即可。好,当然回来即可,也不行哈,买完煎苹果的以后,你再右转啊,坐电梯,从一楼坐电梯坐到我们的啊六楼以后,再右转进入我们办公室,把简密宝告给我,你必须要把整个流程定义的足够详细,一步一步一步一步的到达你想要的结果。那如果是生明式编程的话就简单了,我说哎,小王给你十块钱,我给你五块钱,你去帮我买个煎饼果子。就没了。这就是声明,是辩证。我只需要告诉他我想要什么,或者是我想要的结果是什么。他就可以去理解我的想法,去制定对应的执行步骤,然后帮我去做。
08:00
从这里也可以看出来,对于声明式来说,对于我们客户端来说更友好,对吧,并且声明是还有一个最大的特点,就是它可以是一个。重复执行,或者他是一个幂等的。幂等这个概念是不是我们数学里的对吧?我们的函数的幂次方等于函数本体,这是不是就是我们的幂等关系?好,那就像我刚才说的,我说诶,我把刚才的买煎饼果仁的这么一个流程定义成一个文档以后,我去把这个文档告诉某个人,让他去执行,当他执行到比如坐电梯到三楼的时候。我怕他没听见,怕我又让他执行一遍,他会怎么去做啊?他是不是又会回来,回到我的办公室,然后左转从六楼坐电梯到三楼,结果我觉得,诶,我是不是又忘了告诉他了,我又把这个命令重新执行一遍,他会以此循环。
09:00
这是不是已经浪费了很多的一些资源或者是时间了?那对于我们声明式编程来说,他就比较友好一点,比如我说我要煎饼果子对吧,他现在做的米到三楼,我说我要煎饼果子,他说知道了,我现在正在去呢。到一楼了,我说我要煎饼果子,他说知道了,我转个弯就到了,对吧?这就是典型的一个声明式编程的一个特点。它是密等的,我多次执行以后,只要我的目的是一致的,他不会重新执行,也不会有一些什么乱七八糟,一些报错给我们去看,这是不需要的。那对于生命式编程来说呢?最典型的就是我们的SQ语言。也就是我们的结构化查询语言。他典型就是一个声明式编程的这么一个思想。我们不需要知道计算机内部到底是怎么把这个数据库给串联出来的,我只需要告诉他,我说诶,可的database。It对吧,那这样的话,我们的整个语言,或者是我们的DB database management,也就是我们数据库管理系统,他会去理解我们的请求,理解完了以后再去帮我们去创建对应的一个数据库,It硅谷。
10:15
他就是生命,是辨证。那在我们的K8S里呢?Deploy就是专门为生命式、声明式的编程定义的这么一个方法。那对于声明式定义的方法来说,我们可以通过一个特殊的命令,叫做阿。对于我们的命令师来说呢,它是一个C,好,那当然并不是说我们的命令式的,比如RSRS是个典型的就是一个命令式的,比如我们的S,难道就不可以用阿play吗?你说我用阿play执行会报错吗?
11:16
他会给你一些提示,对吧,但是还是能执行的,比如我们的生命是编程,难道我们用create就不能创建吗?都是可以的,但是最优的方案就是这么去对应的,希望大家注意一下,对吧?最优的方案就是这么去定义的,声明是大家尽量用up play,命令是大家尽量用我们的create比较好,当然你说我就全用up play行不行,完全没有问题,需要大家注意一下。好,那接下来我们继续往后看。那deploy用来取代以前的RC来方便的管理应用。典型的应用场景包括定义deploy,创建我们的pod和RS。
12:08
其实这个创建POS这个过程是它的自动执行的。那之前给大家讲过这么一个概念,对吧,Deployment跟R的关联。那当我们再去创建一个,我给大家画一下。当我们去创建一个deploy的时候,比如这个line的名字叫做ingline,叫ingline,他们会去创建一个我们的R。那这个RS呢,一般会叫n deploy,然后呢,杠叉叉叉叉一个随晶码出现。那这个呢,就是典型的一个S呼叫deployment创建的S,也就是我们的deployment会去创建出来对应的SRS,再去创建出来我们对应的。
13:15
Po。这个逻辑关系需要大家理解一下啊,很重要很重要,Deploy呢,并不是直接去管理我们这些pod的,而是通过我们的S去管理pod。需要大家注意一下。好,我们已经说过很多遍了,对吧,这应该记住了。好,那接下来回来滚动升级回滚应用扩容缩暂停和继续deployment。首先其实我们的滚动升级回滚,包括扩容缩,包括我们暂停和继续扩容缩是我们之前RS就已经实现了,那既然deployment是通过我们的RR去进行所谓的pod管理的。
14:08
那我们想都不用想了,Development肯定是支持的,对吧?好,那滚动回滚和我们的暂停继续,这是我们的development的一个自己的特点啊,它是通过控制我们的RS的这么一个本的数目,或者是通过我们的控制RS的这么一个版本去进行所谓的滚动更新回滚或者是。我们所谓的暂停和继续的。那如果想进行一个滚动更新的话,它会创建出来一个新副本的RS。那左边的后分的S呢,比如我们这个叫RS1吧,那这个旧部的S呢,会被删除,删除的方案呢,并不是把R给删除哈,只是把它的副本的数目给它降低,那比如它减一个。
15:02
那右边呢,会新加一个,他建一个,右边会新加一个,这是完整整个流程的滚动更新。左边呢,它的副本数目就变为零了,右边现在两个对吧,好。如果有一天你觉得诶,这个pad并不是我想要的结果,并不是我想要的结果,它会把这个右边的老旧的副本数目再去启动启动。那同理,诶,它减一个,它加一个,减一个加一个,致使完成回滚的操作,这就是deploy,它的更新,滚动更新和我们的回滚操作,它底层的。原理了。好,那其实继续和暂停也是同一个含义,把它变为零以后是不是就是。并不是变为零哈,把它给挂起,在我们pod里是不是也会有对应的挂起操作啊,对吧,把它给挂起,进行所谓的暂停操作。
16:07
这完全都可以在我们的deployment下去实现。好,那也就意味着其实对于我们大部分的一些应用程序来说,通过RC和deployment都可以去实现了,对吧?但是建议大家如果两个都可以选的话,建议大家选择我们deployment,毕竟它的功能更多。对吧,毕竟功能更多,说不定哪天你就需要一个滚动更新的操作了,那这时候啊,谁是做不到,对于我们的development,它是不是就可以对吧,好。
我来说两句