Azure 云平台相关容器技术服务的应用和落地,包括分析用户需求、针对新场景新应用和新业务中容器的应用制定相应技术方案,并推进落地。本文将告诉你如何帮助用户利用容器技术服务打造适合自己的开发生态环境,从而充分提高开发效率。

本场 Chat 不进行线上交流,只包含文章。


作者/分享人:赵文婧,微软中国有限公司创新技术合作事业部技术顾问。在计算机视觉领域有丰富的研究经验,目前在微软致力于推广 Azure 云平台上相关容器技术服务在中国区的应用和落地,包括分析用户需求,针对新场景新应用和新业务中容器的应用,制定相应技术方案,并推进落地。帮助用户利用容器技术服务打造适合自己的开发生态环境,从而充分提高开发效率。在技术解决方案中进行微软新技术与平台的推广与合作,构建开发者应用生态系统。

容器VS虚拟机

容器和虚拟机作为虚拟化技术,为我们提供了一个隔离的、独立的运行环境,但两者最大的不同之处是容量具有轻量级的优势,上图可以看到,每个虚拟机内部都有完整的操作系统,但一个主机上运行的多个容器是共享Linux内核的,容器和虚拟机的不同之处可以分为以下几点:

  • 操作系统:虚拟机有完整的操作系统,容器共享内核。

  • 体积:虚拟机包含完整的操作系统,才创建过程中要给其分配一定量的内存去支持运转,所以虚拟机比容器的体积更大,消耗资源更多。

  • 启动:在启动虚拟机的过程当中要从操作系统去启动,因此启动较慢,而容器的启动时间是秒级的。

Docker是容器技术发展过程的重要变革,其ICON实鲸鱼驮着非常多的集装箱,这些集装箱即容器,它带来的主要变革有:提供了一套标准化的流程,可以用这个标准化的借口去将自己的应用进行镜像打包,然后在不同的平台上部署和运行,Docker的寓意是码头工人,而它在我们部署运行的过程中起到的是绿色迁移作用。

若把容器迁移过程想象为以集装箱为核心的运输体系,那概念之间可以这样对应:容器是集装箱,云服务提供商是装载集装箱的港口,云服务商提供一些IaaS的服务可以理解为装载集装箱的拖船,同时在进行部署运行的过程中有一套标准化的流程,可以将其看做装运流程。

随着容器的不断发展,可以看到可以看到容器在云平台和物理机平台会形成一个绿色迁移发展,总结了容器的这两个非常重要特点之后,接下来看一下Azure都提供了哪些容器服务。

Azure提供最重要的容器服务名为:Azure Container Service,首先,对于云平台来说,它提供的很重要的资源是Infrastructure,无需购买虚拟机配置分布式集群,云平台提供了基础的框架如Azure上提供的虚拟机,它也会有其自己的Scale Sets,这些虚拟机会根据需求扩展VM的Sets,也会提供一些Availability Sts,帮助实现高可用。

有了基础设施的架构,即可方便地在云平台索取自己的一些计算机资源,在Infrastructure上,Azure Container Service提供了多种不同的编排工具,因为业务所用的容器是跨主机的,此时容器和容器之间需要进行通信、数据管理、网络管理等,编排工具可以帮助实现跨主机容器应用管理,Azure Container Service提供了三种主流的编排工具:Kuberntes、Swarm、DC/OS,可按需求自行选择。

众所周知,Kubernetes内部具有一些非常复杂的资源类型,虽然它提供了很多重要的功能,但在使用时也会非常繁琐,这里有一些工具可以帮助更好地使用Kuberentes,如DEIS这家公司的Helm和Draft。

  • Helm相当于软件包的管理器,类似于Linux上的Apt-Get或Yum,通过Helm可以自动获取一些名为Helm Chart的软件包去快速构建部署Kuberentes集群上的应用。

  • Draft能够自动识别应用的语言,帮助去写Dockerfile和Helm Charts以及快速的构建部署引用,同时,Kuberntes是谷歌根据多年的系统经验做的编排工具,Kuberentes的创始人后来也加入了微软支持Azure。

之前说到的Infrastructure和以上编排工具都通过Azure的ARM模型进行构建,大家知道AWS有Cloud Formation,阿里云上有Resource Orchestration,类似于这种模板文件,Azure上有自己的ARM文件,可以用一些很简单的输入,通过ARM模板在Azure进行部署,除了可以在Azure的Portal上或Azure CLI上去创建Azure Container Service,也可以通过ACS的Engine去创建,使用一些简单输入的定义文件用ACS Engine转化为ARM模板,从而快速去创建部署,ACS Engine现在是开源在GitHub上的,用户可以在其中快速更改自己的部署,从而进行一些自定义的容器服务,我们也希望这些开源的代码能够对社区做出贡献,也帮助我们ACS的服务更快更好地发展。

