管理实例和主机

“实例”,是运行在云中物理主机上的虚拟机。Compute服务管理着众多的实例。“主机”是一组实例栖身的物理节点。

本章介绍了实例管理中的各种不同的任务,比如添加浮动IP,关闭和启动实例,以及删除实例等等。本节也介绍了一些物理节点的管理任务。

管理IP地址

每个实例都有一个内网的固定IP,不过还可以为其添加一个对外的IP,或者叫“浮动IP”。内网IP是用来和其他实例间通信的,而公网是用来和外网的云设施通信的,而且也经常用来和互联网上的设备通信。

当您创建了一个实例,OpenStack会自动为其分配一个内网IP,这个地址一直会保持不变,直到您将该实例销毁。您重启实例也不会影响这个内网IP。

浮动IP资源池则是由云管理员设置的,该服务在OpenStack Compute中可用。每个Project的资源配额决定了您能在这个Project分配的浮动IP的最大数量。在您给某个实例分配了一个浮动IP之后,您能够:

  • 将该浮动IP地址和Project中的这个实例相关联。但是,一个浮动IP,同一时间内只能分配给一个实例。
  • 将该浮动IP从实例上解除关联。
  • 从Project中删除浮动IP,并且连带删除该IP的各种关联。

您可以使用nova floating-ip-*命令来管理浮动IP地址。

列出浮动IP信息

列出所有的浮动IP资源池,请使用如下命令:

  1. $ nova floating-ip-pool-list
  2. +--------+
  3. | name |
  4. +--------+
  5. | public |
  6. | test |
  7. +--------+

注意:
如果这个列表里没有东西,云管理员必须先创建一个浮动IP资源池。

想列出分配给当前Project的所有浮动IP地址,请使用如下命令:

  1. $ nova floating-ip-list
  2. +--------------+--------------------------------------+----------+--------+
  3. | Ip | Instance Id | Fixed Ip | Pool |
  4. +--------------+--------------------------------------+----------+--------+
  5. | 172.24.4.225 | 4a60ff6a-7a3c-49d7-9515-86ae501044c6 | 10.0.0.2 | public |
  6. | 172.24.4.226 | None | None | public |
  7. +--------------+--------------------------------------+----------+--------+

对于每个分配给当前Project的浮动IP,上面的这个命令能返回以下四个结果:该浮动IP地址,该浮动IP关联的实例的ID,关联的固定IP地址,以及这个浮动IP地址的来源池。

分配浮动IP

您可以将浮动IP分配给Project,也可以分配给instance。

  1. 运行如下命令,将一个浮动IP分配给当前Project。默认情况下,该浮动IP是从公共的资源池而来的。该命令的返回结果中会显示本次分配的地址。
  1. $ nova floating-ip-create
  2. +--------------+-------------+----------+--------+
  3. | Ip | Instance Id | Fixed Ip | Pool |
  4. +--------------+-------------+----------+--------+
  5. | 172.24.4.225 | None | None | public |
  6. +--------------+-------------+----------+--------+

注意:
如果IP地址资源池不止有一个,您可以将资源池名称作为参数传递给该命令,来制定要使用哪一个资源池。比如,要从test池中抽取IP地址,请使用如下命令:

  1. $ nova floating-ip-create test
  1. 列出该Project下所有可以关联浮动IP地址的实例:
  1. $ nova list
  2. +---------------------+------+---------+------------+-------------+------------------+
  3. | ID | Name | Status | Task State | Power State | Networks |
  4. +---------------------+------+---------+------------+-------------+------------------+
  5. | d5c854f9-d3e5-4f... | VM1 | ACTIVE | - | Running | private=10.0.0.3 |
  6. | 42290b01-0968-43... | VM2 | SHUTOFF | - | Shutdown | private=10.0.0.4 |
  7. +---------------------+------+---------+------------+-------------+------------------+
  1. 用如下命令,将IP地址和实例相关联:
  1. $ nova floating-ip-associate INSTANCE_NAME_OR_ID FLOATING_IP_ADDRESS

比如像下面这样:

  1. $ nova floating-ip-associate VM1 172.24.4.225

此时,该实例便已经和两个IP地址绑定了。

  1. $ nova list
  2. +------------------+------+--------+------------+-------------+-------------------------------+
  3. | ID | Name | Status | Task State | Power State | Networks |
  4. +------------------+------+--------+------------+-------------+-------------------------------+
  5. | d5c854f9-d3e5... | VM1 | ACTIVE | - | Running | private=10.0.0.3, 172.24.4.225|
  6. | 42290b01-0968... | VM2 | SHUTOFF| - | Shutdown | private=10.0.0.4 |
  7. +------------------+------+--------+------------+-------------+-------------------------------+

