游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

企业应用快速跨向容器时代的正确姿势

  戳蓝字CSDN云计算关注我们哦!
  编者按:1月18日,网易云首席解决方案架构师刘超在微信群带来了主题为企业应用快速跨向容器时代的正确姿势的线上讲座,顺接上个月云计算的前世今生,为大家进一步详细解读了容器的诞生、容器的管理、以及容器如何对应用打包等问题。
  刘超网易云首席解决方案架构师
  云计算的发展脉络
  云计算整个发展过程,用一句话来形容,就是分久必合,合久必分。
  容器的诞生
  云计算解决了基础资源层的弹性伸缩,却没有解决PaaS层应用随基础资源层弹性伸缩而带来的批量、快速部署问题。于是容器应运而生。
  容器是Container,Container另一个意思是集装箱,其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。
  在没有集装箱的时代,假设将货物从A运到B,中间要经过三个码头、换三次船。每次都要将货物卸下船来,摆的七零八落,然后搬上船重新整齐摆好。因此在没有集装箱的时候,每次换船,船员们都要在岸上待几天才能走。
  有了集装箱以后,所有的货物都打包在一起了,并且集装箱的尺寸全部一致,所以每次换船的时候,一个箱子整体搬过去就行了,小时级别就能完成,船员再也不用上岸长时间耽搁了。
  这是集装箱打包、标准两大特点在生活中的应用。下面用一个简单的案例来看看容器在开发部署中的实际应用。
  假设有一个简单的Java网站需要上线,代码的运行环境如下:
  看,一个简单的Java网站,就有这么多零零散散的东西!这就像很多零碎的货物,如果不打包,就需要在开发、测试、生产的每个环境上重新查看以保证环境的一致,有时甚至要将这些环境重新搭建一遍,就像每次将货物卸载、重装一样麻烦。中间稍有差池,比如开发环境用了JDK1。8,而线上是JDK1。7;比如开发环境用了root用户,线上需要使用hadoop用户,都可能导致程序的运行失败。
  那么容器如何对应用打包呢?还是要学习集装箱,首先要有个封闭的环境,将货物封装起来,让货物之间互不干扰,互相隔离,这样装货卸货才方便。好在ubuntu中的lxc技术早就能做到这一点。
  封闭的环境主要使用了两种技术,一种是看起来是隔离的技术,称为namespace,也即每个namespace中的应用看到的是不同的IP地址、用户空间、程号等。另一种是用起来是隔离的技术,称为cgroup,也即明明整台机器有很多的CPU、内存,而一个应用只能用其中的一部分。
  有了这两项技术,集装箱的铁盒子我们是焊好了,接下来就是决定往里面放什么。
  最简单粗暴的方法,就是将上面列表中所有的都放到集装箱里面。但是这样太大了!因为即使你安装一个干干静静的ubuntu操作系统,什么都不装,就很大了。把操作系统装进容器相当于把船也放到了集装箱里面!传统的虚拟机镜像就是这样的,动辄几十G。答案当然是NO!所以第一项操作系统不能装进容器。
  撇下第一项操作系统,剩下的所有的加起来,也就几百M,就轻便多了。因此一台服务器上的容器是共享操作系统内核的,容器在不同机器之间的迁移不带内核,这也是很多人声称容器是轻量级的虚拟机的原因。轻不白轻,自然隔离性就差了,一个容器让操作系统崩溃了,其他容器也就跟着崩溃了,这相当于一个集装箱把船压漏水了,所有的集装箱一起沉。
  另一个需要撇下的就是随着应用的运行而产生并保存在本地的数据。这些数据多以文件的形式存在,例如数据库文件、文本文件。这些文件会随着应用的运行,越来越大,如果这些数据也放在容器里面,会让容器变得很大,影响容器在不同环境的迁移。而且这些数据在开发、测试、线上环境之间的迁移是没有意义的,生产环境不可能用测试环境的文件,所以往往这些数据也是保存在容器外面的存储设备上。这也是为什么人们称容器是无状态的。
  至此集装箱焊好了,货物也装进去了,接下来的问题就是如何将这个集装箱标准化,从而在哪艘船上都能运输。这里的标准一个是镜像,一个是容器的运行环境。
  所谓的镜像,就是将你焊好集装箱的那一刻,将集装箱的状态保存下来,就像孙悟空说:定,集装箱里面就定在了那一刻,然后将这一刻的状态保存成一系列文件。这些文件的格式是标准的,谁看到这些文件都能还原当时定住的那个时刻。将镜像还原成运行时的过程(就是读取镜像文件,还原那个时刻的过程)就是容器运行的过程。除了大名鼎鼎的Docker,还有其他的容器,例如AppC、MesosContainer,都能运行容器镜像。所以说容器不等于Docker。
  总而言之,容器是轻量级的、隔离差的、适用于无状态的,可以基于镜像标准实现跨主机、跨环境的随意迁移。
  有了容器,使得PaaS层对于用户自身应用的自动部署变得快速而优雅。容器快就快在两方面:第一,虚拟机启动的时候要先启动操作系统,容器不用启动操作系统,因为是共享内核的;第二,虚拟机启动后使用脚本安装应用,容器不用安装应用,因为已经打包在镜像里面了。所以最终虚拟机的启动是分钟级别,而容器的启动是秒级。容器咋这么神奇?其实一点都不神奇,第一是偷懒少干活了,第二是提前把活干好了。
  因为容器启动快,人们往往不会创建一个个小的虚拟机来部署应用,因为这样太浪费时间了,而是创建一个大的虚拟机,然后在大的虚拟机里面再划分容器,而不同的用户不共享大的虚拟机,可以实现操作系统内核的隔离。这又是一次合久必分的过程。由IaaS层的虚拟机池,划分为更细粒度的容器池。
  容器管理平台
  有了容器的管理平台,又是一次分久必合的过程。
  容器的粒度更加细,管理起来更难管,甚至是手动操作难以应对的。假设你有100台物理机,其实规模不是太大,用Excel人工管理是没问题的,但是一台上面开10台虚拟机,虚拟机的个数就是1000台,人工管理已经很困难了,但是一台虚拟机里面开10个容器,就是10000个容器,你是不是已经彻底放弃人工运维的想法了。
  所以容器层面的管理平台是一个新的挑战,关键字就是自动化:
  自发现:容器与容器之间的相互配置还能像虚拟机一样,记住IP地址然后互相配置吗?这么多容器,一旦一台虚拟机挂了重启,IP改变,你怎么记得住应该改哪些配置,列表长度至少万行级别的啊。所以容器之间的配置通过名称来的,无论容器跑到哪台机器上,名称不变,就能访问到。
  自修复:容器挂了,或是进程宕机了,能像虚拟机那样登陆上去查看一下进程状态,如果不正常可以重启一下么?那你要登陆万台docker了。所以容器的进程挂了,容器就自动挂掉了,然后自动重启。
  弹性自伸缩AutoScaling:当容器的性能不足的时候,需要手动伸缩、手动部署么?当然也要自动来。
  当前火热的容器管理平台有三大流派:
  一个是Kubernetes,我们称为段誉型。
  段誉(Kubernetes)的父亲(Borg)武功高强,出身皇族(Google),管理过偌大的一个大理国(Borg是Google数据中心的容器管理平台)。作为大理段式后裔,段誉的武功基因良好(Kubernetes的理念设计比较完善),周围的高手云集,习武环境也好(Kubernetes生态活跃,热度高),虽然刚刚出道的段誉武功不及其父亲,但是只要跟着周围的高手不断切磋,武功即可飞速提升。
  一个是Mesos,我们称为乔峰型。
  乔峰(Mesos)的主要功夫降龙十八掌(Mesos的调度功能)独步武林,为其他帮派所无。而且乔峰也管理过人数众多的丐帮(Mesos管理过Tweeter的容器集群)。后来乔峰从丐帮出来,在江湖中特例独行(Mesos的创始人成立了公司Mesosphere)。乔峰的优势在于,乔峰的降龙十八掌(Mesos)就是在丐帮中使用的降龙十八掌,相比于段誉初学其父的武功来说,要成熟很多。但是缺点是,降龙十八掌只掌握在少数的几个丐帮帮主手中(Mesos社区还是以Mesosphere为主导),其他丐帮兄弟只能远远崇拜乔峰,而无法相互切磋(社区热度不足)。
  一个是Swarm,我们称为慕容型。
  慕容家族(Swarm是Docker家族的集群管理软件)的个人功夫是非常棒的(Docker可以说称为容器的事实标准),但是看到段誉和乔峰能够管理的组织规模越来越大,有一统江湖的趋势,着实眼红了,于是开始想创建自己的慕容鲜卑帝国(推出Swarm容器集群管理软件)。但是个人功夫好,并不代表着组织能力强(Swarm的集群管理能力),好在慕容家族可以借鉴段誉和乔峰的组织管理经验,学习各家公司,以彼之道,还施彼身,使得慕容公子的组织能力(Swarm借鉴了很多前面的集群管理思想)也在逐渐的成熟中。
  三大容器门派,到底鹿死谁手,谁又能一统江湖,尚未可知。
  网易之所以选型Kubernetes作为自己的容器管理平台,是因为基于Borg成熟的经验打造的Kubernetes为容器编排管理提供了完整的开源方案,并且社区活跃,生态完善,积累了大量分布式、服务化系统架构的最佳实践。
  容器初体验
  想不想尝试一下最先进的容器管理平台呢?我们先了解一下Docker的生命周期。如图所示。
  图中中间的就是最核心的两个部分,一个是镜像Images,一个是容器Containers。镜像运行起来就是容器。容器运行的过程中,基于原始镜像做了改变,比如安装了程序,添加了文件,也可以提交回去(commit)成为镜像。
  如果大家安装过系统,镜像有点像GHOST镜像,从GHOST镜像安装一个系统,运行起来,就相当于容器;容器里面自带应用,就像GHOST镜像安装的系统里面不是裸的操作系统,里面可能安装了微信,QQ,视频播放软件等。安装好的系统使用过程中又安装了其他软件,或者下载了文件,还可以将这个系统重新GHOST成一个镜像,当其他人通过这个镜像再安装系统的时候,则其他的软件也就自带了。
  普通的GHOST镜像就是一个文件,但是管理不方便。比如如果有十个GHOST镜像的话,你可能已经记不清楚哪个镜像里面安装了哪个版本的软件了。所以容器镜像有tag的概念,就是一个标签,比如dev1。0,dev1。1,production1。1等,凡是能够帮助你区分不同镜像的都可以。
  为了镜像的统一管理,有一个镜像库的东西,可以通过push将本地的镜像放到统一的镜像库中保存,可以通过pull将镜像库中的镜像拉到本地来。
  从镜像运行一个容器可使用下面的命令,如果初步使用Docker,记下下面这一个命令就可以了。
  这行命令会启动一个里面安装了mysql的容器。其中dockerrun就是运行一个容器;name就是给这个容器起个名字;v就是挂数据盘,将外面的一个目录myowndatadir挂载到容器里面的一个目录varlibmysql作为数据盘,外面的目录是在容器所运行的主机上的,也可以是远程的一个云盘;e是设置容器运行环境的环境变量,环境变量是最常使用的设置参数的方式,例如这里设置mysql的密码。mysql:tag就是镜像的名字和标签。
  dockerstop可以停止这个容器,start可以再启动这个容器,restart可以重启这个容器。在容器内部做了改变,例如安装了新的软件,产生了新的文件,则调用dockercommit变成新的镜像。
  镜像生产过程,除了可以通过启动一个docker,手动修改,然后调用dockercommit形成新镜像之外,还可以通过书写Dockerfile,通过dockerbuild来编译这个Dockerfile形成新的镜像。为什么要这样做呢?前面的方式太不自动化了,需要手工干预,而且还经常会忘了手工都做了什么。用Dockerfile可以很好地解决这个问题。
  Dockerfile的一个简单的例子如下:
  这其实是一个镜像的生产说明书,Dockerbuild的过程就是根据这个生产说明书来生产镜像:
  FROM基础镜像,先下载这个基础镜像,然后从这个镜像启动一个容器,并且登陆到容器里面;
  RUN运行一个命令,在容器里面运行这个命令;
  COPYADD将一些文件添加到容器里面;
  最终给容器设置启动命令ENTRYPOINT,这个命令不在镜像生成过程中执行,而是在容器运行的时候作为主程序执行;
  将所有的修改commit成镜像。
  这里需要说明一下的就是主程序是Docker里面的一个重要的概念,虽然镜像里面可以安装很多的程序,但是必须有一个主程序,主程序和容器的生命周期完全一致,主程序在则容器在,主程序亡则容器亡。
  就像图中展示的一样,容器是一个资源限制的框,但是这个框没有底,全靠主进程撑着,主进程挂了,衣服架子倒了,衣服也就垮了。
  了解了如何运行一个独立的容器,接下来介绍如何使用容器管理平台。
  容器管理平台初体验
  容器管理平台会对容器做更高的抽象,容器不再是单打独斗,而且组成集团军共同战斗。
  多个容器组成一个Pod,这几个容器亲如兄弟,干的也是相关性很强的活,能够通过localhost访问彼此,真是兄弟齐心,力可断金。有的任务一帮兄弟还扛不住,就需要多个Pod合力完成,这个由ReplicationController进行控制,可以将一个Pod复制N个副本,同时承载任务,众人拾柴火焰高。
  N个Pod如果对外散兵作战,一是无法合力,二是给人很乱的感觉,因而需要有一个老大作为代言人,将大家团结起来,一致对外,这就是Service。老大对外提供统一的虚拟IP和端口,并将这个IP和服务名关联起来,访问服务名则自动映射为虚拟IP。老大的意思就是如果外面要访问我这个团队,喊一声名字就可以,例如雷锋班,帮敬老院打扫卫生!,你不用管雷锋班的哪个人去打扫卫生,每个人打扫哪一部分,班长会统一分配。
  最上层通过namespace分隔完全隔离的环境,例如生产环境,测试环境,开发环境等。就像军队分华北野战军,东北野战军一样。野战军立正,出发,部署一个Tomcat的Java应用。
  实战案例
  有个blog的war,可以从这里下载
  http:demo。noseastchina1。126。netspringblog。war
  还需要一个jar,从这里下载
  http:demo。noseastchina1。126。netspringinstrumenttomcat4。2。2。RELEASE。jar
  1。将编译结果上传到对象存储
  登陆网易蜂巢,点击对象存储,创建桶。上传springblog。war到这个桶里面。
  对于spring,还需要springinstrumenttomcat4。2。2。RELEASE。jar放到这个桶里面。
  2。写一个Dockerfile
  由于这是基于Tomcat的,所以我们使用hub。c。163。comlibrarytomcat:8。0jre7作为基础镜像。这个镜像可以在镜像仓库里面搜到。
  通过ADD命令,将对象存储中的war,jar放入容器镜像中,并且修改权限。注意URL地址不是本例子中的地址,而是您自己的地址,可以在对象存储界面上通过复制地址得到这个地址。
  将catalina。shrun作为ENTRYPOINT。
  3。构建一个镜像
  在镜像仓库里面,创建镜像仓库,起个名字
  点击镜像仓库,点击构建镜像
  在本地选择写好的Dockerfile开始构建。
  构建成功则显示如下:
  4。创建tomcat服务
  在服务管理中,点击创建服务。
  填写名称testtomcat,选择无状态
  镜像选择前面构建的镜像。
  选择默认的规格,端口映射为8080映射为8080。
  点击立即创建。等待创建成功。
  5。创建负载均衡器
  在负载均衡页面,点击创建负载均衡,取名testtomcat。
  点击创建监听。
  取名testtomcat,监听端口8080,映射为testtomcat服务的8080。
  点击立即创建。
  6。访问页面
  使用负载均衡的IP地址加上8080端口访问tomcat。
  使用useruser登陆,创建一个博客。
  福利
  扫描添加小编微信,备注姓名公司职位,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
  2、公众号后台回复:工具,获取开源云监控工具详细资料!
  推荐阅读:一部刷爆朋友圈的5G短片,看完才知道5G多暖多重要!小团队的微服务之路女神节该送程序媛什么礼物?保命指南来了!程序员有话说Android告急!两会第一天,大佬们关于区块链的探讨,你要了解的都在这了
  云评测开发者最有用的开源云监控工具有哪些呢?这7款神器总有一款适合你!
  喜欢就点击好看吧