微服务+容器化

之前了解了Azure Container Service提供的一些服务,下面再分享下微服务和容器化如何更好的结合,在集群部署的情况下,Azure Container Service在哪些方面起到相关作用。

首先,单体的应用。在集群部署的过程中和容器化的应用在集群部署的过程中有什么区别,提到微服务,简单地说即应用程序有多少独立的组件,希望它们能够独立的进行开发测试以及运行,但假设一些单体的应用向把它部署到集群上时,为了实现高可用,将它在集群上的每个节点都进行部署,但对于容器化的应用,可以把这些应用拆分成多个独立的组件,每个独立的组件都能放在容器之中,为它提供一个独立的运行环境,此时,当应用的模块组件放在分布式集群这些节点上时,即可自动地去根据分布式节点的计算资源调整模块分布的位置,假如在ACS部署了一个集群,ACS会帮助做一些负载均衡及网络管理的设置,可以在容器集群上更好地部署容器化应用。

DevOps

说到DevOps,目前很难给它做一个具体的定义,但其主要目的是在应用开发测试以及运行过程中做一个更好地衔接,使应用更新能够快速地进行发布,从而提升提升效率,所以DevOps和容器的特性不谋而合。

通过容器技术可以达到一次编写部署,在这个基础上构建敏捷的DevOps开发若把应用构建在云上,使用Azure上的容器服务,有一些工具可以使用如:Azure Container Registry,可以在它上面构建私有的镜像仓库,其中存储着Docker格式的镜像,此仓库可以与Azure Container Service提供的编排引擎进行集成,如果想在Kubernetes集群上进行应用部署,可直接从这个镜像仓库中Push一个镜像在上面运行,这个Push下来的过程即可直接写在Kubernetes相关的部署文件当中。

镜像仓库是可以和Docker的镜像仓库兼容的,所以如果使用的是Docker工具,也可以进行无缝迁移,同时在Azure上使用容器化服务以及一系列持续集成工具链包括Visual Studio Visual Studio Team Service以及Visual Studio Code,通过一系列的集成工具链即可构建版本代码库,同时进行人员分配的管理调度,达到更好的持续集成、持续交付概念。

Demo:用ACS服务运行应用

接下来会为大家用比较多的时间演示Demo:在ACS上创建一个服务,并运行应用。

第一步:创建ACS的服务

有两种方式:

  • 在Portal里面进行创建。

  • 在Azure的CLI里面进行创建。

首先,这是Azure的Portal,进到里面创建Azure Container Service,可以自定义服务名称,因要使用Kubernetes,我定义这样一个名字,选择资源组,接下来定义Master节点的属性,可以看到很多编排工具可以选择,选择Kubernetes,重新再来看下,最上面可以选择三种不同的编排引擎,接下来我们会定义Master节点的用户名,然后用SSH的Key去登录我们的Portal。

将SSH的Key生成完毕后,直接粘进去,下面是在创建服务时需要一个服务主体,之前已经创建好了,使用它的ID和密码,这里可以设置Agent节点的数量以及设置VM的Size,我们确认信息,然后即可创建Kuberentes的集群了,同样还有另外一种方法可以进行Azure的CLI里,用Az Acs Create 这样的命令来创建自己的集群,那么在这里我们可以指定我们的编排引擎,接着指定我们要将集群放在哪个资源组里面。

在Azure平台里,其实都是通过资源组去管理服务,比如服务需要什么样的计算资源,都会统一放在某个资源组里,此时,让不需要这项服务即可删除整个资源组,然后去删除这些服务,下面定义节点的VM Size以及SSH Key的这些选项,进入Portal里看下之前创建好的Kuberntes集群,可以看到这已经定义了Agent Master这样一些节点,还包括一些负载均衡以及网络的组件,进到Cluster里面看下它的组成:一个Agent Pool,VM Size VM Count显示等,其实只要一些很简单的输入,即可快速地在Azure上创建一个ACS服务。

第二步:测试例子应用程序的本地镜像部署和运行

接下来将一个WEB的应用部署在集群中,首先将WEB的应用在本机上进行镜像的打包和运行,从这个地址Clone一个应用,确认Dockers是正在运行着的,查看本机上有哪些Docker镜像,可以看到目前还没有,接下来用Docker Compose这个命令去创建有关应用的所有进项,它会读取Docker Compose文件,进到Docker-Compose文件里查看,定义了两个服务,包括Azure-Vote-Back和Azure-Vote-Front,Redis是数据库的服务,Azure-Vote-Front是前端的投票应用服务。

