如何使用API创建OpenStack虚拟机?

日期: 2016-05-19 作者:Walker Rowe翻译:张冀川 来源:TechTarget中国 英文

基础OpenStack平台安装完成后,还需要将虚拟机镜像加载到Glance资源库并创建虚拟机,系统才成正常运行。大多数人仍想使用API而非命令行创建OpenStack虚拟机。API支持几种语言,那么如何使用Python OpenStack API将虚拟机镜像加载到Glance资源库并创建虚拟机呢? 创建OpenStack 虚拟机的前提条件 为编写程序创建OpenStack虚拟机,需要安装并运行如下OpenStack服务: 身份认证服务 镜像服务 计算服务 至少在镜像服务中加载一个ISO镜像 安装OpenStack Neutron网络 在计算服务配置中,OpenStack默认安装Nov……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

基础OpenStack平台安装完成后,还需要将虚拟机镜像加载到Glance资源库并创建虚拟机,系统才成正常运行。大多数人仍想使用API而非命令行创建OpenStack虚拟机。API支持几种语言,那么如何使用Python OpenStack API将虚拟机镜像加载到Glance资源库并创建虚拟机呢?

创建OpenStack 虚拟机的前提条件

为编写程序创建OpenStack虚拟机,需要安装并运行如下OpenStack服务:

  • 身份认证服务
  • 镜像服务
  • 计算服务
  • 至少在镜像服务中加载一个ISO镜像

安装OpenStack Neutron网络

在计算服务配置中,OpenStack默认安装Nova网络,这是传统的网络方式,但在Linux上仅适用于物理网络适配器,不适合虚拟网络。因此这种方式不适合Linux虚拟机,因此你需要安装OpenStack Neutron网络

如果你试图使用Nova在Linux虚拟机上创建一个网络:会在下面这个步骤卡住:

nova network-create simple --bridge (网桥名) --multi-host T --fixed-range-v4 (ip 范围)

没有网络,无法创建OpenStack虚拟机。就Python应用编程接口而言,将会丢失一个可以转到server.create()的网络。

在开始前,要创建OpenStack Neutron网络。在创建OpenStack Neutron网络时一定要当心,因为这是一个复杂的过程而且需要对子网、IP范围以及基本的桥接网络有一个总体的了解。而且我在运行安装程序时,遇到了Kilo版本的bug,导致无法在Neutron数据库中创建任何表。错误记录在/var/log/neutron/neutron-server.log日志中。为解决该问题,需要运行如下命令:

neutron-db-manage --config-file=/etc/neutron/neutron.conf upgrade head

安装完OpenStack Neutron网络后,应该可以使用如下命令查看网络信息:nova net-list

安装Python API

接下来安装Python以及pip包管理器。完成后运行如下命令:

pip install python-openstackclient

创建一个密钥对

为了使用安全Shell访问OpenStack虚拟机,需要有一个密钥对。运行如下命令:

ssh-keygen

nova keypair-add --pub-key ~/.ssh/id_rsa.pub demo-key

nova keypair-list

+----------+-------------------------------------------------+

| Name     | Fingerprint                                     |

+----------+-------------------------------------------------+

| demo-key | 59:af:5e:eb:a4:df:c1:11:83:41:02:29:5e:a9:87:de |

+----------+-------------------------------------------------+

编写代码

配置如下环境变量:

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=ADMIN_PASS

export OS_AUTH_URL=http://controller:35357/v2.0

在某个地方创建一个脚本目录并使用精确的内容创建credentials.py:

def get_nova_credentials_v2():

   d = {}

   d['version'] = '2'

   d['username'] = os.environ['OS_USERNAME']

   d['api_key'] = os.environ['OS_PASSWORD']

   d['auth_url'] = os.environ['OS_AUTH_URL']

   d['project_id'] = os.environ['OS_TENANT_NAME']

   return d

将此导入到你编写的Python程序启动虚拟机

查看镜像

如果已经将一个ISO镜像加载到Glance中,可以使用如下代码确认其路径:

glance image-list

+--------------------------------------+---------------------+-------------+------------------+----------+--------+

| ID                                   | Name                | Disk Format | Container Format | Size     | Status |

+--------------------------------------+---------------------+-------------+------------------+----------+--------+

| 99795654-5503-4dc5-b97f-a14d645a98a1 | cirros-0.3.3-x86_64 | qcow2       | bare             | 13200896 | active |

+--------------------------------------+---------------------+-------------+------------------+----------+--------+

查看配置信息

在安装时OpenStack会加载配置信息。有不同的虚拟机模板而且与在Amazon EC2以及其他平台上看到的完全一样。这些配置是内存、vCPU、磁盘容量等的组合,定义了虚拟机的大小及容量。可以使用如下命令列出配置信息:

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      |

+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+

我们使用代码创建一个OpenStack虚拟机,在源头进行修改。我对必须进行修改的部分进行了加粗显示:

#!/usr/bin/env python

import time

import os

execfile('credentials.py')

from novaclient.client import Client

try:

       credentials = get_nova_credentials_v2()

       nova_client = Client(**credentials)


       image = nova_client.images.find(name="cirros-0.3.3-x86_64")

       flavor = nova_client.flavors.find(name="m1.tiny")

       net = nova_client.networks.find(label="demo-net")

       nics = [{'net-id': net.id}]

       instance = nova_client.servers.create(name="vm2", image=image,

                                         flavor=flavor, key_name="demo-key",nics=nics)

       print("Sleeping for 5s after create command")

       time.sleep(5)

       print("List of VMs")

       print(nova_client.servers.list())

finally:

       print("Execution Completed")

以下内容取决于设置时使用了什么值:

    flavor = nova_client.flavors.find(name="m1.tiny")

    net = nova_client.networks.find(label="demo-net")

key_name="demo-key"

现在你可以运行Python代码并查看是否创建了一个虚拟机。显然如果没有成功,那么必须回退到OpenStack安装过程以查看哪部分有问题。基于个人经验,可能要尝试几次才能成功,因为配置有很多部分构成。

作者

Walker Rowe
Walker Rowe

资深IT从业人员

翻译

张冀川
张冀川

TechTarget中国特约专家,任职于某国企信息中心,负责数据中心硬件基础设施及信息系统运维管理工作,对虚拟化及云计算技术有浓厚兴趣,并在工作中积极应用

相关推荐