软件实施与运维————学生一课一得

      对于 Linux 而言,它在虚拟环境下的性能会优于其他操作系统。即便你可能会犹豫是否在物理机(裸金属)上安装 Linux 系统,你仍然可以在虚拟机中安装一个性能几乎和物理机一样好的 Linux 系统。

当然,这并不意味着宿主系统为 Linux 时你就不能在虚拟机实例中安装 Linux 了。更何况,你在虚拟环境下使用 Linux 系统有许多好处。大致如下。

在虚拟环境下运行 Linux 之前的注意事项:

在虚拟环境下运行 Linux 或许并不是艰巨的任务,但仍有以下几点你需谨记。

1.虚拟机的性能取决于宿主机的性能,如果你并没有足够的系统资源分配给虚拟机,那么虚拟机的使用体验注定不会很好。某些特性仅在物理机(裸金属)上生效,包括硬件加速以及图形(显卡)驱动等。密集的磁盘 I/O 任务性能会十分受限,例如游戏测试场景。

2.用户的 Linux 虚拟机实例体验会根据你所使用的虚拟化程序而发生变化,这些虚拟化程序包括 VMware、VirtualBox、GNOME Boxes 以及 Hyper-V 。此外,你应当列出你的需求,并根据这些需求选定适当的虚拟化程序来运行你的 Linux 实例。

十条在虚拟环境中运行 Linux 的优点

尽管运行虚拟化 Linux 实例极具吸引力,你仍然应当首先考虑当前使用的宿主系统中已有的选择。例如,如果你不需要图形化桌面,或许利用 Windows 操作系统中​ 的 WSL 安装 Linux 就 ​可以满足你的需求。

一旦你确定了使用虚拟机,那么这些优点将会如影随形:

1.部署简便

            与在传统物理机(裸金属)上安装 Linux 相比,在虚拟机中部署一般会容易许多。对于基于 Ubuntu 的发行版而言,像 VMware这样的虚拟化程序会提供一个 快速安装 的选项,你仅需输入用户名和密码,其余过程将自动完成而无需其他操作。你无需手动设置分区、引导程序以及更多高级设置。某些情况下,一些发行版的开发者会同时提供针对特定虚拟机的预构建镜像,只需打开就可使用。这就好像一个便携式虚拟机镜像,随时可以开箱即用。例如,在这里你将看到如何在虚拟机中安装 Arch Linux 发行版。对于其他的发行版,你或许仍需要进行一些配置,但一般都会有快速安装的选项令你可以轻松部署。

2.不会影响宿主机

       对于虚拟机,你可以更为随心所欲地使用,因为虚拟机系统和宿主机系统是隔离的。很多时候,如果你并不熟悉 Linux 系统,你很可能会把配置弄得十分混乱。所以在虚拟机里,你可以随意尝试而无需担心是否会影响到宿主机系统。换句话说,任何虚拟机的操作都不会影响到宿主机,因为它们是完全隔离的。故此,虚拟机是你最好的试验场,尤其是对于一些激进或具有破坏性的试验。

3.资源可高效共享

        如果你有十分充裕的系统资源,你可以使用虚拟机运行其他任务,从而充分利用起来这部分闲置的系统资源。例如,如果你需要一个十分私密的浏览环境,虚拟机将为你阻挡一切针对宿主机的追踪器。这可能略显牵强,但这仅仅是一个例子。基于这样的想法你将可以充分利用全部的系统资源。而对于双启动方案,你需要在单独的磁盘上在 Windows 之后安装 Linux,或者在 Linux 之后安装 Windows,你需要为你的任务锁定相应的资源。 但利用虚拟机,你无需锁定部分资源也可以使用 Linux ,也不必为了特定的任务而临时共享资源,这样会方便许多。

4.多任务体验更好

       有了资源共享机制,多任务会前所未有的容易。在双启动的场景下,你需要来回重启切换才能使用 Linux 或 Windows 。但如果使用虚拟机,你几乎不再需要 双启动,两个系统将无缝协作并完成多任务。当然,你需要确认你拥有足够的系统资源和额外的硬件(例如双显示器)来更高效地使用。而多任务的潜力也因 Linux 虚拟机的存在而愈发强大。

5、软件测试更为便捷

有了虚拟化,你将可以创建大量的 Linux 实例,来模拟特定的使用场景,并对软件进行测试。例如,你可以在不同的 Linux 虚拟机中同步测试不同的软件版本。这有丰富的使用场景,包括对开发版软件进行测试以及 Linux 发行版的早期测试等等。

