基础OpenStack平台安装完成后,还需要将虚拟机镜像加载到Glance资源库并创建虚拟机,系统才成正常运行。大多数人仍想使用API而非命令行创建OpenStack虚拟机。API支持几种语言,那么如何使用Python OpenStack API将虚拟机镜像加载到Glance资源库并创建虚拟机呢? 创建OpenStack 虚拟机的前提条件 为编写程序创建OpenStack虚拟机,需要安装并运行如下OpenStack服务: 身份认证服务 镜像服务 计算服务 至少在镜像服务中加载一个ISO镜像 安装OpenStack Neutron网络 在计算服务配置中,OpenStack默认安装Nov……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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安装过程以查看哪部分有问题。基于个人经验,可能要尝试几次才能成功,因为配置有很多部分构成。
相关推荐
-
VMware-OpenStack合作伙伴关系不断演变
VMware最近对OpenStack标准集的支持转变为双管齐下的方法,VMware-OpenStack集成主要 […]
-
OpenStack及Openshift旨在简化VM和容器管理
与机相比,IT人员可更快地启动和关闭容器,而且,容器需要更少开销,基于此,目前这种技术已经有几种实际用例。然而 […]
-
VMware:Kubernetes、vRealize Automation令VIO4.0增值
VMware Integrated OpenStack 4.0增加了一些新功能用于改善性能、网络以及可扩展性,但用户需要付费才能使用这些新增加的功能。
-
OpenStack项目:哪一个VMware贡献最多?
曾经有一段时间,VMware只专注于专有的软件上。随着IT世界的扩展,VMware的视野也越来越大。除了云服务、网络虚拟化和软件定义存储之外,VMware已经成为许多开源项目,包括OpenStack的重要贡献者。