在创建的过程中,会Push一些基础镜像扩,包括Nginx这个正在Pull下来的WEB Server镜像,还有数据库的镜像,生成应用自身的镜像,完毕后,可以看到本地现在有三个镜像,此时有两个容器正在运行,包括数据库和应用,再来确认下Docker Compose的文件中所确定的应用,本机和容器之间的端口映射,可以看到,进到本机8080端口可以运行WEB应用,这是一个投票软件,会在这个WEB上面进行投票,而后数据库会对这些投票进行记录,此应用现在已经在机器上运行成功,下面会将这个应用部署到刚才创建的集群上面。

第三步:创建Azure Registry并将应用镜像Push进去

在将应用Push到集成之前,首先需要创建一个Azure上的容器注册表,即创建属于自己的镜像仓库,可以看到镜像仓库已经创建完成,可以使用其中的Login Server和Password进行登录,现在需要获取此进项仓库的密码,成功后在本地登录到镜像仓库中,将之前创建的镜像Push到进项仓库中,在此之前,需要用Docker Tag命令为镜像打一个标签,之后用Docker Images确认,这是为了下次在进行应用更新时的版本控制。

现在把镜像Push到刚才创建的镜像仓库中,在Push的过程里会不断地显示Push的阶段,成功后进到Azure的CLI中查看已经Push成功镜像的List,此时显示了刚才大号标签的镜像已经Push到镜像仓库中。

第四步:用Kubectl连接到Kubernetes集群并在集群上运行应用

可以看到在这个应用下载的例子中,有一个定义Kubernetes部署的文件,那么在这个文件中定义了不同的Deployment和不同的Service,可以在这个文件中写清自己的部署,然后利用此文件创建Kubernetes的部署。

将这里使用的镜像更换成之前在镜像仓库中Push进去的镜像,更换镜像仓库的Loginserver,然后会用Kubectl Create的命令根据刚才所看到的的部署文件去创建部署和服务。

现在创建了WEB应用的部署和一些Service,接下来即可Get刚才创建的Service,然后同时用Watch参数进行监控,获得IP后,即可将Watch关掉,进入External的IP里查看应用的运行情况。

第五步:为集群做扩展

进入此IP后,即可看到UI界面,部署完应用后,如何给集群做扩展?有两个方面:包括Kubernetes的单元Pod扩展,也包括集群节点的扩展,依次来看一下:

Kubernetes里面的Pods的情况,现在给Azure-Vote-Front进行扩展,用Kubectl Scale的这个命令扩展副本数是5个,扩展完成后再用Kubectl Get Pods这个命令进行查看,此时Azure-Vote-Front就变成了需要的5个量,可以在更多的量上去做自己的应用计算资源的应用,接下来看一下刚才部署文件中它其实是设置了有关请求的CUP的量,M其实指的是一千分之一核这样的一个单位,请求CPU量为250M现在在500M之内,可以根据CPU的使用率去进行后面的扩展。

定义CPU的Pescent是50,即当CPU的使用率超过50%时,可以给它达到10个Azure-Vote-Front Pods的情况,可以通过这样一个命令来查看已经设置过的自动扩展状态,除了在Kubernetes的Pods做这样一个扩展,还可以在VM的Count这个层面上去做一个扩展,可以设置New-Agent-Count这个数字为4,此时会从刚才的3个Count编程4个Count。

第六步:应用更新后的快速发布

最后一步会为大家分享如何进行应用更新后的快速部署和运行,进到刚才下载下来的应用,进入UI定义文件,将刚才的Cats和Dogs更改成其他的单词,让它可以显示在UI上,以表示更新。完成后仍之前提过的Count应用重新给应用进行打包镜像,成功后此时将应用以一个新的标签来传到刚才的Registry里,显示刚才的Count结果,定义Count为4,此时编程了新的VMcount,相当于在Cluster理有4个可用的VM。

把刚才更新好的应用重新打一个标签:V2,发现已经定义成功,接下来把打好标签的镜像Push到之前创建好的镜像仓库中,可以看到其实有一些内容已经存在了,这是刚才扩展后的情况,对这个更新好的镜像进行重新部署,它提示这个镜像已经更新成功,重新看到Pods的情况是有一些已经进行更新了,从最右边的Age来看Pods的存在时间,下面重新Get Service来去查看这个应用的运行结果,登录到这个响应的IP里去查看一下。

可以看到现在选项已经编程了White和Black,从进行应用更新到快速在集群上部署运行,只需要很短的时间即可进行。

今天给大家介绍的内容主要是有关Azure Container Service上面的容器化应用。谢谢大家。


本文首发于GitChat,未经授权不得转载,转载需与GitChat联系。

阅读全文: http://gitbook.cn/gitchat/activity/598d0921c48c9d0bfb7c0485

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App , GitChat 专享技术内容哦。