微信昨晚版本大更新又多了一个朋友圈微信又又又又偷偷更新了!就在昨晚,iOS版微信更新到了8。0。4版本。这也是近半个月内微信的第二次更新!最近微信程序员忙的够呛啊遗憾的是,8。0。4版本的更新目前仅……14Nginx入门教程Nginx的日志功能1。Nginx日志功能介绍通常,在生产环境中使用Nginx进行反向代理和负载均衡或者各种其他处理时,良好的日志记录是非常关键的一环。通过精心配置的Nginx日志,我们可以……2022年Kubernetes的5个趋势Kubernetes在成长,使用它的团队也在成长。早期采用者现在已经进入了自己的领域,能够基于经验和云原生生态系统的增长,以新的方式扩展Kubernetes的核心功能。我……瑞风新能源与长城华冠在新碳纤维物料电动车电池管理等方面建立全瑞风新能源1月19日晚间在港交所公告,公司与长城华冠订立了战略合作协议,在新碳纤维物料、电动车电池管理、智能汽车控制系统、新能源储备、新能源设备制造及相关业务范围的业务发展、潜……亿纬锂能下一个宁德时代概述公司主营业务锂电池作为新能源重要部品,正在深刻改变人类的生产和生活方式。锂电池行业处于快速发展的战略机遇期。公司的主要业务是消费电池,包括锂原电池、小型锂……Python和MongoDB其实很配MongoDB其实就是一个大大的JSON,在Python的世界里dict也是最吃香的类型,所以,他们天生就是一对。MongoDB的安装推荐使用Docker来部署管理,一行……闪耀颜值超强内心,荣耀50为生活添精彩随着智能化手机的快速发展,手机已经俨然成为了我们的生活必需品。不仅可以帮助我们云办公与云学习,而且还能娱乐身心,在生活方面,手机也能帮助我们快速付款、辅助记账等等。可以说不同领……诺基亚3310渲染图曝光,骁龙888Plus1亿像素,完全的曾经如日中天的诺基亚,如今却沦为路人机了,甚至不少年轻用户群体都不太了解这个手机品牌。不过诺基亚并没有放弃,网上频繁出现的诺基亚概念机、渲染图就足以说明一切。虽然诺基亚目前还没……横琴方案推动智慧口岸建设需求,盛视科技相关新专利获批经济观察网记者邹永勤横琴合作区方案将提升智慧口岸建设的需求,恰逢此时收获相关新专利的盛视科技能否凭产品优势坐拥区域红利?盛视科技(002990)于9月10日午间发布公告称……几款超好用的英语学习APP一点英语这个软件的理念是通过看短视频学习,视频内容多样,播放时可以选择只看英文,也可以中英双语,有跟读功能。视频时间不长,很适合利用碎片化的时间学习。它的背单词功能也是相……全世界都被骗到了?英伟达发布会数字替身出场14秒,暴露大问题这两天,一个震惊科技界的消息席卷全国。事情是这样的,英伟达最近发布了一部关于4月份GTC会议的纪录片,展示了技术人员如何通过Omniverse平台在现场制作各种3D模拟效果。这……MacBookPro配什么外接显示器比较好?如果是17款以后的MacbookPro,建议满足几个条件,首先肯定是4K分辨率,否则跟电脑自带的显示器显示效果有差距,第二是能够用TypeC口反向供电,减少一根线的体验真是好,……
英特尔致信供应商禁用来自新疆地区的劳工采购产品或服务蓝鲸TMT频道12月22日讯,英特尔在一封致供应商的信中表示,需要确保供应链不使用任何来自新疆地区的劳工、采购产品或服务。据悉,该信件发布多语言版本。据英特尔财报显……家里都装备上小米家电是怎样一种体验?作为一名家电行业的测评人,光今年我就已经测过很多小米旗下的产品,有小米空调,小米电动牙刷,小米智能门锁、小米吹风机等;还有很多小米生态链产品,比如鹿客指纹锁、素士吹风机、石头扫……中石化入局换电,未来新能源汽车可去加油站换电国家发改委、国家能源局发布了《关于进一步提升充换电基础设施服务保障能力的实施意见(征求意见稿)》。建议推行发展新能源充电配套,从公告看出,除了增加公共充电桩数量和布局外,推行换……S7GRAPH顺控编程系列连载3顺控器执行规则顺控器执行规则:1,每个顺控器都以如下情况开始:一个初始步多个位于顺控器任意位置的初始步只要某个步的某个动作(action)被执行,则认为此步被激活(active)……12月13日上市公司发布最新事项公告精选(四)1、万里扬(002434。SZ):面对新能源汽车快速发展的大趋势,公司不断加大新能源汽车传动驱动系统产品的研发投入,包括DHT混动系统、EV减速器、ECVT电驱动系统、三合一电……3K能让年轻人实现手机自由吗?近期,一个热门话题引起了网友热议3K能让年轻人实现手机自由吗?有的网友表示:完全可以,差不多够我用了;有的表示:现在好一点的手机都要超过3K,便宜的又卡又烫,一分钱一分货。……华为拿出最大诚意鸿蒙系统开源,欢迎友商采用众所周知,华为鸿蒙系统自从发布以来一直备受全球关注,从业内巨头到全球无数忠实用户。毕竟,一旦华为打造完成一套完整的生态体系,完全可能打破谷歌安卓、苹果在系统生态方面垄断的局面,……周小川澄清对数字人民币的多种误解来源:环球网5月22日,在2021清华五道口全球金融论坛上,中国金融学会会长,清华大学五道口金融学院名誉院长周小川就数字货币和电子支付系统问题表示,中国DCEP(数字货币……大举买入恒生互联网ETF的牛散疑现身晒出亏损账户截图每经记者:曾剑每经编辑:梁枭3月30日,一则两牛散现身华夏恒生互联网科技业ETF(以下简称恒生互联网ETF,代码为513330)前十大持有人的新闻火爆全网。据恒生互联网E……还在脑补!澳政府早禁了华为,澳媒现在又炒作中国原本可以命令华来源:环球网【环球网报道记者侯佳欣】2018年8月,澳政府以所谓国家安全为由禁止华为参与其国内的5G网络建设。时隔近3年,又有澳大利亚媒体开始旧事重提,还援引澳间谍说辞脑……小地方低薪但每天都生活的很开心VS大城市高薪但每天的压力大且谢谢邀我来回答。要看对自己人生的定位而选择吧。一个年轻人经过从小到大的苦读,每个人的世界观里都会有一个理想。追求成功的事业这是读大学仍至博士和出国学习者的奋斗目标,做为一……基于springbootspringcloud的集成大屏权限真正的大师,永远都怀着一颗学徒的心!开源的框架有很多,到底用哪一种有很多公司很苦恼。其实,适合的才是最好的。如果没有性能上的项目要求,一般的单体项目就能满足80的需求。今……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网