2.3 创建虚拟机实例

OpenStack 提供的一个重要的服务是计算,为用户提供云主机。云主机就是虚拟机,在 OpenStack中称为实例(Instance),下面示范通过Dashboard界面创建虚拟机实例的过程。首先登录Dashboard界面,这里以系统提供的普通用户 demo 身份登录,其初始密码需要到用户目录下面的 keystonerc_demo文件中去查找,建议登录之后修改密码。创建实例需要提前准备好镜像、实例类型、安全组、密钥对、虚拟网络等要素。实例类型和虚拟网络可以使用通过Packstack安装OpenStack时系统提供的默认设置。

2.3.1 添加安全组访问规则

虚拟机实例可以关联到安全组,安全组中的访问规则定义了允许哪些流量可以到达被关联的实例。如果从外部网络中通过SSH协议访问实例,或者使用ping工具测试通信,就要修改默认的访问规则,开放这些服务或端口。

进入Dashboard界面,单击左侧导航窗格中的“项目”节点,再依次单击“网络”和“安全组”节点,出现图2-12所示的界面,显示当前的安全组列表。这里有一个名为“default”的默认安全组,单击该安全组条目右端的“管理规则”按钮,出现图2-13所示的界面,列出该安全组当前的管理安全组规则。

图2-12 安全组列表

图2-13 管理安全组规则列表

单击“添加规则”按钮弹出图2-14所示的窗口,在“端口”字段中输入“22”,然后单击“添加”按钮。这条规则将允许SSH访问虚拟机。

再次打开添加规则窗口,如图2-15所示,在“规则”字段中选择“All ICMP”,然后单击“添加”按钮。这条规则将允许使用ping工具访问虚拟机。

图2-14 添加SSH访问规则

图2-15 添加ICMP访问规则

2.3.2 创建或导入密钥对

通过SSH访问虚拟机实例,可以通过证书而不是密码登录,这就需要提供SSH凭据。而密钥对(Key Pair)就是虚拟机启动时被注入镜像中的SSH凭据。要采用SSH方式以证书凭据登录虚拟机实例,就需要创建或导入密钥对,并在创建虚拟机实例时关联该密钥对。

在 Dashboard 界面中单击左侧导航窗格中的“项目”节点,再依次单击“计算”和“密钥对”节点,显示当前的密钥对列表,默认没有任何密钥对。单击“创建密钥对”按钮,弹出图2-16所示的窗口,为密钥对命名(例中为“demo-key”,注意名称中只能包含字母、空格或者破折号),再单击“创建密钥对”按钮。创建新的密钥对会注册公钥并下载私钥(.pem文件),私钥一般会自动下载到当前计算机中,注意保管SSH私钥。新创建的密钥对将出现在列表中,如图2-17所示。

图2-16 创建密钥对

图2-17 密钥对列表

也可以根据需要导入密钥对作为SSH证书。创建虚拟机实例时如果关联该密钥对,则密钥对的公钥将注入实例中,这样用户就可以使用密钥对的私钥来以SSH方式登录实例,登录用户名取决所用的镜像。

2.3.3 添加镜像

镜像(Image)是创建虚拟机实例的基础。镜像将特定的一系列文件按照规定的格式制作成一个单一的文件,以便于用户下载和使用。创建虚拟机所有的镜像是一个完整的操作系统。使用命令Packstack安装OpenStack时,会自动提供一个名为“cirros”的镜像,这是一个测试用的Linux系统镜像。

用户可以自行制作一个系统镜像上传到 OpenStack 云。为便于测试,建议从 RDO(Red Hat Enterprise Linux OpenStack Platform的社区版)网站上下载几个专门为OpenStack预置的镜像文件。例中下载Fedora 28 Cloud Base镜像,它用于创建通用用途的虚拟机,笔者选择的是Qcow2格式的镜像。接下来通过添加镜像功能将其上传到云。

在Dashboard界面中单击左侧导航窗格中的“项目”节点,再依次单击“计算”和“镜像”节点,显示当前的镜像列表,默认有一个名为“cirros”的镜像。单击“创建镜像”按钮,弹出图2-18所示的窗口,为镜像命名(例中为“Fedora”),在“文件”字段中单击“浏览”按钮打开文件对话框,选择已下载的镜像文件,从“镜像格式”下拉列表中选择“QCOW 2-QEMU模拟器”,然后单击“创建镜像”按钮。

新创建的镜像上传到云中,会出现在列表中,如图2-19所示。我们可以根据需要进一步管理这些镜像。

图2-18 创建镜像

图2-19 镜像列表

2.3.4 创建并运行虚拟机实例

在Dashboard界面中有两种方式可以创建实例:一种是从镜像列表中创建实例(Launch Instance);另一种是在实例列表中直接创建实例。下面分别示范这两种方式。

1.从镜像列表中创建实例

