00:00
欢迎大家继续收看上硅谷的零点。云计算视频。我是王洋老师。那上节课呢,给大家讲了一些我们K8的组件的一些相关的功能。包括它的一些原理性介绍,对吧。那这节课呢,带大家去看一下我们库。体中最重要的一些体术概念。我们的泡的是怎样的?是怎样去构建的,对吧。这还是很重要的。这个如果不理解的话,在后面我们进行CUBA构建的话。你是很难理解的。今天的内容呢,主要分为两个章节,第一个就是我们的PD的概念。什么是泡的?泡的这个概念是K8中特有的一个新的概念。原来我们是没有接触过的,对吧。所以接下来呢,我们要去详细的讲一下什么是泡。以及第二个。掌握通讯的方式。到底在K8中,Pod与pod之间是怎样通讯的,与外部是怎样通讯的,我们都需要把它解决。
01:07
那我们先看第一个知识点,也就是PD的概念。其实对于炮来说,它是有一定的分类的。当然,官方并不是这样分类的。在国外的一个博主里面写过这么一句话,就是泡的可以分为两种,一个是自如式泡的,一个是控制器管理的泡。我觉得他的想法挺不错的,就拿过来去演射。那这种式炮的含义,讲明来说就是不是被控制器管理的炮的。另一种就是被控制器管理的泡。那如果不是被控制器管理的pod被创建以后。你会发现。他一旦死亡的话,就没有人会把他给拉起来。就重启一下,不会。也不会把它,比如这个pod一旦死了以后,它的副本数是不是就达不到期望值了,也不会有人去创建出来一个新的pod满足他的期望值。
02:03
这都是自主式D的一个。缺憾。那第二种是我们的空气管理的pod。那不管怎么说,其实我们现在对pod的概念没有一个太深的认识,那接下来呢,我们去大家去给pad做一下详细的讲解。首先我去创建一个我们的。在传统情况下。比如我们在我们的传统的刀里。在我们的主机上,我去运行一个容器的话,每一个容器都是独立存在的,对吧。通过我们的民生空间进行隔离。每一个容器都有自己的IP地址,每一个容器都有自己的每个,每一个容器都可能有自己的挂载券等等。但在进行KS移植的时候就不太容易了。比如我想把一个。没有在。呃,容器运行部的一个环境,把它。
03:03
或者叫迁移到我们的K8上。就比较难迁移。因为有些软件,比如我们的LA。MP。那A呢,和我们的PHP之间呢,可能有联系,那如果把它给分开了,它两个是不同的地址,我还得去配它的返航代理比较。较费劲对吧。我想给大家描述一种怎样的状态呢?就是有些。主见。他们应该在一起。并且还能够直接互相见面。也就是通过logo house的方式可以访问到。但是如果采用的是标准的容器方案的话,你会发现。不可以这样做,除非你把两个不同的进程封装在同一个容器内部。或者是这个容器采用这个容器的。网络站也可以做到,但是安全性是会有隐患。K8S呢?给我们建立一个新的概念叫pod pod怎样实现的呢?首先。
04:03
我要定义一个pad。它会先启动第一个容器,这个容器需要注意一下,只要你运行了这个炮,这个容器就会被启动。阵容就叫pass。听清楚了哈,只要是有泡的,这个容器就要被启动。那这个容器启动成功以后呢?假设我在这个pod里定义了两个容器。也就是一个pod里会封装很多个容器。甚至还可能有三个、四个,当然也也可能只有一个。平白我意思吗?也就是。大雨。然后这两个泡呢,会共用。PU的网络站。共用。
05:00
它的存储卷。我们先讲第一个,共用他的网络站,也就意味着这两个pod没有自己独立的IP对接。它有的都是PU的,或者是有的只是这个pod的地址。他俩之间呢?伟根隔离。但是他们的进程不隔离,也就意味着如果这里运行的是PPFPM。这里运行的是我们N。如果N的想要反向单里到PPFPM的话,只需要写logo house的冒号9000即可。不需要写什么他的IP地址,然后加映射啊,什么什么乱七八糟一堆,不需要直接就可以访问到他。原因是这两个容器都共享的是PU的网络站。那既然是共享他的,那他俩是不是都见面了?也就意味着另一个概念,就是在同一个pod里。容器之间的端口。不能冲突,你别这里搞了一个八零,这个容器也是八零,那这个炮肯定是起不来的。
06:01
或者是起来以后无线重启。你要知道原因是为什么。能理解我的意思吗?好,这是第一个共享。第二个共享,共享的是我们的宝宝站。假设这个pod挂载了一个存储。这炮的挂载的一个存储。那这两个是不是都想去访问到这个网页存储啊。同理。这个pod也会共享pause的存储,Nnux也会共享它的存储,也就意味着在同一个pod里既共享网络又共享存储键。需要大家注意一下,这就是一个泡的基本概念。没问题吧?再回来。那控制器管理的port的概念也就意味着。控制器。是不是要粘贴一下。每个控制器有什么特点?他管理的泡了有什么特点?那这样的话,你在了解每一种的以后,你是不是才可能再去做对应的一些选项的时候,才会才会去做比较匹配的方案。
07:06
很好理解对吧。我们先看第一种。RC。Controlt简称啊C。Set,简称is deployment。这其实是三种哈,并不是一种,那为什么会把这三种放在一起讲呢?原因是他们有一定的。重合性。我们。来看一下。第一个。Robot control ruler,也就是RC,用来确保容器的应用副本数始终保持在用户定义的副本数上。G如果有容器异常退出,会自动创建新的炮来代替。讲白了说,就是我之前说的那个期望值的概念。我期望我们的父母数母为四。假设有一天有个一个炮死了。那我会创建一个新的pod来满足这个期望值。
08:01
为什么说是期望值呢?万一我们现在的资源不够用了,他创建不出来,是不是也没办法对。啊,所以说是期望值。而如果异常,多出来的容器也会被自动回收。不能少。但是你也不能多,对吧,然后刚刚好满足我的期望。在新版本中的Co建议使用caci来取代。会开开心的。输输了也就。用RS。来取代RC。原因是什么呢?他们没有本质区别,说了对吧,只是名字不一样。但是R支持集合式的select。我们在创建pod的时候会被它打标签。打标签,比如APP。等于阿帕奇。比如wson等于V1版本,我们会被他打一堆的标签。那当有一天我想删除我们的容器,或者删做或做对应的一些设施的时候,我可以这样去说,我说诶,当APP等于。
09:06
阿帕奇,当沃森等于V1的时候,我要干嘛干嘛干嘛。R就支持这种集合方案。但是RC不支持。所以,在大型项目的管理中。RS肯定会比RC更简单。更有效,更有意义。所以在新版本中。官方抛弃RC,全部转用。需要大家注意一下。好。这是RS和RC的关系,那还有一个deployment对吧?虽然可以独立使用,但一般还是建议使用deployment来自动管理。Publicsette。这样无需担心跟其他的机制不兼容。比如不支持。Running update。滚动更新。但deploy的支持。滚动更新还是很有意义的,尤其在生态环境中,对吧。
10:02
比如。而我现在运行了一个pod。运行两个pod吧。这个炮楼用的镜像版本是V1版。我们现在要把这个镜像版本给它改成VR版。那怎么办呢?我可以进行一个滚动更新。他先删除一个pod。或者是先多一个炮的,它是VR版。然后呢,再把这个老旧炮塔给删除,第一步创建一个新的,第二步删除它。那再创建一个新的。镜像也是V2吧?这是第三步,第四步把它删除,那这样的话,你会发现最终我是不是就会出现一个最新的这么一个版本状态了。这就是我们的滚动更新的含义。R不支持滚动更新,但是我们的deploy的支持。那它支持就支持,为什么要跟我们的RS放在一起去讲解呢?原因是development并不负责我们的pod创建。
11:01
它是通过这种机制打到炮窗垫的,给大家画一下。假设这是一个我们的deployment。底在创建出来以后呢,它会去创建一个RS。也就意味着这个R并不是我们自己定义的哈,而是deployment定义的。那deployment呢,再去负责去创建我们对应的。
12:08
比如这里创建了三个炮。那如果有一天我说了,哎,Development,你给我更新一下,把镜像更新成VR版本,我们现在写一个V1。那他会怎么做呢?它会新建一个RS,比如这个RS可能是杠一了。它并并不是以杠一去标识的哈,我这里只是随便写了一个。那这样的话,它会把它给起来,就是启动第一个容器。是VR版的第一个容器。那这里会退出第一个。启动第二个容器。这里会退出一个。启动第三个容器。就会退出一个。滚动更新的状态。能理解我的意思吧,这样就滚动更新了。并且还可以回滚。什么叫回滚?
13:02
我如果发现更新到VR版本有一定小bug了,我可以回滚。直接我们的专利out。Ondo即可。他就回去了。他会去。新建一个老旧版本的V。把VR删了,以此类推。原因是什么能回滚呢?原因是development development在滚动更新以后,这个S并不会被删除,而是被停用。当你回滚的时候,他就会把这个老旧版本的RS给他启用。逐渐达到他想要达到的预期状态。这是deploy的原理。能理解我意思吗?他需要去创建S,达到创建port的能力。这个需要大家理解一下哈。我们继续。下一个叫PA。PA呢,讲白来说就是我们的。平滑的炮的平滑扩展对吧,根据我们的利用率。
14:00
仅适用于和lo和R。在V1版本中支持根据pod的CPU利用率所扩容。也就意味着什么,我现在运行了一个pod。我经常运行了一个S。S下面管理两个炮。然后我再定义一个HPAPA也是一个对象,需要被定义哈,Hpa。那HBA定义的是。基于这个S去定义。他怎么写的呢?当我们的。CPU。大禹。80的时候。那就进行扩展。扩展的最大值。是十个。最小值是两个。
15:00
有这么一种描述方式。也就意味着他会去监控这些炮的。当前的资源利用率。当他的CPU达到80的时候,他会去新建出来新的pod。再点炮的,再点炮的,再点炮的。直到达到它的最大值。当然,如果你建三个抛的以后,它的CPU平均利用率已经达不到80了,就不会再进行继续创建了。能理解我的意思吧?当创第三个的时候。还在大于等于80,它才会继续向下去充电。一定要理解这里的概念。一旦它的利用率变低以后,这里pod就会被回收来,三一个三一个。但他不能继续参了,因为这里说了最小值为二。所以在这种情况下,他就可以给我们达成一个水平自动扩展的这么一个目的。这也是IPA可以去实现的。在我们的阿尔法版中呢,还可以根据内存或用户的自定义的一些阀值去进行我们所谓的扩容缩。
16:04
现在还不是一个稳定版,需要大家注意一下。好在不久的将来我们就可以这样去用了,对吧。那我们继续往后看。下一个叫staadful seat。主要解决的是我们有状态服务问题。为什么说是为了解决有动态服务问题呢?我们想一下,在刚开始给大家讲刀客的时候我们就知道了。刀。它主要面对的是我们的。无状态服务对吧,我们一直在讲这个概念,就是刀客主要面对的是无状态服务。无状态的服务的含义就是没有对应的存储,需要去实时的保留。或者是我们把它摘出来以后,那经过一段时间运行以后,再把它放回去,它依然能够正常访问工作。无状态服典型的有哪些呢?比如我们的阿帕奇服。比如我们的一些is。
17:00
负载均衡调度器。那这些都是无状态服务,那有状态服务更多了,比如买。他就是典型的有状态服,比如曼古D病。他们都需要实时的进行数据的更新以及存储。把它抽离出集群以后,再把它放回来,他就没法正常工作了,这是不是典型的有状态服?那就是为了解决我们有状态服务去诞生出来的。它主要有哪些可以去帮我们做到了,第一个叫做稳定的持久化存储。稳定的数据化存储。就是我们炮的再去死亡以后我们再调度回来。在调度一个新的pod把它给取代的时候,它的存储依然用到的还是之前的存储。并不会变,并且里面的数据也不会丢失。第二叫稳定的网络标识。之前的pod叫什么?现在pod还叫什么?之前的主机名叫什么?现在的主机名还叫什么?不会变换。
18:01
防止我们在集群里面对吧,定义了一个炮的名称去调用,结果出现了一个新的炮的,把它顶替以后,哎,名字变了,我需要重新去写入。不需要。他会实时的稳定这么一个网络标识。第三个,有序部署。有序部署会分为扩展和回收阶段。叫有序部署和有序回收。那什么叫有序部署呢?只有当前一个。前一个的泡的。处于running或ready的状态,就是运行或准备已经就绪了状态。第二个才可以被创建。为什么这样说呢?为什么或者为什么需要这种呢?原因是比如我们去构建一个集群化。有一个earnings。阿帕奇。MYSL。它们的启动顺序的关系应该是先起MYSL,再写阿尔法奇,再写恩尼个。原因是如果我要去先起的是NX的话。
19:01
他是个反向代里的后端的阿帕奇,他会判断,诶,阿帕奇怎么不在啊?那如果再起阿帕奇的话,他会判断,诶买SQL怎么不在。所以这里在大型环境中是有一定的启动顺序的。是这个意思吧。那既然有启动顺序,我是不是要定义有序部署啊?他第一个七,他第二个七,他第三个七。并且在回收的时候,在删除的时候是不是也一样。我们应该先删谁啊?先删最上层的,恩,你是先删,再删阿帕奇,再删马。所以叫有序部署或叫有序回收。这都是可以给我带来的一个特点。当然,它只是给我们带来了这些特点。你要真正想去解决有状态服务的话,还需要自己去制定一些功能。那这个过程其实是非常之难的。哪怕到今天为止,买狗还不太能够。正常的在我们的K8S集群中稳定的运行。
20:05
或者说跟我们在。传统的虚拟化里面去运行的话,还是有一定的。缺憾的。所以我们提供了很好的这么一个。嗯,怎么说呢,基础结构吧,那怎么在上面去部署我们的有状态服务,还是需要我们去详细的去设计的。这是我们的step。那接着我们继续往后看。
我来说两句