您在关联了该IP地址,且为实例配置了安全组规则之后,该实例便能通过浮动IP来访问了。

注意:
如果某个实例连接了多个网络,用--fixed-address即可将浮动IP和一个固定IP关联。

  1. $ nova floating-ip-associate --fixed-address FIXED_IP_ADDRESS \
  2. INSTANCE_NAME_OR_ID FLOATING_IP_ADDRESS
回收浮动IP

若要解除浮动IP和实例的关联,请使用如下命令:

  1. $ nova floating-ip-disassociate INSTANCE_NAME_OR_ID FLOATING_IP_ADDRESS

若要解除浮动IP和Project,请使用如下命令:

  1. $ nova floating-ip-delete FLOATING_IP_ADDRESS

此时,该IP地址会回归地址资源池,可以被所有Project使用。如果您直接将某一个浮动IP和Project解除了关联,且正挂在某个运行的实例上时,该IP同样会被自动收回。

调整服务器大小

通过调整型号来调整服务器大小。

  1. 请首先查看服务器信息,包括服务器的型号大小,这里的型号大小是体现在flavor上的:
  1. $ nova show myCirrosServer
  2. +-------------------------------------+-------------------------------------+
  3. | Property | Value |
  4. +-------------------------------------+-------------------------------------+
  5. | status | ACTIVE |
  6. | updated | 2013-07-18T15:08:20Z |
  7. | OS-EXT-STS:task_state | None |
  8. | OS-EXT-SRV-ATTR:host | devstack |
  9. | key_name | None |
  10. | image | cirros-0.3.2-x86_64-uec (397e71... |
  11. | private network | 10.0.0.3 |
  12. | hostId | 6e1e69b71ac9b1e6871f91e2dfc9a9b9... |
  13. | OS-EXT-STS:vm_state | active |
  14. | OS-EXT-SRV-ATTR:instance_name | instance-00000005 |
  15. | OS-EXT-SRV-ATTR:hypervisor_hostname | devstack |
  16. | flavor | m1.small (2) |
  17. | id | 84c6e57d-a6b1-44b6-81eb-fcb36afd31b5|
  18. | security_groups | [{u'name': u'default'}] |
  19. | user_id | 376744b5910b4b4da7d8e6cb483b06a8 |
  20. | name | myCirrosServer |
  21. | created | 2013-07-18T15:07:59Z |
  22. | tenant_id | 66265572db174a7aa66eba661f58eb9e |
  23. | OS-DCF:diskConfig | MANUAL |
  24. | metadata | {u'description': u'Small test ima...|
  25. | accessIPv4 | |
  26. | accessIPv6 | |
  27. | progress | 0 |
  28. | OS-EXT-STS:power_state | 1 |
  29. | OS-EXT-AZ:availability_zone | nova |
  30. | config_drive | |
  31. +-------------------------------------+-------------------------------------+

如上显示,该服务器的型号是m1.small(2)

  1. 用如下的方法列出可用的型号
  1. $ nova flavor-list
  2. +-----+-----------+-----------+------+-----------+------+-------+-------------+----------+
  3. | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public|
  4. +-----+-----------+-----------+------+-----------+------+-------+-------------+----------+
  5. | 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True |
  6. | 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True |
  7. | 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True |
  8. | 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True |
  9. | 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True |
  10. +-----+-----------+-----------+------+-----------+------+-------+-------------+----------+
  1. 如果您希望重新调整服务器大小,请使用nova resize命令,后面加上服务器ID或者名称,以及新的型号。想要即时查看容量调整过程,请使用--poll参数。例如:
  1. $ nova resize myCirrosServer 4 --poll
  2. Instance resizing... 100% complete
  3. Finished

注意:
默认情况下,nova resize这个命令会给服务器实例自主关机的时间,此后才会执行关闭电源和调整大小的动作。关机的行为是在nova.conf中的shutdown_timeout参数下配置的。这个值表示OpenStack预留给服务器实例执行关机操作的总时间,单位为秒。默认情况下这个时间是60秒。详情请参看Description of Compute configuration options。

  1. 查看服务器状态
  1. $ nova list
  2. +----------------------+----------------+--------+-----------------------------------------+
  3. | ID | Name | Status | Networks |
  4. +----------------------+----------------+--------+-----------------------------------------+
  5. | 84c6e57d-a6b1-44b... | myCirrosServer | RESIZE | private=172.16.101.6, public=10.4.113.6 |
  6. +----------------------+----------------+--------+-----------------------------------------+

容量调整完成后,这里的状态将变为VERIFY_RESIZE

  1. 确认容量调整完成:
  1. $ nova resize-confirm 84c6e57d-a6b1-44b6-81eb-fcb36afd31b5

此时服务器状态应为ACTIVE

  1. 如果容量调整未能按预期完成,您可以回滚调整操作:
  1. $ nova resize-revert 84c6e57d-a6b1-44b6-81eb-fcb36afd31b5

此时服务器状态也应为ACTIVE

关闭和开启实例

您可以使用下面的几种方式来关闭和开启实例。

暂停和恢复实例

如果要暂停实例,请使用如下命令:

  1. $ nova pause INSTANCE_NAME

该命令会把服务器实例的状态存储在内存中,暂停了的实力会依然运行,只是如同被封冻一样,不会有任何动作。想要恢复实例,请使用如下命令:

  1. $ nova unpause INSTANCE_NAME
停用和恢复实例

如果要在虚拟化软件层面上将某个实例停用,请使用如下命令:

  1. $nova suspend INSTANCE_NAME

如果要恢复一个被停用的实例,请使用如下命令:

  1. $nova resume INSTANCE_NAME
雪藏和恢复实例

如果您有一个暂时不用的实例,但还想让它留在您的服务器列表上,您便可能需要雪藏的功能了。例如,您可以在一周结束时雪藏一个实例,然后在下周一重新打开这个实力。所有相关的数据和资源会被保留,但雪藏时内存的东西是不会保存的。如果一个被雪藏的实例再也没用了,也可以被彻底删除。

您可以执行如下几种有关雪藏的任务:

  • 雪藏实例:关闭服务器实例,将关联数据和资源保存(如果没有volume backed,将会创建一个快照)。内存中的信息将会丢失。
  1. $ nova shelve SERVERNAME

注意:
默认情况下,nova shelve这个命令会给服务器实例自主关机的时间,此后才会执行关闭电源和调整大小的动作。关机的行为是在nova.conf中的shutdown_timeout参数下配置的。这个值表示OpenStack预留给服务器实例执行关机操作的总时间,单位为秒。默认情况下这个时间是60秒。详情请参看Description of Compute configuration options。
关机时间也可以被镜像中的元数据配置覆盖掉。镜像元数据中的os_shutdown_timeout参数表示该系统需要多长时间才能完成一次关机操作,该参数的优先级要高于nova.conf中的配置。

  • 恢复被雪藏的实例:
  1. $ nova unshelve SERVERNAME
  • 删除被雪藏的实例:将该实例删除,删掉所有的数据,回收资源。如果您不再需要某个实例,您可以将该实例从云中抹除,以节省空间。
  1. $ nova shelve-offload SERVERNAME

通过IP地址查找实例

在使用nova list时,您可以用IP地址来查找实例,只需添加--ip即可。

  1. $ nova list --ip IP_ADDRESS

如下示例展示了如何查询IP为10.0.0.4的实例:

  1. $ nova list --ip 10.0.0.4
  2. +------------------+----------------------+--------+------------+-------------+------------------+
  3. | ID | Name | Status | Task State | Power State | Networks |
  4. +------------------+----------------------+--------+------------+-------------+------------------+
  5. | 8a99547e-7385... | myInstanceFromVolume | ACTIVE | None | Running | private=10.0.0.4 |
  6. +------------------+----------------------+--------+------------+-------------+------------------+

重启实例

重启实例有两种,分别被称为“软重启”和“硬重启”。软重启会尝试正常关机并重启实例,硬重启会直接将实例“断电”并重启。

默认情况下,如果您通过nova重启,执行的是软重启。

  1. $ nova reboot SERVER

如果您需要执行硬重启,添加--hard参数即可:

  1. $ nova reboot --hard SERVER

您在重启时还可以进入恢复模式。例如,在您的实例使用时间过长之后,文件系统有损坏时,您可能就需要进入恢复模式了。

注意:
实例运行在“恢复模式”下时,暂停、停用和关闭操作是不可用的。因为这些操作会使实例的原始状态丢失,并且无法退出“恢复模式”。

“恢复模式”提供了一种访问实例的机制,这种机制在实例不可访问时依然有效。默认情况下,“恢复模式”会使用初始的景象启动一个实例,然后将当前的启动盘作为第二启动盘挂载到这个实例上。

如果要在“恢复模式”下启动某个实例,请使用如下命令:

  1. $ nova rescue SERVER

注意:
默认情况下,nova rescue这个命令会给服务器实例自主关机的时间,此后才会执行关闭电源和调整大小的动作。关机的行为是在nova.conf中的shutdown_timeout参数下配置的。这个值表示OpenStack预留给服务器实例执行关机操作的总时间,单位为秒。默认情况下这个时间是60秒。详情请参看Description of Compute configuration options。
关机时间也可以被镜像中的元数据配置覆盖掉。镜像元数据中的os_shutdown_timeout参数表示该系统需要多长时间才能完成一次关机操作,该参数的优先级要高于nova.conf中的配置。

如果要在正常模式下重启这个实例,请执行如下命令:

  1. $ nova unrescue SERVER

如果您在“恢复模式”下启动实例时希望指定一个镜像,而不是用默认的那个镜像,请使用--rescue_image_ref参数:

  1. $ nova rescue --rescue_image_ref IMAGE_ID SERVER

删除实例

如果您不再需要某个实例,您可以删了它。

  1. 列出所有实例:
  1. $ nova list
  2. +-------------+----------------------+--------+------------+-------------+------------------+
  3. | ID | Name | Status | Task State | Power State | Networks |
  4. +-------------+----------------------+--------+------------+-------------+------------------+
  5. | 84c6e57d... | myCirrosServer | ACTIVE | None | Running | private=10.0.0.3 |
  6. | 8a99547e... | myInstanceFromVolume | ACTIVE | None | Running | private=10.0.0.4 |
  7. | d7efd3e4... | newServer | ERROR | None | NOSTATE | |
  8. +-------------+----------------------+--------+------------+-------------+------------------+
  1. 运行nova delete命令来删除实例。下面的例子便是删除一个实例的做法,其中newServer实例的状态是ERROR
  1. $ nova delete newServer

如果您删除实例成功,是不会有提示的。

  1. 如果您想确认服务器的确被删掉了,再执行一次nova list即可。
  1. $ nova list
  2. +-------------+----------------------+--------+------------+-------------+------------------+
  3. | ID | Name | Status | Task State | Power State | Networks |
  4. +-------------+----------------------+--------+------------+-------------+------------------+
  5. | 84c6e57d... | myCirrosServer | ACTIVE | None | Running | private=10.0.0.3 |
  6. | 8a99547e... | myInstanceFromVolume | ACTIVE | None | Running | private=10.0.0.4 |
  7. +-------------+----------------------+--------+------------+-------------+------------------+

被删除的实例已经不会显示在列表中了。

通过控制台连接实例

如果要使用控制台连接实例,我们需要用到VNC或者SPICE。这两种都不在乎控制台日志是否有输出。控制台的方式可以将鼠标和键盘的信号通过中继发送到实例上。

OpenStack中,目前支持了三种远程连接控制台的方式:

novnc:一个通过HTML 5 Canvas和WebSockets实现的浏览器上的VNC客户端。
spice:一个运行在浏览器上的连接虚拟化实例的客户端。
xvpvnc:Java写成的连接服务器实例的控制端。

例如:

如果需要通过控制台访问实例,请执行如下命令:

  1. $ nova get-vnc-console INSTANCE_NAME VNC_TYPE

该命令会返回一个URL,通过这个URL,您便可以访问控制台了。

  1. +--------+------------------------------------------------------------------------------+
  2. | Type | Url |
  3. +--------+------------------------------------------------------------------------------+
  4. | xvpvnc | http://192.168.5.96:6081/console?token=c83ae3a3-15c4-4890-8d45-aefb494a8d6c |
  5. +--------+------------------------------------------------------------------------------+

上面的指令中,VNC_TYPE可以是前述三种连接方式的任意一种。

在使用SPICE方式时,您可以直接在实例的页面使用浏览器插件来使用,也可以用get-vnc-console命令,获取到一个带认证信息的URL来访问使用。上面的例子便是后一种。

欲了解更多信息,或者这三者的对比(包括安全性考虑),请参看Security
Guide。

管理裸机(bare-metal)节点

OpenStack Compute的裸机驱动,能通过一些公用的云API,或Orchestration(Heat)来管理硬件主机设备。这个驱动的用例主要是一些单租户的云平台,例如高性能计算平台,或是部署OpenStack本身的时候。

如果您使用裸机驱动,您必须创建一个网络接口,并且将其加在裸机节点上。然后您便可以通过裸机镜像来启动实例了。

您可以列出和删除裸机节点。当您删除一个节点时,与之关联的网络接口都将会被删除。您也可以列出或移除和某个裸机节点相关联的网络接口。

常用指令

管理裸机节点时,我们一般使用如下命令:

baremetal-interface-add
将某个网络接口添加在裸机节点上。

baremetal-interface-list
列出和某个裸机节点关联的网络接口。

baremetal-node-create
创建一个裸机节点。

baremetal-node-delete
删除一个裸机节点,同时删除和它关联的所有接口。

baremetal-node-list
列出所有可用的裸机节点。

baremetal-node-show
列出某一裸机节点的信息。

创建一个bare-metal节点

在您创建裸机节点时,您提供的PM地址,用户名和密码应该匹配您硬件设备中BIOS或IPMI上的配置。

  1. $ nova baremetal-node-create --pm_address PM_ADDRESS --pm_user PM_USERNAME \
  2. --pm_password PM_PASSWORD $(hostname -f) 1 512 10 aa:bb:cc:dd:ee:ff

如下示例展示了创建节点的命令,其中PM地址是1.2.3.4,PM用户名是ipmi,密码是ipmi

  1. $ nova baremetal-node-create --pm_address 1.2.3.4 --pm_user ipmi \
  2. --pm_password ipmi $(hostname -f) 1 512 10 aa:bb:cc:dd:ee:ff
  3. +------------------+-------------------+
  4. | Property | Value |
  5. +------------------+-------------------+
  6. | instance_uuid | None |
  7. | pm_address | 1.2.3.4 |
  8. | interfaces | [] |
  9. | prov_vlan_id | None |
  10. | cpus | 1 |
  11. | memory_mb | 512 |
  12. | prov_mac_address | aa:bb:cc:dd:ee:ff |
  13. | service_host | ubuntu |
  14. | local_gb | 10 |
  15. | id | 1 |
  16. | pm_user | ipmi |
  17. | terminal_port | None |
  18. +------------------+-------------------+
在该节点上添加网卡口

对于该节点上的每一个网卡,您都必须创建一个接口,并且指定该接口的MAC地址。

  1. $ nova baremetal-interface-add 1 aa:bb:cc:dd:ee:ff
  2. +-------------+-------------------+
  3. | Property | Value |
  4. +-------------+-------------------+
  5. | datapath_id | 0 |
  6. | id | 1 |
  7. | port_no | 0 |
  8. | address | aa:bb:cc:dd:ee:ff |
  9. +-------------+-------------------+
从一份bare-metal镜像创建实例

“裸机实例”是直接创建在物理机上的虚拟机实例,其下没有任何虚拟层。Nova通过IPMI来管理其电源。有些时候,Nova会通过Neutron和OpenFlow来管理网络。

  1. $ nova boot --image my-baremetal-image --flavor my-baremetal-flavor test
  2. +-----------------------------+--------------------------------------+
  3. | Property | Value |
  4. +-----------------------------+--------------------------------------+
  5. | status | BUILD |
  6. | id | cc302a8f-cd81-484b-89a8-b75eb3911b1b |
  7. +-----------------------------+--------------------------------------+
  8. ... wait for instance to become active ...

注意:
通过--availability_zone来指定在那个区,或哪个节点上启动服务器。并用逗号将区和主机名分开。

  1. $ nova boot --availability_zone zone:HOST,NODE

host(主机名)是可选的。您可以只写zone:,node,但记得要加逗号。

列出bare-metal节点和接口

nova baremetal-node-list来查看所有的裸机设备和接口。如果节点正在使用中,这个信息表中会同时显示实例的UUID。

查看bare-metal节点的详细信息

nova baremetal-node-show命令来查看某个裸机设备的详情:

  1. $ nova baremetal-node-show 1
  2. +------------------+--------------------------------------+
  3. | Property | Value |
  4. +------------------+--------------------------------------+
  5. | instance_uuid | cc302a8f-cd81-484b-89a8-b75eb3911b1b |
  6. | pm_address | 1.2.3.4 |
  7. | interfaces | [{u'datapath_id': u'0', u'id': 1, |
  8. | | u'port_no': 0, |
  9. | | u'address': u'aa:bb:cc:dd:ee:ff'}] |
  10. | prov_vlan_id | None |
  11. | cpus | 1 |
  12. | memory_mb | 512 |
  13. | prov_mac_address | aa:bb:cc:dd:ee:ff |
  14. | service_host | ubuntu |
  15. | local_gb | 10 |
  16. | id | 1 |
  17. | pm_user | ipmi |
  18. | terminal_port | None |
  19. +------------------+--------------------------------------+