在 Dashboard 界面中打开镜像列表,这里以“cirros”镜像为例,单击该镜像右侧的“启动”按钮,弹出图2-20所示的界面,首先为它命名,并设置实例的数量(默认为1)。

单击“源”,为实例设置源(用来创建实例的模板),如图2-21所示,这里保持默认设置,以镜像作为该实例的源,“创建新卷”栏处选择“是”,实例使用具有持久性的存储,如果选择“否”,该实例将使用临时性存储。

单击“实例类型”,由于这个镜像很小,这里选择系统资源最少的“m1.tiny”,如图2-22所示。

单击“网络”,选择实例所在的网络,这里选择已预置的私有网络,如图2-23所示。

其他选项保持默认设置,该实例会自动关联安全组和分配密钥对,最后单击“创建实例”按钮。

图2-20 设置实例名称和数量

图2-21 设置实例的源

图2-22 选择实例类型

图2-23 为实例选择网络

新创建的实例加入实例列表中,如图2-24所示,显示每个实例的基本信息和状态。从“动作”菜单中可选择多种操作指令,如创建快照、关闭实例、删除实例、重启实例等。

图2-24 实例列表

可以通过单击实例的名称进入实例详情界面,如图2-25所示,“概况”标签页显示了实例概况,除名称等基本信息外,还包括规格、IP地址、安全组、元数据及连接的卷。

切换到“控制台”标签页,可以对该实例进行交互操作。cirros镜像的虚拟机实例可以通过用户名“cirros”和密码“cubswin:)”登录,如图2-26所示。如果控制台无响应,则单击图中的灰色状态栏。

另外,也可以在主机上使用命令行获取该实例的VNC控制台带令牌(token)的统一资源定位符(Uniform Resource Locator,URL)地址,然后在浏览器中使用该URL临时访问实例的控制台界面。例如,依次执行以下命令:

[root@node-a ~]# .keystonerc_demo # 通过OpenStack身份认证

[root@node-a ~(keystone_demo)]# nova get-vnc-console cirros novnc #获取VNC控制台URL

其中cirros是实例的名称,也可以直接用实例的UUID。例中获取的URL为:

http://192.168.199.21:6080/vnc_auto.html?token=a90a62bb-8b19-4623-945d-cfdb2b007ebe

图2-25 显示实例概况

图2-26 实例控制台

提示

访问实例控制台最常遇到的错误是“Failed to connect to server (code: 1006)”,原因一般是/etc/nova/nova.conf 配置文件中的 vnc 选项设置不当,vncserver_proxyclient_address应设置为主机节点的域名或IP地址,novncproxy_base_url中尽量使用IP地址以免在无DNS解析的情况下无法访问vnc服务。笔者遇到的问题是vncserver_proxyclient_address设置为node-a.localdomain,该域名未做解析,解决的办法有两个,一是直接使用主机 IP 地址,二是在/etc/host 文件中加上一行语句“192.168.199.21 node-a nodea.localdomain”。

2.在实例列表中直接创建实例

在Dashboard界面中单击左侧导航窗格中的“项目”节点,再依次单击“计算”和“实例”节点,显示当前的实例列表。单击“创建实例”按钮,弹出相应的“创建实例”窗口,与上例操作类似,首先为该实例命名(例中为“fedora”),然后设置实例的源,如图2-27所示,选择“镜像”作为实例的源,注意存储卷大小默认为1GB,显然不能满足Fedora操作系统运行的需要,这里改为10GB,从可用的镜像列表中选择之前上传的“Fedora”。

图2-27 设置实例的源

单击“实例类型”,由于这是Fedora操作系统镜像,这里应至少选择“m1.small”。单击“网络”,选择实例所在的网络,这里选择内置的私有网络。其他选项保持默认设置,会自动关联安全组和密钥对,最后单击“创建实例”按钮。可以打开实例列表来查看新创建的实例的基本信息和状态,如图2-28所示。

图2-28 实例列表

也可以进入实例详情界面,进一步查看其信息,进入控制台操作。不过Fedora操作系统镜像并未提供登录用户名和密码,可以使用SSH通过证书登录,这将在下一节讲解。

由于源设置创建新的卷,在创建实例的过程中同时创建一个卷。可以打开卷列表查看(在“项目”节点下依次单击“卷”和“卷”节点),如图2-29所示,除了fedora实例的卷,还包括上一小节从镜像启动的cirros实例所创建的卷。

至此完成了两台虚拟机的创建,可以通过控制台登录cirros实例,使用ping工具分别测试路由器(例中地址为10.0.0.1)和fedora实例(例中地址为10.0.0.10)之间的连通性,如果成功,再进一步测试与外部网络(例如192.168.199.1)的通信,如果失败,则需要进一步调整网络配置,以实现与外网的通信。例中测试过程如图2-30所示。

图2-29 卷列表

图2-30 在控制台中测试网络通信