6.开发更为便捷

当你在学习编程或者刚加入一个软件项目的开发的时候,你会希望拥有一个没有任何冲突和错误的开发环境。在 Linux 虚拟机里,你可以从零开始搭建一个不会与已经存在的环境冲突的开发环境。例如,你可​ 以在 Ubuntu 上 安装并测试 Flutter 。 ​如果环境出了问题,你可以轻而易举地删掉这个虚拟机,并重新开始来修正错误。Linux 虚拟机的隔离环境是一个绝佳的开发和测试环境。

7、学习和研究的好帮手

Linux 值得反复探索。除了基础的计算任务,你可以做许多其他的事情。你可以学习如何修改你的用户界面,尝试一些常见的桌面环境 、安装大量常用软件 ,与此同时仍能让一切处于掌控之中。如果出现问题,新建一个 Linux 虚拟机就可以解决。当然,这并不仅限于日常使用需要,还可以启发系统管理员在其中测试他们所学的知识。

8、更容易复制和迁移

虚拟机可以很容易地复制和迁移。只要其它的宿主机系统支持该虚拟化程序,你就可以很容易地迁移它,而没有特别要求。不论因何原因,几次简单的点击就可以完成复制和迁移的任务。

9.尝试大量的发行版

你可以在虚拟环境下尝试数以百计的 Linux 发行版。你或许会认为这和第七条重复了,但是我相信,测试一个发行版是一个巨大的系统性工程,尤其是当你决定切换发行版做为宿主机或其他用途时。

10、便于调试

不论是严肃的开发活动还是一般的研究,在隔离的虚拟环境中调试和除错相对而言会更简单。你可以快速尝试大量的调试方法而无需考虑影响。同时,如果你的宿主机是 Linux 系统的话,无需宿主机上的 root 权限便可以访问和修改虚拟机中的配置文件。

总而言之

如果你不熟悉正在使用的系统或者依赖不同的操作系统工作,虚拟机将是协助你工作的一大利器。

Linux 虚拟机可以广泛用于开发、学习、试验或任何特定用途。

虚拟机的简单知识:

1.什么是虚拟机呢

问:什么是虚拟机呢?

答:首先你得知道什么是机器(machine),这个名词可能有多种含义,不过在我们这个系列里面,它指的是一个黑盒子。它在很多情况下指的是一台抽象的机器,有CPU、内存、外围设备和其他资源。

问:这样说,机器指的是一种硬件的集合吗?

答:取决于你怎么定义“硬件”。不过,大部分时候,机器只是一组抽象接口集合。

问:接口?

答:是的,在机器上层看来,机器不过只是接口。所谓的虚拟机,就是实现了这些接口。

问:这样看,“虚拟机”和“机器”也没有什么区别?

答:是的,“虚拟机”的“虚拟”是一个惯用词,不代表有什么特定含义,计算机领域很多词都是这样的。有很多的“虚拟机”根本就没有“真实机”,比如高级语言的虚拟机,就没有“真实机”与之对应。可以说,机器不过是虚拟机的一个实现而已。打个比方,x86的ISA规定了一系列的接口,如果你采用软件来实现这些接口,称为虚拟机。如果你采用硬件来实现这些接口,习惯上你就不叫它虚拟机,而是称为机器。

2.模拟与仿真

问:在虚拟机的领域,常听到两个词:“模拟”、“仿真”,它们有什么区别呢?

答:这个问题问得很有水平,因为很多从业者也没有弄清楚。我们从英文来讲,模拟的英文是emulation,它在虚拟机领域里面,指的是对于黑盒子外部接口的实现;而仿真的英文是simulation,它指的是对于一个事物内部细节的模仿。

问:你解释得更糊涂了,能举个例子吗?

答:糊涂就对了,概念就是从清晰到糊涂再到清晰的。我们举一个简单的例子,现在我们有一个黑盒子,它有两个开关和一个灯泡,红开关开灯、黑开关关灯。现在有个问题先问你,什么是它的接口?

问:... 我没有看到它有什么接口。

答:它的接口是“动作-反应”,“红开关-开灯、黑开关-关灯”。要想模拟这个黑盒子,那我们需要仿造类似的“动作-反应”。

问:那么什么又是仿真呢?

答:仿真是我们要去模拟这个黑盒子内部的构造,就是我们要仿真里面导线的连接方式,导线如何与开关、电源(它不是接口的一部分)、灯泡相连。

问:这个不就是如何实现黑盒子吗?

答:不不不,实现黑盒子有很多手段,未必要按照黑盒子的实现来实现黑盒子。

