00:00
好,接下来我们就进入到cooper notice章节的学习,也就是大名鼎鼎的K8SK和S中间有八个字母,所以我们简称K8S,那K8S在学习过程中,它里边的一些核心重难点概念还是比较晦涩难懂的,所以呢,我们希望那为了我们后边实战方面起见,我们接下来就以一个最快速的方式,以最少概念的方式,能以实战的方式先快速的把它用起来,当里边的一些核心细节,大家再参照上硅谷发布的cooper notice详情的章节继续学习就行了。我们先来理解一下什么是cooper notice,它的出现是为了什么,解决了什么问题。那我们先来理解一下这张图,选完docker以后,这张图就非常容易理解了。比如我们现在应用开发完了,我们想要部署,我们有这么几种部署方式的进化,首先第一种是我们传统的部署方式,如果我把这些应用呢全部部署到某一台机器上,由于应用之间没有隔离性,可能由于我A应用它的这个。
01:00
内存泄露炸了,把其他应用都挤下线了,所以呢,啊不是怎么安全,然后呢,接下来我们就进阶到我们的虚拟化的部署方式,虚拟化呢,就是我们以前说在我们的这个呃,物理机上,我们可以通过虚拟化技术开通几个虚拟机看看,这样呢,我们把一些应用呢部署到虚拟机上,即使这些应用炸了呢,只能炸到这个虚拟机内,所以它占的就就算CPU内存,它顶多就这么多,也不影响其他的,但是我们又说虚拟机呢太笨重了,所以呢,我们docker给我们开启了容器化的时代,所以只要我们有一个服务器装了操作系统,然后呢,我们在安装上docker就相当于有了容器化的运行环境,然后呢,接下来我们的应用就会以容器化的方式运行起来,大家之前也看到,哎,一个我们容器的镜像其实就几百MB,还是非常轻量级的,甚至于呢,有些几十MB,这怎么着也比这个虚拟机几个G的强太多,咱们现在以容器化的方式运行的话呢,它能。
02:00
也能做到资源隔离,一个炸了不影响另外一个等等等等诸多优点,那我们如果是以容器化的方式,又会给我们带来是一个什么样的问题?举一个例子,我们开发了我们这个项目,我们开发了一个抖音或者京东商城,它里边的服务模块众多,我们微服务呢划分我们开发了好多小项目,每个小项目呢,我们都以容器化的方式部署,而且呢,一台服务器还不够,我们把这项目呢甩到十几台服务器部署,每台服务器呢可能部署了,比如这个服务器部署了50个容器,这个30个,这个40个,这个70个等等,那像这么多的容器管理起来,这可就非常麻烦了。我们以前用doer呢,非常简单,Doer状我跑上一两个应用,我仍肉可以运维,但是我们这几百几千个容器哪一个故障,比如这个机器上的这个应用炸了,我还这个炸了呢,我们不想让人为修复,我们让它希望自动的在别的机器拉起一份,所以整个啊,我们需要一个对。
03:00
大量容器的一个统一的管理系统,就是我们称为容器编排系统,所以呢,Cooper ne就是这个事儿,所以我们现在呢,就急需一个大规模的这些容器编排系统,那我们CUNE就能做这个能把所有的我们跑起来的容器帮我们来编排起来,所以这个名词呢挺好,挺有意思的,叫编排,编排的重点意义在于两个字,一个是编,一个是排,所谓的编就是我可以把我们机器上运行的这所有容器,哎,我们比如我给大家都编一个组,诶你这几个呢,都是同一个应用的,它它两个属于一组,你这两个呢是同一个应用属于一组,你这三个呢可以属于一组,那我们只有把这个应用呢边,也就是先管理起来,将下来我们才能给它干嘛?排就是我先把你管起来,将下来我可以给你进行排列组合,比如这个应用呢,在A服务器只放了三个,不够了,我接下来给你B服务器,C服务器,我咔咔多扩充几个,所以这就是一种排。所以。
04:00
那我们就需要这么一个编排系统,那cooper nets就能完成,但cooper ne呢,听起来是管理这么多容器,其实在管理这些容器环节要有诸多问题要解决,比如cooper ne官方文档,说它呢具有以下特性,这些都宅自于官方文档啊,大家如果感兴趣的话呢,就可以看着百度搜索cooper notice官方文档,老师呢也是抄的官方文档,我直接在这儿来看一个中文版的官方文档,这呢有中文版的官方文档,大家看就行了,包括这一块文档,我们点进来来家看一下CUNE是什么来看这个图呢?在这一块全部是呢抄过来的,包括Co ne有哪些功能,这不都有吗?简单的给大家提一下,如果我们用了cooper ne以后呢,我们能实现哪些?比如第一个叫服务发现和负载均衡,举一个例子,我现在呢在三台机器部署应用,我部署两个应用吧,一个应用呢是A,好,我在一号机器和二号机器和三号机器,我。
05:00
都部署了一个A,因为呢,我们为了高并发,假设你只在一个机器部署这个A应用呢,可能只能扛住100个并发请求,这样呢,你的峰值有顶多100了,但如果我在三个服务器部署,诶,那这样呢,相当于我同时能扛住是300个并发,所以呢,我们一定要集群化部署,我们现在集群化部署起来了,但现在呢,又出现了一个问题,假设呢,我部署的这个应用B,我B呢,现在想要访问A,其实呢,你访问这三台机器的任何一个A都能完成你的功能,对不对?所以呢,那接下来我就可以做一件什么事,K8S呢,可以把这三个A给你统一起一个名字,比如我们就叫APP-A,然后呢,将来你B访问谁呢?你只需要写一个类似于域名地址的方式,你就叫PA吧,你就说我访问PA,接下来K8S呢,就会动态的给你做一件事,比如你第一次访问我。
06:00
把请求给你打到一号机器,第二次你再访问,我给你打到二号机器,第三次再访问我打到三号机器,我们把这种方式我们称为叫什么负载均衡,这样的话呢,假设100万个请求进来,好,我把前前面的一些请求我放给一号机器,中间的一些请求我放给二号机器啊,后边的一些请求放给三号机器,当然你要满足100万,你就得有更多的机器,那我通过负载均衡的方式把请求呢分分担到不同的机器,我就能满足大并发。所以这是我们cooper notice完成的第一件事,叫负载均衡。当然你要想完成负载均衡,就得得益于一个功能叫服务发现。什么叫服务发现?再举个例子,还是这个AB,我们在三台服务器部署了A,部署了A,部署了A,我们说B只要访问APP-A,然后呢,就会来到任意一个机器,哎,我们是不是都能访问的通,我们可以负载均衡的放给它,但是哪一天呢,突然这个A给炸了,那这个A1炸以后。
07:00
啊,那我们如果下一次请求你这个B不知道,K8S呢,自己不知道,他还把这个请求呢放给这个服务器啊,IP地址呢还放给他,那这是不是就访问不到呀,所以呢,我们现在就得有一个机制叫服务发现,K8S呢,别人访问APP-AK8SD,自己能发现这些A应用哪些是起来的,哪些是炸的,所以呢,即使剔除掉这些炸了的应用,比如这个应用炸了,那下次你访问APP-A,我K8S就自动的不把流量打给我们这个服务器,所以我们把这个机制成为服务发现,好那接下来呢,还有一种场景,比如存储编排还是一样的,我们这三台服务器,这三台服务器呢,可能会运行非常多的应用,我们把每一个应用呢称为容器,容器但是呢,很多应用可能都需要存储文件,存储各种东西,这个应用呢开开辟一块地方,这个应用呢又开辟一块地方,这个应用呢又开辟一块地方,反正呢,应用一多以后乱七八糟开辟的。
08:00
一堆地方,然后呢,这个应用死了,还不把它的这些开辟的这些内存,哎,不是是硬盘啊,我们存储只说硬盘,不把它开辟的这些空间给删掉,导致呢,我们应用一多,最后垃圾到处都是,所以呢,我们现在呢,还需要一个K8S,把存储也管起来,你每一个应用,你说你要多大的存储,你找K8S,要K8S自己给你开一块地方,你把数据呢存到这,如果你这个应用不用了,删了,K8S呢,把你关联的这个数据可以一起删,所以呢,这叫存储的编排,先把你管理起来,那我就可以控制了,呃,就可以排列组合了,那还有我们的自动部署和回滚功能,举一个例子,还是这个服务器A,我们给这个123号服务器,我部署了应用A,比如我们部了一个京东小小商城,小商城A,然后呢,A我们京东商城,呃,有一个是呃,比如我们有一个呃,六月618版本的京东商城,我们界面改了一下哈,618版本的。
09:00
这三台服务器呢,都是618版本的,然后呢,国庆节来了,我又变成了10月1号版本的,10月1号版本的结果呢,国庆节这一天巧了不巧,对吧,程序员10月1号版本呢,开发的有问题,国庆这节这一天给炸了,那我现在不能及时的去修复bug了,我可以做一件事,我回滚到上一次版本,所以呢,京东为了快速期间,那我直接能不能把我已经部署到10月1号版本,回滚到上一次,我部署到618版本,所以呢,K8S就可以这么做,有自动部署和回滚功能,部署来的东西你诶你想回到上一次了,一键回到上一次,这也非常方便,包括有自动的装箱计算,我们所谓的这些装箱计算,哎,就是这样,我的这个应用啊,我们都叫容器吧,都叫容器呢,K8S呢,所谓的装箱计算,就是呢,K8S会把你装到一个沙箱里边,运行你这个容器,而且呢,你这个容器占多大的内存,多大的CPUK8S也能监控到,甚至于呢,我可以控制这个应用。
10:00
它最多只占用多少内内存,比如只占用100MB,你的内存一超以后,K8S还可以把你这个英雄杀死,对吧?你不能占用这么多,所以呢,这就是我们说的自动完成装向计算每一个容器所需的CPU、内存,各种指标,K8S对它的所有资源都可以有封装和监控,然后呢,另外叫自我修复,这个功能呢,也是我们用K8S更多的一个功能,所谓的自我修复就是我的A应用,比如我部署到了三台机器,突然呢,这一天二号机器呢,炸了对吧?硬盘不工作了,呃,CPU烧了等等等等原因,二号机器的这些应用呢给没有了,没有了以后咋办?假设二号机器还部署了唯一的一个B应用,那二号机器一炸,连B应用都没了,所以K8S整整个呢,可以监控到我们集群里边到底部署了哪些,一旦集群里边一个机器完蛋了,然后呢,这个机器部署到上的应用K8S。
11:00
会动态的N放到另一个机器,比,比如我们放到这儿,这样呢,总保证你的这个应用一直不宕机,对吧?即使这个机器挂了,我在新的机器还能再拉起,我们把这个功能成为自我修复,还有更多的什么密钥与配置管理,每一个应用的这些配置信息,K8S也可以统一的给你管理起来,这个我们后来说吧,这如果大家学过cloud这个特性呢,就类似于spring cloud里边我们用的配置中心这些东西,但不理解的同学就先大概知道一下,K8S功能强大,那这是K8S自己来总结他能干什么,他K8S啊,就是为你提供一个分布式的系统框架,因为我们一旦应用要分布的部署到各种机器,将来就得有一个框架整体的管理这些。K8S就是这个分布式系统管理框架,那管理起来以后呢,接下来你满足的所有需要,K8S呢,几乎都能满足,如果自己不能满足,你还可以写插件让它满足等等等等,然后呢。
12:00
啊,比如我们K8S就可以轻松的管理系统的,我们这个叫金丝雀部署,所谓的金丝雀呢,就是我们说的灰度部署,这个灰度部署呢,我们先简单一提吧,就类似于大家玩游戏,玩游戏呢有两个不同的版本,一个是体验服务,诶一个是正式服务,正式服务呢,你的游戏功能就是我们正式大家都会用的,体验服里边呢,可能就是一刀999,对吧,这些功能好,所以呢,后来我们用起来再说吧,这是我们对于K8S的一个简单介绍。
我来说两句