云与虚拟化服务深度解析
1. 云与虚拟化基础概念回顾
1.1 云服务类型相关问题
以下是一些关于云服务类型的问题及答案:
| 问题 | 选项 | 答案 |
| — | — | — |
| 哪种云服务方法仅使用第三方拥有和运营的服务器? | A. Private
B. Public
C. Hybrid
D. Type II
E. Type I | B. Public |
| Tom 目前在内部服务器上为公司运行云服务,但需要额外的处理能力来运行新应用程序。他可以考虑哪种云服务方法来利用现有的云,而无需购买更多内部服务器? | A. Private
B. Public
C. Hybrid
D. Type I
E. Type II | C. Hybrid |
| Sally 想在云中开发应用程序,而不必担心管理操作系统。她应该购买哪种类型的云服务? | A. PaaS
B. Private cloud
C. IaaS
D. SaaS
E. Hybrid cloud | A. PaaS |
| 哪种类型的云服务允许你在云提供的基础设施上启动自己的操作系统? | A. PaaS
B. Private cloud
C. IaaS
D. SaaS
E. Hybrid cloud | C. IaaS |
| 哪种类型的虚拟机管理程序直接与主机系统硬件交互? | A. Private
B. Public
C. Type II
D. Type I
E. Hybrid | D. Type I |
| Henry 已经在他的服务器上安装了 Red Hat Linux,但现在需要安装虚拟机。他应该使用哪种类型的虚拟机管理程序包? | A. Private
B. Public
C. Type II
D. Type I
E. Hybrid | C. Type II |
| 哪种类型的虚拟机管理程序模板将所有配置文件捆绑到一个文件中进行分发? | A. XML
B. JSON
C. OVA
D. OVF
E. YAML | C. OVA |
| Fred 想打包他的应用程序,以确保无论他的客户使用哪种 Linux 发行版,应用程序都能以相同的方式运行。他该怎么做? | A. 将应用程序打包为容器。
B. 将应用程序打包为虚拟机管理程序。
C. 将应用程序部署到私有云。
D. 将应用程序部署为虚拟机。
E. 将应用程序捆绑为 tar 文件并部署。 | A. 将应用程序打包为容器。 |
| 你应该使用哪种方法来轻松地将应用程序从开发环境迁移到生产环境,而无需复制操作系统? | A. Public cloud
B. Private cloud
C. Type I hypervisor
D. Type II hypervisor
E. Container | E. Container |
| 哪个 Linux 容器包在主机操作系统上作为进程运行引擎,并提供命令行界面来控制容器? | A. Snap
B. Docker
C. KVM
D. XEN
E. VirtualBox | B. Docker |
1.2 虚拟化管理工具 - libvirt
libvirt 是一个流行的虚拟化管理软件集合,包含以下元素:
- 应用程序编程接口(API)库:集成到多个开源虚拟机监控器(VMM,即 hypervisors)中,如 KVM。
- 守护进程(libvirtd):在虚拟机主机系统上运行,执行任何所需的虚拟机客户系统管理任务,如启动和停止虚拟机。
- 命令行实用工具:如 virt - install 和 virsh,用于在虚拟机主机系统上控制和管理虚拟机客户系统。
可以使用 ldd 命令来确认命令行实用工具是否使用了 libvirt 库,示例如下:
$ which virsh
/usr/bin/virsh
$
$ ldd /usr/bin/virsh | grep libvirt
libvirt-lxc.so.0 => /lib64/libvirt-lxc.so.0 (0x00007f4a3a10c000)
libvirt-qemu.so.0 => /lib64/libvirt-qemu.so.0 (0x00007f4a39f08000)
libvirt.so.0 => /lib64/libvirt.so.0 (0x00007f4a39934000)
$
libvirt 项目的主要目标是提供一种统一的方式来管理虚拟机,它支持多种虚拟机监控器,如 KVM、QEMU、Xen 和 VMware ESXi。
1.3 virsh 工具
virsh 是一个使用 libvirt 库的实用工具,是一个用于管理系统虚拟机的基本 shell。
1.3.1 获取 virsh 工具
可以通过 libvirt - client 或 libvirt - clients 包来获取 virsh shell。对于较旧的发行版,它可能位于 libvirt - bin 包中。
1.3.2 使用 virsh shell
以下是进入和退出 virsh shell 的示例:
$ virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #
virsh # exit
$
也可以直接从 Bash shell 输入各种 virsh 命令,这对于在 shell 脚本中自动化虚拟机管理很有用。例如,使用 virsh 实用工具交互式地查看 setvcpus 命令的帮助:
$ virsh help setvcpus
NAME
setvcpus - change number of virtual CPUs
SYNOPSIS
setvcpus <domain> <count> [--maximum] [--config]
[--live] [--current] [--guest] [--hotpluggable]
DESCRIPTION
Change the number of virtual CPUs in the guest domain.
OPTIONS
[--domain] <string> domain name, id or uuid
[--count] <number> number of virtual CPUs
--maximum set maximum limit on next boot
--config affect next boot
--live affect running domain
--current affect current domain
--guest modify cpu state in the guest
--hotpluggable make added vcpus hot(un)pluggable
$
1.4 虚拟机管理器(Virtual Machine Manager)
虚拟机管理器(也称为 VMM)是一个轻量级的桌面应用程序,用于创建和管理虚拟机。它是一个 Python 程序,可在许多使用 GUI 的发行版上使用,可从 virt - manager 包中获取。
1.4.1 启动虚拟机管理器
可以在图形环境中的终端模拟器中通过 virt - manager 命令启动虚拟机管理器。运行该程序通常需要超级用户权限,如果从没有这些权限的账户发出 virt - manager 命令,它将打开一个弹出窗口,要求输入 root 账户密码或类似信息。
1.4.2 虚拟机管理器的特点
- 性能统计图表:通过其视图菜单提供性能统计图表。
- 虚拟机配置修改:GUI 界面允许修改虚拟机的配置,如虚拟网络。
- 远程桌面连接:默认提供虚拟网络计算(VNC)客户端查看器(virt - viewer),可以将图形(桌面环境)控制台连接到任何运行的虚拟机,也可以配置 SPICE 来实现相同的功能。
2. 系统引导自动化方法
2.1 引导概念
在计算机领域,“booting”和“bootstrapping”这两个术语常被交替使用,但通常“booting”指的是启动系统并通过其引导加载程序代码启动系统,而“bootstrapping”指的是使用配置文件或早期系统安装的镜像来安装新系统。
2.2 使用 shell 脚本引导虚拟机
2.2.1 适用场景
当需要创建大量虚拟机时,手动通过 GUI 启动虚拟机效率较低,此时可以考虑使用 shell 脚本自动化引导过程。这种方法适用于在公司控制的主机上引导虚拟机。
2.2.2 操作步骤
- 可以在 GitHub 上查找可用的脚本,例如 http://github.com/giovtorres/kvm - install - vm 项目。
- 创建各种虚拟机的配置文件,并在需要时将其读入 shell 脚本进行引导。可以在主机系统启动时、预定时间或按需启动虚拟机,具有很大的灵活性。
2.3 学校环境中使用 shell 脚本引导虚拟机
在学校环境中,特别是计算机科学课程中,虚拟机是一种经济且灵活的解决方案。
- 服务器上的虚拟机根据课程需求配置为使用临时或永久存储。例如,不需要长期存储文件的学生使用具有临时虚拟磁盘的虚拟机,而需要存储和访问文件的编程学生使用具有持久存储的虚拟机。
- 这些虚拟机通过脚本按需启动,脚本可以由教师在课前启动,也可以通过 cron 作业或 systemd 定时器进行调度。
- 在教室中,学生可以使用瘦客户端或学校提供的笔记本电脑访问虚拟机,这种配置和部署方式简化了学校计算环境的复杂性,并通常降低了相关成本。
2.4 使用 Anaconda 进行 Kickstart 安装
2.4.1 Kickstart 安装步骤
Kickstart 是一种基于 RHEL 的系统安装技术,步骤如下:
1.
创建 Kickstart 文件
:该文件是一个文本文件,包含新系统所需的所有安装选项。对于 Red Hat 系列发行版,在安装时会创建并存储一个名为 anaconda - ks.cfg 的文件,位于 /root 目录下,包含了系统安装时所做的所有安装选择。Ubuntu 发行版需要安装 system - config - kickstart 实用工具来创建 Kickstart 文件,它还有自己的原生引导产品 preseed。openSUSE 发行版有自己的工具 AutoYaST。
2.
存储 Kickstart 文件
:对于常规物理系统安装,通常将配置好的 Kickstart 文件存储在可移动媒体(如 USB 闪存驱动器)或网络上。对于虚拟机创建,可以将其存储在主机系统上,同时要确保文件得到妥善保护。
3.
放置安装源
:安装源通常是用于安装 Linux 发行版的 ISO 文件,也可以使用安装树(即包含安装 ISO 文件提取内容的目录树)。对于物理系统,ISO 通常存储在可移动媒体或网络位置;对于虚拟机,可将 ISO 或安装树存储在主机系统上,甚至可以将其放在与 Kickstart 文件相同的目录中。
4.
创建引导介质
:对于物理安装,选择的方法和介质取决于系统的各种引导选项以及要执行安装的系统类型。对于具有从 USB 驱动器或 DVD 引导能力的服务器,可将可引导的实时 ISO 存储在其中之一。对于虚拟机安装,如在 KVM 虚拟机监控器上的虚拟机,无需创建引导介质。
5.
启动 Kickstart 安装
:
-
物理系统
:启动引导过程,到达引导提示后,根据硬件环境、引导加载程序和 Kickstart 文件的位置输入类似 linux ks = hd:sdc1:/ks.cfg 的命令。
-
虚拟系统
:如果主机上有 virt - install 命令,可以使用它来创建虚拟机,并添加以下两个选项:
--initrd - inject /root/VM - Install/ks.cfg
--extra - args="ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
如果需要,可以创建一个带有循环的 shell 脚本,多次重新发出 virt - install 命令来创建/安装所需数量的虚拟机。
2.5 使用 Cloud - init 初始化虚拟机
Cloud - init 是 Canonical 公司的产品,用于引导虚拟化机器。它可以为云环境中的虚拟机提供用户数据,使其具有独特的配置。
2.5.1 适用范围
Cloud - init 服务用 Python 编写,适用于基于云的虚拟化服务,如 Amazon Web Services (AWS)、Microsoft Azure 和 Digital Ocean,以及基于云的管理操作系统,如 OpenStack。也可以用于使用 VMM(虚拟机监控器)产品(如 VMware 和 KVM)的本地虚拟机,并且得到了大多数主要 Linux 发行版的支持。
2.5.2 功能特点
- 可以配置虚拟机的主机名、临时挂载点和默认区域设置。
- 可以创建预生成的 OpenSSH 私钥,为虚拟化系统提供加密访问。
- 可以使用自定义脚本在虚拟机引导时运行,这些脚本通常存储在 YAML 格式的文件中。
2.5.3 安装和使用
可以通过 cloud - init 包安装该工具,它在大多数主要 Linux 发行版上都可用。/etc/cloud/cloud.cfg 文件是主要的 Cloud - init 配置文件,命令行实用工具是 cloud - init 命令。例如,使用 - h 选项获取帮助:
$ cloud - init - h
usage: /usr/bin/cloud - init [-h] [--version] [--file FILES] [--debug] [--force]
{init,modules,single,query,dhclient - hook,features,analyze,devel,
collect - logs,clean,status}
...
optional arguments:
-h, --help show this help message and exit
下面是使用 mermaid 绘制的 Kickstart 安装流程:
graph LR
A[创建 Kickstart 文件] --> B[存储 Kickstart 文件]
B --> C[放置安装源]
C --> D[创建引导介质]
D --> E[启动 Kickstart 安装]
E --> F{物理系统还是虚拟系统}
F -- 物理系统 --> G[输入引导命令]
F -- 虚拟系统 --> H[使用 virt - install 并添加选项]
综上所述,通过上述各种方法,可以实现云与虚拟化环境中系统的高效部署和管理。不同的方法适用于不同的场景,用户可以根据实际需求选择合适的方式。
3. 云服务类型及相关操作总结
3.1 云服务类型对比
| 云服务类型 | 特点 | 适用场景 |
|---|---|---|
| 公有云(Public) | 仅使用第三方拥有和运营的服务器 | 企业需要额外资源且不想自行维护基础设施时,如 Tom 需要额外处理能力运行新应用程序可考虑混合云,其中公有云部分可提供资源 |
| 私有云(Private) | 由企业自己拥有和运营服务器 | 对数据安全和隐私要求极高,需要严格控制资源的企业 |
| 混合云(Hybrid) | 结合了公有云和私有云的特点 | 企业既有内部服务器运行云服务,又需要额外资源时,可利用公有云补充 |
| PaaS(平台即服务) | 允许开发者在云中开发应用程序,无需担心管理操作系统 | 开发者如 Sally 想专注于应用开发,不想管理底层操作系统时适用 |
| IaaS(基础设施即服务) | 可在云提供的基础设施上启动自己的操作系统 | 需要灵活控制操作系统和资源的用户 |
| SaaS(软件即服务) | 通过互联网提供软件服务 | 企业或个人无需自行安装和维护软件,直接使用在线软件服务 |
3.2 容器与虚拟机的选择
在将应用程序从开发环境迁移到生产环境,或者确保应用程序在不同 Linux 发行版上以相同方式运行时,需要在容器和虚拟机之间做出选择:
-
容器(Container)
:
-
优点
:轻量级,启动速度快,可轻松移动应用程序,无需复制操作系统。例如,Fred 想确保应用程序在不同 Linux 发行版上以相同方式运行,可将应用程序打包为容器;将应用程序从开发环境迁移到生产环境时,使用容器可避免复制操作系统。
-
操作步骤
:使用 Docker 等容器包,它在主机操作系统上作为进程运行引擎,并提供命令行界面来控制容器。
-
虚拟机(Virtual Machine)
:
-
优点
:提供完整的隔离环境,可运行不同的操作系统。
-
适用场景
:当需要运行不同操作系统或对隔离性要求极高时选择。
3.3 虚拟机管理工具操作总结
3.3.1 libvirt 相关操作
-
确认工具是否使用 libvirt 库
:使用 ldd 命令,如
ldd /usr/bin/virsh | grep libvirt。 - 功能 :提供统一的方式管理虚拟机,支持多种虚拟机监控器,如 KVM、QEMU、Xen 和 VMware ESXi。
3.3.2 virsh 工具操作
- 获取 :通过 libvirt - client 或 libvirt - clients 包获取,旧版本可能在 libvirt - bin 包中。
-
使用
:可进入 virsh shell 管理虚拟机,也可直接从 Bash shell 输入 virsh 命令,如
virsh help setvcpus查看命令帮助。
3.3.3 虚拟机管理器(Virtual Machine Manager)操作
- 启动 :在图形环境中的终端模拟器中通过 virt - manager 命令启动,需超级用户权限。
- 特点 :提供性能统计图表,可修改虚拟机配置,默认提供 VNC 客户端查看器。
4. 系统引导方法对比与操作流程
4.1 不同引导方法对比
| 引导方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Shell 脚本引导 | 公司控制的主机上创建大量虚拟机 | 灵活性高,可自定义配置和启动时间 | 需要一定的脚本编写能力 |
| 学校环境中使用 Shell 脚本引导 | 学校计算机科学课程 | 经济、灵活,可根据课程需求配置存储 | 依赖脚本的编写和调度 |
| Kickstart 安装(Anaconda) | 基于 RHEL 的系统安装,包括物理系统和虚拟机 | 可自动化安装过程,减少人工干预 | 配置文件编写较复杂,不同发行版有差异 |
| Cloud - init 初始化 | 云环境和本地虚拟机 | 可配置虚拟机的多种参数,支持多种云服务和 Linux 发行版 | 依赖云服务提供商或虚拟机监控器的支持 |
4.2 操作流程总结
4.2.1 Shell 脚本引导流程
graph LR
A[查找可用脚本(如 GitHub)] --> B[创建虚拟机配置文件]
B --> C[将配置文件读入脚本]
C --> D{选择启动方式}
D -- 主机启动时 --> E[自动启动]
D -- 预定时间 --> F[通过 cron 或 systemd 调度]
D -- 按需 --> G[手动启动]
4.2.2 Kickstart 安装流程(已在前面详细介绍)
4.2.3 Cloud - init 初始化流程
- 安装 :通过 cloud - init 包安装。
- 配置 :修改 /etc/cloud/cloud.cfg 文件。
-
使用
:使用 cloud - init 命令进行操作,如
cloud - init - h获取帮助。
5. 总结与建议
5.1 云服务选择建议
- 对于小型企业或初创公司,公有云或 SaaS 可能是更经济实惠的选择,可降低前期投资和维护成本。
- 大型企业对数据安全和隐私要求高,可考虑私有云或混合云,结合公有云的灵活性和私有云的安全性。
- 开发者根据需求选择 PaaS 或 IaaS,专注应用开发选 PaaS,需要灵活控制资源选 IaaS。
5.2 虚拟机管理工具选择建议
- 对于命令行操作熟练的用户,libvirt 和 virsh 是强大的管理工具,可实现自动化管理。
- 对于喜欢图形界面的用户,虚拟机管理器(Virtual Machine Manager)提供直观的操作界面。
5.3 系统引导方法选择建议
- 需要大量自动化部署虚拟机时,可优先考虑 Kickstart 安装或使用 Shell 脚本引导。
- 在云环境中,Cloud - init 是一个不错的选择,可方便地配置虚拟机。
通过对云与虚拟化概念、管理工具和系统引导方法的深入了解,用户可以根据自身需求和场景,选择合适的技术和工具,实现高效的云与虚拟化环境部署和管理。
超级会员免费看
1386

被折叠的 条评论
为什么被折叠?



