返回介绍

创建实例

发布于 2025-01-26 00:51:50 字数 9086 浏览 0 评论 0 收藏 0

实例(Instance)是运行在云中的虚拟机。

在创建新实例之前,您要提前知晓以下参数:

  • 实例的源 可以是镜像,快照,或者包含镜像或快照的块存储设备。
  • 实例的 名字
  • 您实例的 型号 ,这个型号决定了您 nova 实例的 CPU,内存和磁盘空间情况。型号(flavor)是您虚拟机的硬件可用配置。它决定了您能创建的虚拟机的大小。
  • 任意的 用户数据 文件。用户数据文件时在元数据服务中的一个特殊的键,它保存了一份能给虚拟机实例中的云服务使用的文件。比如, cloud-init 程序便使用了用户数据文件,这个程序是一个源自 Ubuntu 的开源包,能用在多个 Linux 发行版上,能够接管云实例的初始化过程。
  • 访问权限和安全认证信息,其中包括以下认证信息:
    • 密钥对 。密钥对能在镜像启动的时候注入进镜像中,不过前提时该镜像必须包含 cloud-init 包。您要为每个 Project 建立至少一个密钥对。如果您已经通过外部工具创建了密钥对,您可以将其导入 OpenStack。在一个 Project 内的多个实例可以共用一个密钥对。
    • 安全组 。用来决定哪些网络流量能流至实例。安全组中包含了一组防火墙策略,被成为安全组规则。
  • 如果您需要,您可以为运行中的实例分配一个 浮动 IP(公网地址)
  • 您还可以为实例安排一个块存储设备,或者说 ,来做持久化存储。

注意:
使用默认安全组的实例,默认情况下是不能为任何外部 IP 访问到的。如果您想要让外部 IP 地址访问到某个实例,您必须修改默认安全组的规则。 不过您还可以通过分配浮动 IP 的方式让外部 IP 得以访问我们的实例。请参见 Manage IP Addresses。

在您已经知晓了上述参数之后,您便可以通过镜像或卷来启动实例了。您可以从 OpenStack 的镜像直接启动实例,也可以从持久化卷上的镜像启动实例。OpenStack 镜像服务提供了一个镜像池,能将其中的镜像提供给不同 Project 中的用户。

收集启动实例时需要用到的参数

在您开始之前,请先执行 OpenStack RC 文件。

  1. 列出可用的实例型号:
$nova flavor-list

记下您想使用的服务器型号。

+-----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID  | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+-----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1   | m1.tiny   | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2   | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3   | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4   | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5   | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
+-----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
  1. 列出可用镜像:
$ nova image-list

记下您想使用哪个镜像来启动您的实例。

+--------------------------------------+---------------------------------+--------+--------+
| ID                                   | Name                            | Status | Server |
+--------------------------------------+---------------------------------+--------+--------+
| 397e713c-b95b-4186-ad46-6126863ea0a9 | cirros-0.3.2-x86_64-uec         | ACTIVE |        |
| df430cc2-3406-4061-b635-a51c16e488ac | cirros-0.3.2-x86_64-uec-kernel  | ACTIVE |        |
| 3cf852bd-2332-48f4-9ae4-7d926d50945e | cirros-0.3.2-x86_64-uec-ramdisk | ACTIVE |        |
+--------------------------------------+---------------------------------+--------+--------+

您也可以用 grep 来过滤结果,像下面这样:

$ nova image-list | grep 'kernel'

| df430cc2-3406-4061-b635-a51c16e488ac | cirros-0.3.2-x86_64-uec-kernel  | ACTIVE |        |
  1. 列出可用的安全组:
$ nova secgroup-list --all-tenants

注意:如果您是管理员,您可以指定 --all-tenants 参数来列出所有 tenant 的安全组。

记下您想套用在您新实例上的安全组。

+----+---------+-------------+----------------------------------+
| Id | Name    | Description | Tenant_ID                        |
+----+---------+-------------+----------------------------------+
| 2  | default | default     | 66265572db174a7aa66eba661f58eb9e |
| 1  | default | default     | b70d90d65e464582b6b2161cf3603ced |
+----+---------+-------------+----------------------------------+

如果您没有创建任何安全组,您可以将实例设置为只使用默认安全组。

您还可以用下面的命令来查看某一个安全组内的详细规则:

$ nova secgroup-list-rules default
  1. 列出可用的密钥对,记下您想用在新实例 SSH 上的那对密钥。
$ nova keypair-list

通过镜像创建实例

  1. 在您已经掌握了所需的参数,运行如下命令来启动实例。要指定服务器名,型号 ID 和镜像 ID:
$ nova boot --flavor FLAVOR_ID --image IMAGE_ID --key-name kEY_NAME \ 
-- user-data USER_DATA_FILE --security-groups SEC_GROUP_NAME --meta KEY=VALUE \
INSTANCE_NAME

