云架构-虚拟化技术

在自己接触的项目中经常听到docker容器、k8s等内容,自己虽然了解一点但并不算特别清楚。刚好最近参加了华为云架构的培训,打算记录一下自己的收获。
这一周讲的内容主要是关于虚拟化技术,包括虚拟机、华为云中各种云产品的使用、容器化技术。培训中非常注重实际操作,包括用HCS管理FC虚拟机,在华为云搭建一个wordpress网站,搭建本地的docker仓库等。

虚拟化

为什么要虚拟化

  • 提高资源利用率
  • 资源隔离
  • 方便运营管理

一台服务器上往往有几十个cpu,几百上T的内存,还有多张GPU,如果只在上面部署几个应用,跑几个程序显然还用不完。而且
不同的应用之间应该相互隔离开来,保证数据和网络安全。

大家在各种云平台中购买的计算机实例,都是通过虚拟化技术生成的,

虚拟化的发展

  • 完全虚拟化
    以华为的FusionCompute, Vmware Workstation /Server为代表;
    完全虚拟化的最大优点是操作系统无需任何修改就可以直接运行。此外完全虚拟化还可使实现同时支持多个操作系统。但是操作系统必须要支持底层硬件(例如 PowerPC)。

  • 半虚拟化
    以Xen, Hyper-V为代表;
    半虚拟化比完全虚拟化效率更高,速度更快,提供了与未经虚拟化的系统相接近的性能,缺点是必须修改客户操作系统,因为半虚拟化为了提高效率,必须要让Guest OS本身意识到自己运行在虚拟机上,所以在Guest OS的内核中需要有方法来与hypervisor进行协调。

  • 操作系统虚拟化
    以docker、VMware ESX/ESXI为代表;
    操作系统级虚拟化技术直接和物理设备进行交换,极大的提高了系统性能。缺点是需要对对操作系统的内核进行一些修改。

此外在这里还提到最原始的硬件级虚拟化。

FusionCompute

FusionCompute(FC)是华为提供的虚拟化套件,是基于KVM开发的,它由两大部分组成:CAN-计算节点,VRM-虚拟资源管理。

FC支持对多种架构服务器的虚拟化,例如x86和arm架构,可以实现对资源的超分配,实现动态资源调度,电源管理。

FC不仅可以CPU、内存等资源进行分配,也可以GPU资源进行管理和分配。前提是需要对应的GPU支持虚拟化。

FC整体架构

FC软件架构

FC管理界面

华为云

之前自己做毕设的时候就买过华为云服务器,当时只觉得的很多云产品都,操作云服务器时没有掌握底层的逻辑。
在这次实践中,我了解到一些常用的云产品:

  • VPC虚拟私有云
  • ECS弹性云服务器
  • RDS云数据库
  • OBS云对象存储
  • EVS云硬盘
  • SFS弹性文件服务

并在云上搭建了一个基于wordpress的个人博客。

为了使用好这个云服务,需要弄清楚他们是在什么场景中使用的,在购买时所填写的参数是啥。

例如在实验之前,老师首先就让我们先创建好VPC虚拟私有云,这个相当于一个局域网,但你购买云服务器、数据库、硬盘等如果设置在同一VPC下,那么他们可以直接通过内网IP互相访问,并且不会浪费你的带宽,也就帮你省钱了。

接下来是需要创建安全组,安全组是一个端口白名单,规定只有哪些端口可以访问,所有涉及到端口访问的云产品(e.g. ECS、RDS)都需要设置安全组,有时候你在服务器上启动了什么服务发现访问不了,大多都是安全组没设置好。
一些常见的需要放行端口:

  • 80 nginx
  • 22 ssh
  • 3306 MySQL

做好前面两步准备就可以创建服务器实例ECS了。本质上这些云厂商提供的云服务器都是通过前面章节的虚拟机提供的。其中购买时重要的参数就是需要选定好合适的资源:几核,几G的内存,网络带宽多少,需不需要GPU。我们在做实验时选择的是按量收费,还有包年包月收费。
还有需要提醒的是,所有的这个云产品需要在同一个域Region下才可以相互访问到,或是通过公网IP。什么是域,就是你选择是北京1、贵阳3这种。像是我创建了一个北京1区创建了VPC和安全组,那么我在创建ECS时也需要在这个区域创建才能看到之前创建的资源。

容器

容器是一种操作系统虚拟化,是一个轻量、可移植的软件打包(软件+依赖)技术。

容器特性:

  • 打包
  • 隔离性:通过Linux中的namespace进行隔离,cgroup进行资源分配
  • 高效
  • 职责分明

docker中几个概念之间的转换

容器对比虚拟机

共同点
容器和虚拟化技术都属于虚拟化技术,容器和虚拟机都是为应用提供封装与隔离。

区别
- 隔离策略不同,容器是进程级的资源隔离,虚拟机是操作系统级的资源隔离。
- 在资源损耗上,容器一般资源损耗率在在1-5%,虚拟机在5%-15%。
- 在启动速度上,容器可以到达秒级甚至毫秒;而虚机大多需要几分钟。
- 在高可用策略上,容器资源是弹性伸缩的,负载均衡,虚拟机则是通过备份、异地容灾和迁移实现资源高可用。
容器和虚拟机对比

容器和虚拟机架构对比

容器中的网络

容器中存在3中网络

  • host
    使用宿主机器的网络,所有指定host后还使用端口映射就失效了;
    用于性能高要求的场景;

  • bridge
    默认的网络,用户也可以自定一个桥接网络同一主机上的docker默认可以互通,通过bridge相当于交换机。

  • none
    完全隔离,一般用于高度耦合、安全性要求高的应用

3种网络模式

小结&思考

这次的培训收获还是挺大的,自己对虚拟化技术有了更深的了解,培养了虚拟机、容器、云服务的操作实践能力。

之前自己也学过一些docker的知识,当时自己以为容器就是虚拟化技术的未来,虚拟机那都是过时的技术了。但其实这几种虚拟化技术之间并不是替代的关系,而是相互配合。目前几乎所有你在云厂商那购买的云服务器实例都是通过虚拟机技术创建的;开发者和用户对于高可用的需求不断提高,云原生技术的使用更加广泛,容器技术作为云原生的基石也被大家广泛应用。容器技术更多的是为了应用的发布和部署,而虚拟机由于其灵活性对资源的更好的控制。

在企业实践中,我们开发的AI中台需要能给AI厂商提供训练模型的镜像,其中就需要控制这个训练镜像的资源使用,尤其是GPU算力。我之前一直纠结于如何控制容器只使用指定几个G的GPU呢?在华为云等平台中不是都能购买指定资源的算力服务器嘛?到现在我知道了:云厂商是同过虚拟机的方式进行资源隔离的,像FC可以实现对底层异构资源的虚拟化了。对于这个问题我现在能想到比较好的办法是:在虚拟机层面进行资源的隔离和动态扩缩容,然后保证这个虚拟机上只跑一个容器,这样既能方便应用的分发又能对资源进行动态管理。


云架构-虚拟化技术
https://chris-tang6.github.io/2023/11/25/云架构/
作者
Tang Wuguo
发布于
2023年11月25日
许可协议