创建实例

实例(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. 列出可用的实例型号:
  1. $nova flavor-list

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

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

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

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

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

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

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

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

  1. +----+---------+-------------+----------------------------------+
  2. | Id | Name | Description | Tenant_ID |
  3. +----+---------+-------------+----------------------------------+
  4. | 2 | default | default | 66265572db174a7aa66eba661f58eb9e |
  5. | 1 | default | default | b70d90d65e464582b6b2161cf3603ced |
  6. +----+---------+-------------+----------------------------------+

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

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

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

通过镜像创建实例

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

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

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

  1. +-------------------------------------+-------------------------------------+
  2. | Property | Value |
  3. +-------------------------------------+-------------------------------------+
  4. | OS-EXT-STS:task_state | scheduling |
  5. | image | cirros-0.3.2-x86_64-uec |
  6. | OS-EXT-STS:vm_state | building |
  7. | OS-EXT-SRV-ATTR:instance_name | instance-00000002 |
  8. | flavor | m1.small |
  9. | id | b3cdc6c0-85a7-4904-ae85-71918f734048|
  10. | security_groups | [{u'name': u'default'}] |
  11. | user_id | 376744b5910b4b4da7d8e6cb483b06a8 |
  12. | OS-DCF:diskConfig | MANUAL |
  13. | accessIPv4 | |
  14. | accessIPv6 | |
  15. | progress | 0 |
  16. | OS-EXT-STS:power_state | 0 |
  17. | OS-EXT-AZ:availability_zone | nova |
  18. | config_drive | |
  19. | status | BUILD |
  20. | updated | 2013-07-16T16:25:34Z |
  21. | hostId | |
  22. | OS-EXT-SRV-ATTR:host | None |
  23. | key_name | KeyPair01 |
  24. | OS-EXT-SRV-ATTR:hypervisor_hostname | None |
  25. | name | myCirrosServer |
  26. | adminPass | tVs5pL8HcPGw |
  27. | tenant_id | 66265572db174a7aa66eba661f58eb9e |
  28. | created | 2013-07-16T16:25:34Z |
  29. | metadata | {u'KEY': u'VALUE'} |
  30. +-------------------------------------+-------------------------------------+

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

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

  1. 在打印出来的参数中查找ID这一项,这一项是服务器ID。您可以用这个ID获取到服务器详情,或者删掉这个服务器。

  2. 在参数中查找adminPass项,将管理员密码复制出来。用这个密码来登录服务器。

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

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

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

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

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

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

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