范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

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

华为HarmonyOS2最新升级进度公布8月20日,HarmonyOS官方微博公布了华为HarmonyOS2最新升级进度。据了解,即日起,荣耀30S荣耀30青春版荣耀X10荣耀X10Max荣耀Play4五款荣耀机型开启公运动听歌舒适安全之选SanagA7S骨传导耳机体验前言作为蓝牙耳机市场杀出的一匹黑马,黑科技加持的骨传导耳机受到广大都市人尤其运动爱好者的喜爱。利用骨传导技术,通过头骨颌骨把声音传到听觉神经引起听觉,同时又不阻碍外接声音的通过,保无人机航拍装备,头条号创作收益2021。8。19拍摄于玉东湖畔一寻找和创作素材1。发现美的眼睛无人机航拍是一个载体,更重要的是有一双发现美的眼睛,对自然,对建筑,对人文历史和景观2。主题创作挑选一个主题,通过周英特尔公布AlderLake架构,终于摆脱14nm,12代酷睿性能未来可期请点击关注,获取更多数码资讯8月19日,英特尔在其举办的架构日活动中,公布全新的架构AlderLake,并且透露出些许关于12代酷睿处理器的一些信息。全新一代的处理器将全面使用大小iPhone的siri有趣的冷知识随着iOS系统的更新,iPhone自带的语音助理Siri也变得越来越聪明。现在,Siri可以随时随地给你讲冷笑话了,帮你调节一下心情。方法很简单,只需要对Siri说,嘿Siri,给发布仅四个月就上架官方翻新?iMacM1优惠出售中苹果在今年四月份刚刚推出iMacM1版本之后,很快啊!就在今天又上架了其官方翻新版本。从这个速度来看,iMacM1简直是Mac中翻新版本上架最快的,仅仅发布四个月就推出了官方翻新版华为官方商城上架官翻机华为线上商城近日上架官方认证二手机专区。页面显示,目前在售的二手机型号有华为P30P30Pro,以及Mate30Mate30Pro的4G和5G版,共6个型号。这些机器均显示为二手9美商海盗船发布HS80RGBWIRELESS高品质无线游戏耳机美商海盗船宣布,推出旗下全新的高品质无线游戏耳机HS80RGBWIRELESS。新产品搭载了美商海盗船的SLIPSTREAM低延迟无线传输技术,在外观上也采用了全新的设计,同时拥有助听器耳模主要作用是固定助听器防止声反馈和佩戴舒适等,那什么时候需要更换耳模?你好助听器耳模主要作用是固定助听器防止声反馈和佩戴舒适等,那什么时候需要更换耳模?如果耳模老化发黄或者耳模部分有破损断裂的,可能会导致啸叫或者佩戴舒适度差,这个时候就可以重新制作耳美团骑手超时1小时才送达,而且拒绝道歉。我不该说他吗?你有投诉要求道歉和拒收的权利,但骑手没有义务配合你。因为骑手按平台规则办事,拿平台给的劳务费,跟客户没有直接关系。有事请找平台,别有事没事找骑手。你有什么权利说他?如果超时你可以系OPPOEncoAir今年最受学生党欢迎?深度评测找原因说最受学生党欢迎违反广告法,是不是最受欢迎我也不知道,但是说很受学生党欢迎一点问题没有,在说这个问题之前首先要说的是TWS耳机目前特别受消费者欢迎。根据知名市调机构Counterp
对讲机为什么用半传输?对讲机为什么用半传输?所谓的半传输用准确的专业名词就是半双工。市面上对讲机除航空警用对讲机外,其他的主流对讲机分为三大类,其中有模拟对讲机公网对讲机和数字对讲机。模拟对讲机价格优势滴滴旗下25款App又遭下架,花小猪打车或成滴滴资本独苗?滴滴夜无眠!7月9日,据网信中国消息,因滴滴企业版等25款App存在严重违法违规收集使用个人信息的问题。依据相关规定,通知应用商店下架滴滴25款App,要求参照国家有关标准,认真整Aquatiz菱越智能隐藏式马桶卫浴升级智享科技生活节奏加快,在仅仅几平方的家庭卫浴空间能给你带来前所未有的生活体验,向着独一无二的私人空间升级。2021中国家庭卫生健康生活白皮书也于6月正式登刊。调查中显示,70的受访者表示在微信支付有密码,为什么在超市不用输密码就把钱收了呢,谁帮忙解释一下谢谢?帆辰科技专注于科技资讯,带你遨游科技世界!微信支付有密码,为什么在超市不用输密码就把钱收了呢,对于微信支付的时候我们确实需要输入支付密码才能够进行支付,而我们在超市购买东西的时候,今日头条和今日头条极速版有什么区别?你怎么看?今日头条和今日头条极速版区别之处如下1安装包大小不同今日头条普通版安装包是22。8M,而今日头条极速版安装包是4。7M。2占用运行内存不同今日头条普通版比极速版占用内存大,极速版仅Gopro和手机相比拍摄的视频有多大的差距?gopro这类运动摄像机,经常会用来和手机对比拍摄视频的质量。其实如果从拍摄视频的画质上来看,gopro与手机属于一个档次的,并没有因为它是一个专门的摄像机,画质就有多大的优势。有哪吒汽车变局违规收集信息被要求整改,两个小目标待实现日前,网信浙江对57个违规APP进行了对外通报,其中包括国内造车新势力汽车品牌哪吒汽车旗下哪吒汽车APP,该软件由合众新能源汽车有限公司开发运营。通报显示,哪吒汽车APP(版本3。MiniLED显示屏明年将用于11英寸iPadPro和MacBook图片来自VjeranPavicTheVerge根据分析师郭明锜的一份研究报告,苹果计划在今年12。9英寸机型上引入该技术后,在2022年为11英寸iPadPro添加一个MiniLE资讯丨骁龙895将采用X2大核,安兔兔跑分有望上百万在前段时间,爆料人i冰宇宙曾表示,骁龙895将会由三星4nm工艺代工,而骁龙895则将会由台积电4nm工艺代工。大家都喜欢用骁龙895来称呼这颗代号为SM8450的新一代骁龙旗舰S华为屏下镜头专利曝光!同质化愈加严重,但这确是好事自中兴发布全球首款屏下镜头手机后,各大手机厂商们并没有跟随这股潮流,而是选择了深耕调教。时隔近一年时间,各大手机厂商也在屏下镜头技术方面有了全新突破,近日华为一项屏下镜头专利的公布还在挤牙膏?高通新芯片曝光,不敌苹果A14新一代牙膏厂高通之前提起牙膏厂这个称号,可能大多数人第一时间想到的都是英特尔,因为这些年其发布的处理器产品,就像挤牙膏一样慢吞吞的,根本没有太大的变化和创新。而现在看来,又一美国巨