You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
16 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 02 | 云虚拟机(一):云端“攒机”,有哪些容易忽视的要点?
你好,我是何恺铎。
前一讲我先从数据中心的角度入手和你讲解了云计算中“区域”和“可用区”的概念帮助你建立起了大局观。今天我们就开始进入微观层面来介绍和讨论IaaS中最重要的核心服务云虚拟机。
我想,你可能对虚拟机并不陌生,现在虚拟机的应用已经很普遍了。传统的物理服务器上通过安装虚拟化软件,就可以虚拟出多个互相隔离的虚拟机,来帮助我们提高资源的使用效率。云计算中的虚拟机,本质上也是如此,也是底层计算存储能力的抽象和开放。
所以你也许会问那么云虚拟机到底有什么值得讨论的呢看上去也就是选取CPU、内存、硬盘几大件然后启动后登录使用似乎没有什么新鲜的东西
没错,云虚拟机粗看起来和传统服务器较为类似。但当你对它的应用逐渐深入、规模不断加大时,就非常有必要去深入了解云虚拟机的特点了,因为你开始需要针对不同的场景进行选型,也要在性能和成本间找到最佳的平衡,让你的应用效益最大化。
因此,我接下来就会用三讲课程,为你详细讲解下云端虚拟机的“门道”。
## 云虚拟机到底是什么?
云虚拟机,顾名思义,是在云端虚拟出的服务器。这个服务器你可以完全地控制它,从底层操作系统到安装上层应用。
站在技术实现的角度来讲虚拟化技术是云虚拟机服务的核心它本身是一个非常宏大的技术领域。比如你可能听说过Xen、KVM、VMWare、HyperV等等虚拟化产品和技术。云计算中所使用的虚拟化技术也大都是从这些虚拟化实现方式演化而来的。
作为开发者,我们当然不需要成为虚拟化技术专家。我们只需要知道,云端的虚拟化技术在不断进步和发展,使得云端虚拟化的性能损耗在不断减少、资源利用率不断提升就可以了。但你很有必要去了解云计算中虚拟机的体系结构,这也是云虚拟机与传统虚拟机的最大不同。
云虚拟机的体系结构,用一句话来概括一下,就是全面解耦的**计算存储分离**的设计思想。
小提示:计算存储分离是云计算设计理念中最重要的思想之一,不仅仅体现在虚拟机上,也体现在其他的云服务架构中。我们今后还会不断涉及。
传统的虚拟化,往往是对单一物理机器资源的纵向切割,计算、存储、网络等各方面的能力都是一台物理机的子集。因此,从可伸缩性的角度来说,传统虚拟机存在较大的局限,当物理机的局部出现故障时,也很容易影响到里面的虚拟机。
得益于云端大规模的专属硬件以及高速的内部网络云虚拟机的组成则有所不同。除了核心的CPU与内存部分仍属于一台宿主机外它的网络、硬盘等其他部分则可以超脱于宿主机之外享受云端其他基础设施的能力。大致架构如下图所示
![](https://static001.geekbang.org/resource/image/78/f9/785d6518852a25283a5337646a19a1f9.jpg)
你要注意的是,这里我所给出的仅仅是一个简化加工之后的示意图。实际的云计算内部实现,会远比这个要复杂和精妙。不同的云的内部,也会有许多不同的专用硬件各显神通。
所以,云虚拟机,与其说是由一台宿主机虚拟而成的,不如说是云数据中心中的不同部分一起协作,“拼凑”而成的一台机器。这样虚拟出来的机器,我们在使用感受上其实与传统服务器并无不同,但在可扩展性和故障隔离方面,它就具有很大的优势了。
举个例子来说一台云虚拟机它可以同时挂载很多硬盘还能够插上很多“网卡”拥有多个不同的外部IP。这就是充分解耦带来的好处。
各家厂商的云虚拟机服务的名称会略有不同阿里云称为云服务器ECSElastic Compute ServiceAWS称为EC2Elastic Compute CloudAzure就叫Virtual Machine腾讯云则叫做云服务器CVMCloud Virtual Machine等等。
这里,你需要注意将虚拟机服务和一些建站类服务区分开来,因为它们有时在名称上可能比较类似。比如“云主机”这个叫法,很多云上就是指云虚拟机,在个别云上对应的却是简单建站服务,请你注意不要混淆。
扩展建站类服务主要是提供一些网站的托管运行环境如PHP。它是一个相对受限的环境严格来说属于PaaS服务的范畴比较注重易用性。而虚拟机呢则提供了一台真正意义上的服务器从操作系统到上层应用都可以自己控制比起建站类服务来说要开放、通用得多。
虽然各个云厂商对云虚拟机有不同的叫法但它们的产品形态是比较一致的。当你来到虚拟机服务的门户一般会有一个列表界面能够列出当前你拥有的所有虚拟机你可以按照不同字段过滤、删选、排序。你还可以点击某个VM查看详情界面一般会展示出VM的常用运行指标。
![](https://static001.geekbang.org/resource/image/f8/91/f86e8298381c2bfcf7d101ff3ea92a91.jpg)
AWS EC2自带的指标监控
## 云端“攒机”实战
讲到这里,你已经基本了解云虚拟机的概念了。接下来,让我们进入云虚拟机的实际操作环节。
所有的云上创建虚拟机时一般都会有相当贴心的向导你可以在虚拟机门户上点击“创建”然后按照步骤一步步进行即可。今天我们就以在阿里云上创建Linux虚拟机为例帮你把“攒机”时最主要的环节串一串同时顺便给你介绍一下那些在“攒机”时容易被忽视但又非常关键的要点。
小提示:在本次实验中,建议你选择“按量付费”的付费模式,这也是云计算的经典付费模式。这种模式是按虚拟机的使用时间付费,比较适合短期实验。当然,更多付费模式都各有特点,后面的[第4讲](https://time.geekbang.org/column/article/208917)中我们会进行比较和探讨。
**第一步,当然是选择和确认虚拟机的所在区域**。区域的概念,我在上一讲中已经提到过,它决定了虚拟机的地理位置。
![](https://static001.geekbang.org/resource/image/e9/99/e96a0f7c49173b188154929bfbaa9499.jpg)
小提示在部分云中区域是顶级概念指定新建虚拟机的区域需要你事先在门户的右上角进行选择和切换如AWS。
这样,新建的虚拟机就会处于你当前选择的区域。你还可以指定区域内的特定可用区。
**随后,就是虚拟机的配置确认环节**也就是我们通常所说的什么型号、几个核、几G内存的选择。配置的选择无疑非常重要我会在下一讲着重介绍这里我们先不妨选择默认的2核8G配置。
![](https://static001.geekbang.org/resource/image/90/b6/9063f760c1a2bc2fe49e266534ed29b6.jpg)
接着,就有你需要注意的一个要点:**选择操作系统镜像**。在这里你可以选择虚拟机所要安装和使用的操作系统比如常见的CentOS和Ubuntu同时你也需要选择这个系统具体的版本号。
在操作系统的列表中你往往会看到厂商的自有操作系统比如阿里云的Aliyun Linux、AWS的Amazon Linux等。这是一个很有意思的事情。既然已经有诸多流行的Linux发行版了为什么云厂商还要推出自己的Linux版本呢我们什么时候才应该考虑使用它们呢
![](https://static001.geekbang.org/resource/image/61/d9/61b6f428f8f492ba33a17c641af510d9.jpg)
你可以这样理解:
* 首先厂商的Linux版本在理论上会和自己云上的硬件有更好的适配这样能够更充分地发挥相关硬件的性能。一般来说厂商也会在自己的云上进行充分的测试和验证。
* 其次,在内核和基础组件的选择上,厂商专有操作系统往往会根据自己的需求判断,来进行一些取舍和裁剪,所以一般会有一个相对苗条的身材,占用比较小的磁盘空间,同时启动速度更快。这是一种更适合云环境的选择,尤其是当你的虚拟机集群规模较大时,就能够显出规模经济效应了。
* 再次厂商操作系统会预装和云的使用操作方面的一些软件包和SDK能够为你提供便利。比如说厂商一般会预装该云的命令行工具CLICommand Line Interface像是AWS CLI等。
* 另外当然也有云厂商出于“自主可控”方面的考虑想拥有自己能完全控制的操作系统不但技术上可以自主演化还能防范一些商务合作上的风险。厂商自家的PaaS服务它的底层也一般是使用自己的操作系统。
所以如果你希望操作系统有更好的软件“兼容性”或是公司有统一的标准就可以选择熟悉的老牌Linux系统而如果你有一些大规模、注重性能的业务不妨考虑尝试下厂商的Linux操作系统。
**接下来在系统盘方面我们选择默认给出的40G“高效云盘”即可**。云硬盘的故事非常精彩,我们[第5讲](https://time.geekbang.org/column/article/210423)中会专项讨论,这里你只需要保持这个默认选项就可以了。
![](https://static001.geekbang.org/resource/image/33/31/334c79beaad866a9f85b09fdf6d3aa31.jpg)
**点击“下一步”,我们来到网络和安全组的配置页面**。在这里你可以配置私有网络、IP、带宽等重要的网络选项。虚拟私有网络VPC同样是一个很大的话题我们会在[第6讲](https://time.geekbang.org/column/article/211071)展开学习。
这里我们简单起见请勾选“分配公网IP地址”的选项。这样创建的虚拟机会自动被分配一个公开IP地址便于我们稍后从自己的电脑直接发起连接。
![](https://static001.geekbang.org/resource/image/e5/0e/e5b2880979b3c1a5019a80becb0c600e.jpg)
今天我想着重讨论的另一个重点,是接下来选项中的**网络安全组**Network Security Group, 简称NSG。如果这里配置不当就会直接影响虚拟机的使用。很多新同学由于不太了解这个概念常常会造成无法远程连接登录的情况。
你可以把网络安全组理解为一层覆盖在虚拟机之外的网络防火墙。它能够控制虚拟机入站、出站的流量,并能根据协议、端口、流向等所设定的规则,来决定是否允许流量通过。
所以某种程度上网络安全组和操作系统中我们熟知的防火墙如Linux的iptables和Windows防火墙一样都起到网络安全防护的作用。
但你需要注意的是它们的区别网络安全组并不工作在操作系统层面而是在操作系统层之外是额外的一层防护。非法流量在尚未到达OS的网络堆栈之前就已经被它阻断了。所以**NSG的一个优点在于它不会影响VM的性能。**
另外,**网络安全组是一种可复用的配置**。如果你有大量虚拟机适用于同样的网络控制规则,那么,你就能够很方便地让它们使用同一个网络安全组,这样你管理起来会非常方便。
网络安全组是绝大多数云都支持和实现了重要特性,它体现了云计算中**软件定义网络**的特点。网络安全组非常灵活,你可以随时更改,规则也会动态生效。
小提示当你在排查虚拟机的连通性相关问题时比如假设你的网站或API无法被访问那你一定要记得检查网络安全组中的设置查看它相关的端口和协议是否已经开放。
![](https://static001.geekbang.org/resource/image/4a/ab/4ae25a707929d30b41c1d91c0803dfab.jpg)
OK回到我们虚拟机创建的流程所以我们要创建或使用一个至少开放了**22端口**的网络安全组以便我们能够通过SSH连接上去。阿里云中就提供了方便的“默认安全组”我们只需要勾选需要开放的端口就会帮助我们生成一个安全组实例并对这台机器启用。你也可以事先手工创建一个安全组并在此处选择。
![](https://static001.geekbang.org/resource/image/99/4e/998ab7dd2987d2c2adb7aeedb05cca4e.jpg)
**再点击下一步,我们就进入了“系统配置”阶段**,在这里,你可以为实例命名,指定用于登录的用户名密码或密钥对等,这里比较简单我就不再赘述了。
![](https://static001.geekbang.org/resource/image/7a/91/7aefdff1f6f390eab112e0c612910991.jpg)
然后,暂时跳过一些可选的高级设置,**确认订单后,按下“创建实例”,就可以等待虚拟机的生成了**。一般数十秒至数分钟之内,一台崭新的云服务器就会就绪,进入运行状态。
![](https://static001.geekbang.org/resource/image/3d/03/3d6eb8164a7096fad0e1bfca06a88b03.jpg)
此时你可以通过SSH连接上虚拟机的公开IP使用hostnamectl命令查看一下虚拟机的信息一切正常。
```
client@clientVM:~$ ssh -i ./geektime-ali-sh.pem root@101.133.209.214
Welcome to Alibaba Cloud Elastic Compute Service !
[root@my-ecs-vm1 ~]# hostnamectl
Static hostname: my-ecs-vm1
Icon name: computer-vm
Chassis: vm
Machine ID: 201908292149004344218446xxxxxxxx
Boot ID: 2228122a7f3c4b4eb5756824xxxxxxxx
Virtualization: kvm
Operating System: Aliyun Linux 2.1903 (Hunting Beagle)
Kernel: Linux 4.19.57-15.1.al7.x86_64
Architecture: x86-6
```
成功地登录上去之后你就可以正常使用这台机器了。比如通常我们会使用yum或apt等包管理器进行一些应用软件的安装。
到这里我就带你初步体验完了云虚拟机的创建过程。VM类服务的本质就是租用我们通过在门户上的简单操作就能够完成一台定制服务器的“租用”过程。
从原理上说,这和租户从房东那租房子其实没有什么两样。而且云上的租用相当便捷,动动手指你就能轻松完成。唯一不同的是,云厂商一般不会把租客“扫地出门”,只要你按时付费,一般不会出现不允许续租的情况。
## 课堂总结与思考
在今天这一讲中,我先帮助你了解了云虚拟机的一些理论知识,尤其是一些体系结构方面的特点。然后,我们进入了创建云虚拟机的实操环节,了解了相关的流程和步骤,也讨论了其中所牵涉的一些注意事项。**我强烈建议你自己也动手操作一下,完成从创建到连接的全过程,形成一个直观的感受。**
我们把这一讲的要点总结如下:
* 云虚拟机是最重要的IaaS服务之一它基于计算存储分离的架构进行构建
* 云虚拟机的创建过程,由地域、机型、操作系统、存储、网络等多方面选项共同构成;
* 云虚拟机可使用云厂商自有操作系统,与云有较好的适配;
* 网络安全组是保护云虚拟机的网络防火墙,可以同时应用于多个虚拟机。
在今天我们实践的过程中,也引出了若干重要的概念和选项,如机型配置、云硬盘、云网络等等。后续我们会逐个地展开讨论,敬请期待。
**最后,给你留下两个思考题**
* 在上面的实验当中为了便于连接我们给机器自动分配了公网IP。在生产环境中为了安全性考虑应该尽可能避免给虚拟机分配公网IP那么这时你如何连接到这些机器呢
* 暂时不再使用的云虚拟机,和传统服务器一样可以“关机”。关机状态的云虚拟机仍然会存在于虚拟机列表中,随时可以再启动。那么,关机之后它还会继续收费吗?
欢迎你在留言区和我互动,我会第一时间给你反馈。如果觉得有收获,也欢迎你把这篇文章分享给你的朋友。感谢阅读,我们下期再见。