问:说相声呢你这?有什么具体的例子吗?

答:比如要实现1+1=2,你可以用算盘、也可以用计算器,还可以掰手指头数,这都是一种实现。如果把掰手指头作为黑盒子,那么其他都是模拟它的实现。

问:明白了。如果把算盘当成黑盒子,那么其他的方式都是算盘模拟器。

答:非但如此,就连算盘本身也是一种算盘模拟器。如果你:

按照黑盒子的实现来实现黑盒子,并对外提供接口,那么你同时进行了仿真和模拟。你这个黑盒子的实现,就既是仿真器也是模拟器。

不按照黑盒子的实现来实现黑盒子,那么你就是进行了模拟,你这个黑盒子的实现,就是一个模拟器,而不是一个仿真器。

按照黑盒子的实现来实现黑盒子,但不对外提供接口,那么你只进行了仿真。你这个黑盒子的实现,只是仿真器。

问:不过你也看不到什么东西,只实现,而不对外提供接口吧?

答:那可不一定。非洲有个国家叫利比里亚,它仿真了美国的所有政治细节,连国旗都是高仿的。但是它国家治理一塌糊涂......

问:这么聊咱们聊天还能公开嘛?再说了,你这个例子不还是说它没有完全仿真吗?

答:实际上,完全的仿真是不存在的,你这个左派幼稚病有点大。除非你就使用原件,但是那种仿真也没有意义。我们制造仿真器,就是在某些条件不允许的情况下(比如经济条件)来复刻另一个东西。不过,你说的基本正确,所以我们谈到仿真器的时候,它都是既实现接口,又实现细节的。也就是说,一个仿真器一定是一个模拟器。

问:你这话的意思是?

答:比如说我想研究一个元器件A的细节,比如它内部的两个子器件(B和C)之间如何作用。于是我用C语言实现了这个元器件,用两个类的实例来表示它的两个子器件,从而研究得以进行。

问:你这不是模拟吗?

答:从子器件的外部(也就是B和C的外部)看起来,它是一种模拟,就是对于B和C 的模拟;但是从A的外部看起来,它是对于A工作原理的仿真。在这个例子中,仿真建立在对于一堆器件的模拟,模拟依赖内部细节的仿真。仿真是一群器件的模拟,模拟是对于一个器件的仿真......

问:最后这句话听着很耳熟呀。说了大半天,清晰这两个概念有什么用呢?

答:用处很大:

可以和别人吹水。

可以清晰了解为什么有的东西叫simulator,为什么有的东西叫emulator。

可以想清楚虚拟机的核心概念:对于抽象接口的模拟

问:从上面第三点,好像虚拟机是一种模拟器。

答:没错。


虚拟机是怎样工作的

运行应用程序所需的一切都包含在虚拟机里--虚拟化的硬件,操作系统以及任何所需的二进制文件和库。因此,虚拟机具有自己独立的基础架构。

虚拟机架构图

虚拟机的劣势

虚拟机可能占用主机的大量系统资源,虚拟机的大小为数GB。在虚拟服务器上运行单个应用程序意味着还要运行Guest OS以及Guest OS运行所需的所有硬件的虚拟副本。这样很快就增加了很多RAM和CPU资源消耗。

迁移虚拟机上运行的应用程序的过程也可能很复杂,因为它始终附加在操作系统上。因此,必须同时迁移应用程序和操作系统。同样,在创建虚拟机时,系统管理程序会分配专用于VM的硬件资源。 不过与运行单独的实体服务器相比,这仍然是经济的。

容器

容器是一个不依赖于操作系统,运行应用程序的环境。它通过Linux的Namespaces和Cgroups技术对应用程序进程进行隔离和限制的,Namespace的作用是隔离,它让应用进程只能看到该Namespace内的世界;而Cgroups 的作用是限制分配给进程的宿主机资源。但对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有太大区别。容器只是运行在宿主机上的一种特殊的进程,多个容器之间使用的还是同一个宿主机的操作系统内核。关于Namespaces和Cgroups后面再详细介绍,这里你只知道他们是启动隔离和限制应用进程的就行了。

容器是怎么工作的

Namespace的作用是隔离,它让应用进程只能看到该Namespace内的世界;而Cgroups的作用是限制,它给这个世界围上了一圈看不见的墙。通过Mount Namespace可以修改容器进程对自己的文件系统 "挂载点"的认知。在容器进程启动之前重新挂载它的整个根目录"/"(通过pivot_root系统调用改变进程的文件系统,如果系统不支持,则使用chroot),而由于Mount Namespace的存在,这个挂载对宿主机不可见的。这个挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。rootfs只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核。