此外,您可以在上面的命令中传入一个 --key-name 参数以指定您要用哪一个密钥对,以及用 --security-groups 参数来指定您要用哪一个安全组。您还可以在参数中添加元数据键值对,比如,您如果要为您的服务器添加一段简短的描述,用 --meta description="My Server" 参数即可。

您还可以用 --user-data USER-DATA-FILE 将用户数据文件传入新建的实例。

重要: 如果您创建实例时, INSTANCE_NAME 这一项的长度超过了 63 个字符,Compute 会将其截断,保证 dnsmasq 能正常工作。这一动作的日志同时会保存在 nova-network.log 中。

请参看下面的命令。该命令创建了一个叫 myCirrosServer 的实例,型号时 m1.small (ID 是 1),镜像是 cirros-0.3.2-x86_64-uec(ID 是 397e713c-b95b-4186-ad46-6126863ea0a9),默认用户组,密钥对是 KeyPair01 ,用户数据文件是 cloudinit.file

$ nova boot --flavor 1 --image 397e713c-b95b-4186-ad46-6126863ea0a9 \
--security-groups default --key-name KeyPair01 --user-data cloudinit.file \
myCirrosServer

根据您提供的参数,上面的命令会返回如下服务器属性:

+-------------------------------------+-------------------------------------+
| Property                            | Value                               |
+-------------------------------------+-------------------------------------+
| OS-EXT-STS:task_state               | scheduling                          |
| image                               | cirros-0.3.2-x86_64-uec             |
| OS-EXT-STS:vm_state                 | building                            |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000002                   |
| flavor                              | m1.small                            |
| id                                  | b3cdc6c0-85a7-4904-ae85-71918f734048|
| security_groups                     | [{u'name': u'default'}]             |
| user_id                             | 376744b5910b4b4da7d8e6cb483b06a8    |
| OS-DCF:diskConfig                   | MANUAL                              |
| accessIPv4                          |                                     |
| accessIPv6                          |                                     |
| progress                            | 0                                   |
| OS-EXT-STS:power_state              | 0                                   |
| OS-EXT-AZ:availability_zone         | nova                                |
| config_drive                        |                                     |
| status                              | BUILD                               |
| updated                             | 2013-07-16T16:25:34Z                |
| hostId                              |                                     |
| OS-EXT-SRV-ATTR:host                | None                                |
| key_name                            | KeyPair01                           |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None                                |
| name                                | myCirrosServer                      |
| adminPass                           | tVs5pL8HcPGw                        |
| tenant_id                           | 66265572db174a7aa66eba661f58eb9e    |
| created                             | 2013-07-16T16:25:34Z                |
| metadata                            | {u'KEY': u'VALUE'}                  |
+-------------------------------------+-------------------------------------+

如果状态是“BUILD”,意味着实例已启动,但尚未上线。

如果状态是“ACTIVE”,意味着实例已经可以用了。

  1. 在打印出来的参数中查找 ID 这一项,这一项是服务器 ID。您可以用这个 ID 获取到服务器详情,或者删掉这个服务器。
  2. 在参数中查找 adminPass 项,将管理员密码复制出来。用这个密码来登录服务器。

注意: 您可以在创建实例时,将任意本地文件注入系统,用 --file <dst-path=src-path> 即可。您最多能存入五个文件。比如,您想用自定义的认证密钥文件放在实例中,而不是使用正常的 SSH 密钥注入的话,您可以用 --file 选项。如下是代码示例:

$ nova boot --image ubuntu-cloudimage --flavor 1 vn-name\
--file /root/.ssh/authorized_keys=special_authorized_keysfile
  1. 检查一下实例是否已上线成功:
$ nova list

该列表显示您在这个 Project 下的服务器 ID,名称,状态,私网 IP(如果有公网 IP 也会显示)。

+-------------+----------------------+--------+------------+-------------+------------------+
| ID          | Name                 | Status | Task State | Power State | Networks         |
+-------------+----------------------+--------+------------+-------------+------------------+
| 84c6e57d... | myCirrosServer       | ACTIVE | None       | Running     | private=10.0.0.3 |
| 8a99547e... | myInstanceFromVolume | ACTIVE | None       | Running     | private=10.0.0.4 |
+-------------+----------------------+--------+------------+-------------+------------------+

如果实例的状态是 ACTIVE ,则该实例已经上线了。

  1. 如果要查看所有 nova list 后面可以接的命令,可以执行以下命令:
$ nova help list

注意: 如果您不提供密钥对,安全组,或者安全组规则,那您只能通过云内提供的 VNC 来访问这个实例。连 ping 这个实例都 ping 不通。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文