赵文婧:深入了解 Azure 云平台容器技术服务相关推荐

  1. 【Microsoft Azure 的1024种玩法】五十九.基于Azure云平台快速搭建GitLab应用实现代码托管

    [简介] GitLab是由GitLab Inc.开发,一款基于Git的完全整合的软体开发平台,以 Git 作为代码管理工具并实现自托管的 Git 项目仓库,本篇文章主要介绍如何在Azure Virtu ...

  2. 【Microsoft Azure 的1024种玩法】六十八.基于Azure云平台使用Azure Virtual machines快速搭建Docker容器

    [简介] Docker 是一个开放源代码软件,主要应用于开发应用.交付应用.运行应用,Docker 可以将应用程序及其依赖项打包到可以在任何 Linux.Windows 或 macOS 计算机上运行的 ...

  3. 43个云平台通过云计算服务安全评估:阿里云、腾讯云、华为云、曙光云、新华云、金山云、电科云、浪潮云、紫光云、深信服等...

    公众号回复:干货,领取价值58元/套IT管理体系文档 公众号回复:ITIL教材,领取最新ITIL4中文教材 正文 近期,中共中央网络安全和信息化委员会办公室发布了<通过云计算服务安全评估的云平台 ...

  4. 多视角看云平台中的服务可用性

    近几年随着云计算的飞速发展,各大软件巨头厂商如微软.IBM等们也都纷纷向云计算转型.大中型企业即便没有上公有云也都在云计算方面布局,加大投入建设企业私有云.中小型企业都越来越热衷于将自己业务应用部署到 ...

  5. 西铁院云计算机室与应用,关于开展“云桌面应用”技术服务的通知

    为提高教师信息化技术水平,满足教师制作教学资源的需求,我中心特推出"云桌面应用"技术服务. "云桌面"系统可以切实解决教师教学资源制作中"软件获取.下 ...

  6. Azure云平台之游戏

    周末天气晴好, 闲来无事和同样混IT圈的媳妇一起参加了微软的云游戏开发者沙龙. 说实在的, 这也是笔者第一次走入微软一号楼. 真心够气派. 感谢微软保安小哥给安排了个车位, 不至于跑得太远. 总体说来 ...

  7. 免费试用Windows Azure云平台(无须提供信用卡)

    在微软认为,未来的互联网世界将会是"云+端"的组合.在以"云"为中心的世界里,用户可以便捷地使用各种"端"访问云中的数据和应用.这些端可以是 ...

  8. 2.0 解析系列 | 一文详解新一代OceanBase云平台

    小蚂蚁说: 9月21日,OceanBase 2.0 在云栖大会上重磅发布.我们将在接下来的时间里为大家持续推出 "OceanBase 2.0 技术解析系列" 文章,分别从 可运维性 ...

  9. .NET Core2使用Azure云上的Iot-Hub服务

    基于工业4.0大背景下的工业物联网是近几年内热门的话题,依靠信息化技术企业可以实现数字化转型,生产可以实现智能化制造,设备可以实现自动化运作.然而,海量的数据采集是整个建设过程的基础环节,如何处理与利 ...

最新文章

  1. 一、JAVA通过JDBC连接mysql数据库(连接)
  2. 测试Infineon车载LED驱动芯片TLD2131
  3. 后台开发必读书籍--大话数据结构
  4. php 数组压入,PHP 2、array_push和[]
  5. opengl三维图形绘制_Python matplotlib绘图示例 - 绘制三维图形
  6. File类对文件的操作应用
  7. sun键盘没有stop键_请教Sun键盘
  8. 流媒体服务器搭建详解
  9. 一些实用的方法整理(与语言无关)
  10. SOA平台之争:Java EE,还是.NET……
  11. [asp.net]自定义控件(数据绑定)
  12. 微博超话自动签到 php,微博超话自动签到器v1.0下载-我爱秘籍
  13. 如何做中台战略分析模型?
  14. 使用 freessl.cn 为自己的静态netlify站点添加 https
  15. 3dMax 单位设置(门)
  16. 学习总结-在Icepak模型中修改和增加零件
  17. Qml使用阿里字体图标库及FontAwesome字体图标库
  18. 邮箱服务之阿里云平台
  19. mysql 批量数据插入很慢(kettle 输入输出组件) 性能优化办法
  20. 申宝在线炒股医药板块大涨

热门文章

  1. java.awt包_java.awt包 简介
  2. 我们不想清楚Web2.0的得失成败,我们就无法成功开启Web3.0
  3. Docker 配置网络 - 使用 host 网络
  4. 圈粉年轻人的“机票盲盒”,爆款的逻辑是什么?
  5. 安装完Ubuntu 16.04之后要做的一些事
  6. 【游戏策划】之神仙道的计算公式
  7. 《真正热爱互联网的人,从业务的探索中获得乐趣》——Zappos
  8. GUI编程--PyQt5--QWidget2
  9. 对口升学计算机学校录取分,中职对口升学本科第一批院校录取分数线划定
  10. 负载均衡器技术Nginx和F5的优缺点对比