所以说,rootfs 只包括了操作系统的 "躯壳",并没有包括操作系统的内核。同一台机器上的所有容器,都共享宿主机操作系统的内核。

这就意味着,如果容器里的应用程序需要配置内核参数、跟内核进行直接的交互,这些都是操作的宿主机操作系统的内核,它对于该机器上的所有容器来说是一个“全局变量”,牵一发而动全身。这也是容器相比于虚拟机的主要缺陷之一:毕竟虚拟机有模拟出来的硬件机器充当沙盒,而且每个虚拟机里还运行着一个完整Guest OS让应用随便折腾。不过由于rootfs里打包的不只是应用,而是整个操作系统的文件和目录,也就意味着,应用以及它运行所需要的所有依赖,都被封装在了一起。这就赋予了容器所谓的一致性:无论在本地、云端,还是在一台任何地方的机器上,用户只需要解压打包好的容器镜像,那么这个应用运行所需要的完整的执行环境就被重现出来。

容器的优势

容器占用的大小比虚拟机小很多,甚至可以小到10MB,可以轻松限制容器的内存和CPU使用率。与部署应用需要部署整个操作系统的虚拟机相比,容器非常轻巧且启动迅速。这样让我们可以快速扩展容器并添加相同的容器。

同样,容器对于持续集成和持续部署(CI / CD)实施也是极好的选择。他们通过在开发人员之间分发和合并镜像来促进协作开发。

容器的劣势

容器仍无法提供与虚拟机相同的安全性和稳定性。由于它们共享主机的内核,因此不能像虚拟机一样完全隔离。

容器是进程级的隔离,一个容器可以通过影响宿主机内核的稳定性来影响其他容器。

一旦容器执行了任务,它就会关闭并删除其中的所有数据。如果希望数据保留下来,则必须使用"数据卷"进行保存,这需要在主机上进行手动配置。

容器还是虚拟机

上面我们列出了容器和虚拟机各自的优势和劣势,我们在因为优势选择了其一后默认就要其忍受劣势所带来的副作用,凡事都有两面性没有东西可以只有优点没缺点的。就容器和虚拟机来说,因为其完整的隔离和安全性虚拟机通常用于要求苛刻的应用程序,网络基础结构以及将消耗VM大部分资源的应用程序。而容器通常用于Web应用,微服务。

如何安装虚拟机:

1.创建虚拟机

首先打开虚拟机,选择文件目录下新建虚拟机或者创建新的虚拟机。

1.png

打开之后选择典型,然后下一步

2.png

选择稍后安装操作系统,然后下一步

3.png

选择Linux,并在版本目录下选择CentOS 7 63位,随后下一步

111.png

在位置处选择浏览,在目录下创建一个虚拟机文件夹,并在其中新建一个Linux文件夹,之后虚拟机的文件都会在里面,文件会很大,不要创建在C盘,然后确定,下一步

112.png

之后最大磁盘容量可以自己设置,推荐60GB,随后下一步

113.png

选择完成,完成虚拟机的创建。

114.png

2.Linux系统的安装

在我的计算机目录下选择刚刚创建的虚拟机,选择编辑虚拟机设置

27.png

在CD/DVD目录右边设备状态下选择启动时连接,在连接目录下选择使用ISO映像文件,点击浏览,内存最少选择2G,处理器选择两核心。

115.png

116.png

选择开启此虚拟机

28.png

进入虚拟器选择Install CentOS 7,直接安装

117.png

进入安装程序引导后选择语言,随后继续

8.png

配置界面选择软件最小安装,选择GNOME桌面和开发工具,点击完成,自动开始配置安装

9.png

10.png

点击安装位置进行分区,可以使用自动分区,点击完成即自动完成分区

11.png

12.png

配置完成后选择开始安装

13.png

安装过程中会进行用户设置,点击进行密码和用户设置,等待安装完成,完成后点击重启。

14.png

15.png

重启进入系统选择CentOS Linux

16.png

初始设置选择许可证

29.png

勾选我同意许可证,随后点击完成。

30.png

点击完成配置,完成初始设置

31.png

进入主界面选择用户登录,输入密码后选择登录。

17.png

18.png

进入欢迎界面选择语言,随后选择前进

19.png

继续选择前进

20.png

继续前进

21.png

在线账号选择跳过

22.png

配置完成选择开始使用。

23.png

帮助界面点击“x”。

24.png

Linux系统安装完成

25.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值