00:00
前面我们介绍了cooper notice,接下来我们说一下cooper notice的架构,首先我们来说一下Co notice里边最重要的这么两个组件,一个叫master这个组件,一个叫no的组件,Master呢,我们翻译过来就是主node,那就是节点,那我们整个库ne的架构就是遵循我们这一种叫主存方式,那如果我们现在呢,有多台服务器,假设呢,这是四台,1234,然后我们就有一台服务器呢,要成为一个master主节点,然后其他的这些服务器我们可以成为这个no的节点,那这个node呢,现在就是来做真正事情的,因为我们看到node节点里边呢,有这些东西,Cooper light和docker,这是我们cooper light do cooper light是什么?我们后来再说docker呢,我们大家都知道这是运行时我们这个容器环境,那也就是我们以后所有的容器肯定都得跑到docker上,谁装了包,Docker那就能跑到谁。
01:00
的机器上面,那现在就是我们master节点是空的,它呢管理了非常多的node node里边呢有我们真正的运行式环境,所以如果我们想要部署一个应用,是由master来调度我们所有的node节点,将我们应用呢放到一个合适的docker这个运行式环境里边,整体呢就是这么一个储存方式,官方文档这一块呢,也说的非常详细,Master,那我们这个master节点呢,又有非常多的组件,我们可以来看一下。Master节点呢,详细是这样样子,它们之间的,首先他们之间的主存方式是这样,这不是master的节点,详细我们先来看一下,它们的主存方式是一个master,然后管理非常多的nude,每一个nude呢都是一台服务器,2345好,那现在呢,我们五台服务器五号是master,我们想要操作整个Co notice集群,我们要作的就是无论我们使用可视化界面UI,或者我们使用命令行,想要操作集群呢,都是通过cooper暴露的这个API,我们去来给我们的master来发送请求,这个master呢,收到我们要操作集群什么东西命令以后,他呢负责调度我们这些节点来进行操作,所以这是他们整个的架构模式,而且这些节点上呢,我们都知道在节点上边有我们这个docker容器,所以们这个docker想要运行什么,它想要下载镜像,那也得有一个镜像仓库,那默认我们不配置的话,那镜像仓库肯定都是docker默认的。
02:33
Ohb,然后这是我们的主从方式的架构,就长这样一个主拖几个从,我们所有的操作都是操作主,然后由主来调度这些总节点,然后接下来那主节点里边长什么样?那就是我们文档里边这边说的,那主节点呢,有非常多的这种组件,首先第一个叫CU巴aso,我们来看一下,在主节点里边呢,是这样,我们这个主节点,我们无论是使用可视化界面还是命令行,通过API来操作主节点,主节点呢先会有一个叫API server,那就是这个API server呢,它是对外暴露了我们CU notice的这个API接口,相当于我们外部对我们K8S的所有操作都是来通过它暴露的这个API,所以所有的操作请求呢,都会先由APS server收到,那API server呢,就提供一些认证授权,你所有的都是一切正常了,他收到你这个请求了,接下来他就要进行调度。
03:33
所以API server是外界要对我们进行资源操作的唯一入口,就是我们库集群想要操作的唯一入口。那接下来里边呢,还有一个etcd etcd呢,我们都知道,在我们这个Co ne集群里边,我们想要存一些数据,包括master的节点也要存储一些数据,那这些数据存档呢,我们就把ET存到这个etcd里边,这个呢,大家就认为是自己的MYSQ数据库就行了,Etcd它是一个兼距一致性和可用性的一个建值数据库,哎,那就跟red一样,用KUV,这是一个建值数据库,所以我们整个Co集群的数据,我们相关的这个每一个节点呢,这些信息数据等等,我们都可以存到这个etcd里边,我们master节点呢,有etcd,但etcd也可以做一个整个集群模式,高可用模式,我们后来再说吧。接下来呢,还有一个叫schedule了,Schedule了呢,我翻译过来叫调度器,调度器是什么呢?我们现在假设我们要创建,我们让要部署一个应用,那我们给cooper notice发送命令,我要部署一个,比如N。
04:43
Comca API server收到以后,他呢会把这次部署的信息先存起来,然后呢由schedule了,Schedule了呢负责从我们这个存储的里边,哎,我们就把它认为是一个定时器,然后呢,他把这里边拿到我们要干什么活以后,他就进行调度,那怎么调度呢?他就看哪些节点可以来做这个事情,所以它使用schedule了是来进行调度的,所以呢,我们对K8S集群的所有操作都是要经过我们主节点schedule来进行调度才可以。然后接下来呢,还有一个controller,这个controller呢,我们翻过来也叫controller manager,就是我们的控制器管理器,在我们这个cooper notice里边有非常多种控制器,不同的控制器呢会拥有不同的功能,比如node controller节点控制器,它呢,就是负责咱我们这些集群管理的其他机器节点出现故障时,进行一些通知响应的,还有我们这个。
05:43
副本控制器,比如我们现在要把一个应用要部署上三份、五份,我们就是使用副本控制器来进行部署的。所以SKY6了,相当于要调度真正的部署来干活,要怎么做,是由这些控制器,控制器呢,负责为我们系统里边的每个副本来维护正确的什么pod数量,Pod是什么,我们后来再说,然后呢,还有它的端点控制器,填充我们一些end points信息的,相当我暴露的端口啦之类的,然后呢,还有我们的服务账户和令牌控制器,那就是控制安全的,我们这个controller manager里边,那就有这么几种形式的控制器,这些控制器呢,我们用到的时候我们再说,当然还有一些云控制器,我们了解一下就行了。这是我们说的Co ne里边master节点的这几个结构,我们这呢有一个控制器,控制器的作用就是来进行我们的调度,有各种不同的控制器,节点、副本,端点、账户、令牌等等这些控制器,有这些控制器呢,来做各种事情,这是我们master节点的架构,那我们这个nu的节点又有什么呢?我们现在都知道一个master,它可以管理,诶我们这一个。
06:52
八次可以管理一到N个node,无限多种node,所以我们这个node节点那长什么样子,我们在这儿呢,可以给大家看一下node组件,那node组件呢,现在我们首先来说一下什么是node,就是我们的节点组件,它在每一个节点上运行,节点指的就是我们这个服务器,我们现在有十台服务器,那每一个服务器呢,都是一个node,我们每一台服务器呢,都维护运行的portd,诶我们又有一个概念叫portd,我们后来再说,所以我们现在呢,Node组件,Node这个节点才是真正来运行我们这些服务容器的这些东西,那在我们这个node节点上呢,就有非常多的组件,我们可以来看一下,在我们这个no的节点上,首先我们看最下层有docker,因为我们知道我们现在是虚拟化,我们用的运行的所有程序都是一个一个容器的方式来运行,所以肯定需要容器环境,那就是docker docker呢,那这就是我们云容器的运行式环境。
07:52
任何的这个节点,我们支持多种这个容器的运行环境,那么这个运行环境呢,除了用docker,大家用container的什么CIO等等等等,只要你实现了Co ne的cri接口就是容器运行接口,你就可以成为Co ne集群的这个容器运行环境,那我们现在默认整合的都是doer,所以docker呢是我们这个运行时环境。那接下来我们每一个节点,大家看我们这一个方框呢,是一个节点,我们可以有非常多的方框,每一个节点上呢,都有一个东西叫cooper late cooper late呢,它是什么?我们看到文档里边,它cooper late是我们每一个节点上的代理,相当于我们帮节点来干活的,那就是cooper late,它呢是保证我们容器都运行在pod中。好,那接下来pod的初步概念叫容器运行在pod中,那我们以前用docker的情况呢,是这样。
08:52
我们docker呢,现在要启动一个东西,那是一个容器,一个容器,一个容器,但在K8S里边,我们cooper notice认为我们就以一个容器一个容器为单位,可能功能呢不是太强大,有可能这两个容器正好合成一组,完成一个完整的功能,所以呢,它把这一个基本的单元,它称为pod,我们一个pod呢,可以包含多个容器,正在运行中的容器,所以呢。
09:21
这两个容器合起来完成我们一个功能pod,那就像大家用的这个iPod一样,对吧?那想要听歌看电影,那这是一个完整功能,那么我把这个容器音乐正在运行中的音乐程序,我们的电影程序,包括我们的这些信息程序,我们全部呢放到一个pod中,那这个pod呢,才是对外真正提供功能的一个完整组件,我们要买的是一个iPod,而不是买它里边的这个音乐什么软件,所以呢,我们现在呢,这就是它抽取的第一个概念叫pod,它是我们这个每一个节点上,我们都运行着这个coate,这是一个代理。
10:00
也是我们说的agent,我们这个代理呢,它就负责保证我们所有的容器都在它抽取的这个pod中,一个pod里边可以有一个容器,也可以有多个容器,这就要看我们当时是怎么规定这个pod是哪一组东西的,所以呢,这是我们的coate,它就负责我们整个容器的生命中期创建、销毁以及我们的券,券呢就是我们这里边的容器可能要保存数据,要挂载到哪个目录保存,它也负责这个,包括负责网络管理,CI叫container network interface,就是我们容器网络接口,这是我们的Co,就是我们poder的创建、销毁以及网络这些东西。然后呢,接下来还有一个叫CU prox,这个proxy呢,它是一个翻译过来,它呢也是一个代理,但这个代理呢,是什么东西,我们来看文档里边,它cooper proxy,他呢是集群中每个节点上运行的网络代理,也就是所有跟网络有关的。
11:00
我们每一个po的IP地址是什么,什么东西是什么等等,所有跟与网络有关的问题都是由库proxy代理的,所以我们现其实现在是这样子的,如果我们现在pod运行起来,我们想要访问它,那就所有的访问请求就得交给我们的Co proxy proxy帮我们来看它的这个东西在哪,帮我们来进行访问,这是我们说的proxy,大家就把它当成一个网卡路由器好,然后呢,接下来是我们的容器运行环时环境,Docker我们也说了,然后还有每一个组件里边,那么这三个是核心的,当它呢,当前节点的这个日志收集有这个fluent。它呢是一个守护进程,只要节点在运行,它就一直在,它呢可以负责我们节点的这个日志收集汇报给我们整个集群,那我们的核心就是这三个Co,是我们每一个node节点的代理,帮我们来负责创建销毁我们这个pod,以及我们券挂载的一些信息,然后proxy我们就是帮我们来负责访问服务和发现这些pod,如果我们一个pod现在在我们这个机器上呢,有三份,我们想要访问,他就随便的我们来找一个负载均衡的访问,这是我们的pod。
12:15
还有我们这容器运行式环境,我们想要把我们的应用运行到Co里边,我们肯定是以容器的方式运行,所以我们必须有容器的运行式环境,但我们这个容器呢,又是被人家以pod为单位组合起来的,这是我们说的no的节点的这个架构,那么整个完整的概念呢,其实是这样子的,首先我们来看,我们后来呢,会有一个命令行程序,叫cooper controller啊,不是cooperl cooperl呢是每一个上边的,然后我们现在呢,我们说要操作我们整个集群,我们可以用UI界面,也可以用命令行,那么现在呢,有一个命令行工具叫cooper controller,那么这个cooper controller呢,就是cooper ctl,他想要操作所有的命令呢,都是发给我们主节点的,主节点的APS server认证通过以后,他呢就能帮我们进行操作,主节点呢由schedule了,帮我们来进行任务调度,还有controller manager来负责真正的来创建我们这些东西资源等等。
13:16
然后还有我们的etcd主节点里边所有的数据呢,都存在etcd里边,所以接下来呢,就是这样子的,我们的工作节点,那就是我们的nude nude呢,我们假设现在有两个节点,那我们呢,想要对nude节点的所有操作,我们都是通过这个APSO,比如我们想要操作一个东西,保存一个什么,我想创建一个应用,在两个服务器里边都部署,所以我们的API server相当于就去来告诉我们各个node节点,然后呢,我们现在有一个任务你要部署,那谁帮我们来做这个事情呢?那就是Co light Co light来帮我们来真正的部署这些容器,管理这些pod,而且我们现在来说pod是什么?Pod是一组容器,合起来是一个pod pod呢是我们里边的最小部署单元,所以我们呢,Co的一次部署会产生一个pod,这个pod里边即使只有一个容器,比如是我们的。
14:16
PA它也得产生一个pod,它来管理我们的这个pod,那我们就可想而知,有些呢,可能稍微比较复杂一点,我们一个pod里边得有多个我们容器运行式环境,比如现在一个N加tomcat加一个我们的应用组合成一个完整的环境来进行运行,那这样的话,我们这个pod里边就会有三个容器,但所有的容器呢,由于它是一组pod,所以这一个pod是共享一个网络的。Pod里边所有的这个容器,他们的这个网络IP是跟着pod走的,都是一模一样的,它来组织我们这一组的容器,这是我们说的pod,所以呢,现在是我们的这个样子,我们的pod来管理我们很多的容器,然后接下来还有一个volume,这是我们的目录的挂载,那相当于我们无论是什么容器,它呢想要运行的时候,它产生一些数据要保存到哪呢?我们可以有一个概念叫volume,它可以来挂载到我们指定的地方,比如这一个容器,这一个容器,这个容器它的数据呢,挂载到这这个容器它的数据挂载到这儿,每一个都有多少,然后呢,我们这个多个容器呢,可以来组合成我们一个完整的pod,所以我们现在来操作我们这个node节点的时候,我们每一个节点上运行的docker docker里边呢运行着容器,但是容器呢被我们Co ne的Co net来组合成我们一个portd,然后呢,我们这些portd它负责来创建、销毁、维护生命周期,那访问哪个portd是。
15:45
由库proxy来进行代理和访问,比如我们现在把这个pod我们暴露出来了,那现在呢,提供了一个访问地址,那么这个访问地址从网络的访问地址只要一过来,那由我们的cooper proxy,它就来解析我们这个地址,最终访问到我们指定的容器。
16:02
而且它还可以负载均衡,比如我们这一个炮道部署了两个,它就负载均衡,随便用哪个都可以,这是我们的这几个概念,那这几个概念里边呢,再详细一点,还有一些叫controller controller是什么呢?它其实是更高层次的一个抽象,我们说要给cooper notice里边部署一个应用,我们相当于来操作一次controlrler,操作一次控制器,这个控制器可以指定我们这个pod副本的数量。比如我现在给它部署五份,部署八份,它是一个有状态应用还是无状态?什么叫无状态应用?那像我们写的这些购物车这些代码,它就是无状态应用。我们现在这一块崩了,我们随便在另外一台机器启动起来就行。那什么叫有状态应用?比如我们的MYSQLMYSQ,我在这儿装着呢,它存的数据呢,其实本地是在本地磁盘里边存着,它会存一些数据,如果我们这台崩了,我们在别的服务器拉起一个马circle,那它磁盘里边存的这个数据其实就没了,所以呢,我们这个码。
17:02
Circle这类的,它属于有状态应用,就是我们想要部署应用,其实我们是cooper ne是执行一次controller,就是我们这个controller呢,来定义我们这个应用的更高层次的东西,比如我是有状态应用部署还是无状态部署,我要部署多少份,那么这是一个controller,然后接下来呢,就去来进行一个部署,我们定义了一次controller以后呢,接下来我们就可以来部署,那部署操作就是用我们的controller来按照我们的要求,我们部署多少个pod,那实际真正落到服务器里边的是pod,再实际记一点,那就是pod里边的容器container pod呢,只是把它们组合起来,这我们说的deployment,然后呢,另外还有一个叫service,这些前序概念呢,大家都先听一下,我们后来用到的时候呢,仔细再说,那service是什么,那现在呢,知道我们给容器中给我们这个Co节点里边我们存这些服务部。
18:02
处一个服务最小的部署单元都是一个pod,一个pod,那假设呢,我们现在部署了一个购物车这个应用,这个购物车呢,它启动成一个容器放在这儿了,它被封装成一个pod,然后我把购物车部署了四份儿,假如我们四台服务器,那这儿呢有一份儿,那这呢还有一份,其他两台服务器呢,都每人呢都有一份,那相当于我们同样的。我们这四份都是完成购物车功能的,所以我们把这四份可以认为是同一个业务,所以我们把它呢合起来,我们就称为一个东西叫service service呢我们可以组合一些pod,所以关系呢是这样子的,我们pod组合一些controller service呢又挑出一些pod来进行组合,Service来组合一些pod,最终呢提供负载均衡,比如我们想要访问购物车,我们只访问这个service就行了,然后这个service呢,它就知道它组合的这些portd在哪些服务器里边都有,它随便呢访问一个就可以访问到,所以这是我们service可以来组合portd,而我们的一次部署就是要把这些pod部署到我们各个节点里边,这是我们说的一次部署。
19:14
我们一次部署产生了各种portd以后,用service来进行一个组合,这样抽象呢,其实大家感觉起来是一个非常合理的过程,然后还有我们说的label标签,我们库里边的这些资源,那都要指定这些label标签,这label标签的我们就是将来要用它来对资源的查询、筛选等等操作的,所以label标签呢也非常重要,比如我们现在来定义了两个portd,我们看看portd,就我们定义了两个portd,它们的名字呢叫Apple banana,然后呢,我们现在要筛选我们这些portd,那提供怎么筛选呢?我们可以用label标签来筛选,它呢,比如叫color red,它叫color拉yellow,我们想要筛选呢,就是通过它来进行筛选,这是一个非常重要的。
20:00
还有我们说的namespace命名空间,我们从头到尾接触到的命名空间,无论是学任何技术,哪怕是马贝蒂斯的这些插麦尔这些circle口映射文件,它都有一个名称,名称空间,名称空间呢,以前默认是跟着我们这个do接口走的,所以名称空间所有的作用都是为了做隔离,比如我们马贝利斯的这些插尔文件里边名城空间写的不一样,我写的是ADAO,他写的呢是BDAO,那BADA里边个有一个get hello方法,Ada里边也有个get hello方法,那这两个方法呢不一样,因为它们名称空间都不一样,所以我们这个name space呢也一样,以后所有的name space只要大家见过,都是用来隔离的,那我们这个每一个资源都应该是属于一个名城空间,你无论是一次部署你产生的这个portd,哪怕是我们的这个service,把portd组合成了这service,只要是我们Co notice的这些资源,我们都应该属于一个名称空间。
21:01
名称空间之间互相隔离,然后名称空间,同一个名称空间里边资源的名不能重复,但是名称空间之间名字呢,却是可以重复的,这是我们说的名生空间,就是来做隔离,那么整体的这个图画在就是我们以前的这一块,理解起来那就是这样子的,那再来理解一下,因为只有我们理解了这个,那才比较简单容易,我们的CU controller。Cooper ctl,这是我们一个命令行工具,我们想要操作我们整个cooper ne集群,那应该命令行工具呢,是请求发给我们的master节点,那master节点呢,由我们的APS serve,那我们这个APS serve呢,就负责来认证接收我们的这个请求,这个请求呢,我们想要部署一个东西或者干什么活,我们是由这个schedule了来进行调度,那调度完了以后呢,发给我们这个cooperle,然后呢cooper light,那就是其他各个节点的代理,这个节点呢知道我们想要做什么事情,他就呢去这个etcd,当然我们想要干的事情的所有信息都在etcd里边存储着,然后呢,他就去从etcd里边拿到这个信息,然后呢他就去干活,那怎么干活呢?可能我们这个部署呢,是一次的什么ctrler,我们定义一次ctrler,这个ctrller要给它做五个副本,八个副本怎么着,然后呢,我们就按照这个CTRL部署我们的port应用。
22:27
Pod里边呢,又跑了非常多的容器,然后我们想要访问pod,又是通过这个proxy来进行访问的。这是我们的整体结构,而且呢,对我们cooperer notice里边所有的资源定义操作,我们都可以使用压面或者杰森,比如呢,这就是一段阳秒,我们想要在cooper notice里边,比如我们现在八台机器,我们想要部署一个nexx,那怎么办呢?我们就在这可以来定义一个破的。这呢,它的类型就是一个pod,它的名字叫什么,Name叫什么,来选中一下,那接下来呢,叫specific,这是我们的这个规格,那就是我们定义这个NX,它的规格是什么,比如它的名字是什么,它要下载什么镜像,然后呢,因为我们是启动pod pod里边呢都是容器,容器是用doer做的,所以我们要下载doer镜像来启动里边的容器,所以我们来指定镜像,包括我们最终这个东西的在容器的暴露的端口是什么,我们在这儿都可以来指定,指定好它的规格,所以我们cooper notice里边所有的资源,我们都可以使用这个压ma来定义,我们后来呢跟Co notice的交互,我们天天在玩这个们,所以这是我们说的cooper notice里边的这些核心概念,这个概念呢,大家还是得好好理解一下。
23:47
主要呢,大家知道我们Co notice里面最小的单元是一个portd,我们把portd呢,多个port可以组合成一个service,大家知道这个就行了,那我们想要使用corporate ne,我们下节课呢,就只有部署了才能用,包括我们这有一个这个流程,我们来给大家说一下,我们先来提前说一下,大家先有一个概念,我们说到的时候呢,再仔细描述,比如我们想要给我们Co notice里边部署一个应用,应用呢都是以portd为单位的,它是最小化部署,我们这个应用呢,想要做一个应用部署,创建一个pod之类的,我们都是请求发给apis server的,所以我们无论是可视化界面还是我们的命令行,都是给API server来做事情,然后呢,我们这个apis server他收到了这个请求,他把这个信息呢,就放到了etcd这个集群里边,数据里边,然后我们的schedule了,因为他是调度器,他来监听我们的AP server,诶现在收到一个请求要干啥事了,那然后。
24:47
后调度器呢,就让AP把这个要干的事情拿来去,来通知我们其他的各个节点的cooper,那就是在其他节点里边存的数据,它来监听我们这个APS要干嘛,它监听到了以后呢,帮我们来创建容器的一些运行环境,流程呢,文字描述在这儿,比如我们通过库controller提交一个创建副本的这个请求,我们要把一个东西创建三个副本,它的这个请求呢,是先是由APSSO被写入到AP。
25:17
Etcd写到这儿,然后呢,接下来controller manager,他来通过监听APSSO的这个变化,他监听到这个事件,发现我们这个集群中呢,还没创建这个东西的时候,我们那个图呢,少画省略了一个CTR了。但是它监听,只要我们这个pod没创建,它会生成一个pod的这个模板,然后呢,把这个模板再保存到etcd这个里边。然后呢,保相当于我们前边的这个工作,你让我创建我CTRL了,帮你生成模板数据等等,保存在etcd里边,被schedule监听到了,SCHEDULE1发现我们现在有一个东西呢,要进行调度了,那他现在呢,就要调度我们所有的cooper notice的节点来进行执行,所以呢,他接下来要做的事情不是说立即让你去来干活,而是呢,他选一个节点,要让我们这个pod落户,他选好了以后呢,把这一个结果保存到etcd里边,相当于我们schedule了,是来保存结果的,结果保存在etcd里边以后,当然保存结果呢,也是通过AP server来把这个结果保存的,因为我们想要操作Co的所有东西都要通过APS server,它呢相当于知道了我们一个pod要放在哪,它调度好了,把这个结果呢。
26:32
保存到edcd里边,通过APS server保存到这,保存到这以后呢,接下来目标节点上运行的这个Co light,我们其他的nude节点运行的库,Ne他们呢,就会监听我们API server里边的这些信息,那他一监听有一个要星泡的要产生了,哪个节点该干活呢,他们都来监听到了哪个节点来干活,那我们这个节点的coberate就会拿到这个要干活的东西,他去来做真正的干活。
27:02
所以我们这个cooper呢,帮我们来去做一个容器,做一个pod去来把这些活干好就行了,这是我们整个的流程,概念呢就先放在这儿,大家要知道每一个东西都是干嘛的,当然刚开始听这些概念肯定呢很懵,那我们用着用着呢,我们边用边解释,大家可能就非常熟悉了。
我来说两句