启动一个实例
创建公共网络
创建网络
[root@controller ~]# neutron net-create public --shared --provider:physical_network public --provider:network_type flat创建一个子网
[root@controller ~]# neutron subnet-create public 172.16.0.0/24 --name public --allocation-pool start=172.16.0.101,end=172.16.0.200 --dns-nameserver 8.8.8.8 --gateway 172.16.0.254
生成一个秘钥对
[root@controller ~]# ssh-keygen -q -N ""
[root@controller ~]# nova keypair-add --pub-key ~/.ssh/id_rsa.pub mkey
[root@controller ~]# nova keypair-list
添加安全组规则
- 允许ICMP
[root@controller ~]# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
- 允许ssh访问
[root@controller ~]# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
启动一个实例
-
确定实例选项
[root@controller ~]# nova flavor-list
[root@controller ~]# nova image-list
[root@controller ~]# neutron net-list
[root@controller ~]# nova secgroup-list
启动实例
[root@controller ~]# nova boot --flavor m1.small --image centos --nic net-id=0418a843-788a-43e6-ae4f-1f572664609f --security-group default --key-name mkey public-instance
[root@controller ~]# nova list
-
使用虚拟控制台访问
[root@controller ~]# nova get-vnc-console public-instance novnc
使用API接口新增虚拟机
机器环境
- windows10
- python3.5.2
这里使用python的openstack模块来进行相关操作,需要通过pip来进行安装,执行以下命令即可安装
pip install openstackclient
连接测试
- 通过openstack的connection模块进行连接,并获取token
from openstack import connection
auth_args= {'project_name': 'admin', 'project_domain_id': 'default', 'username': 'admin', 'auth_url': 'http://172.23.0.211:35357/v3', 'password': '000000', 'user_domain_id': 'default'}
cc=connection.Connection(**auth_args)
cc.authorize()
- 获取token后可以获取compute、network等的状态,具体方法可以在openstack\xxxx\v2_proxy.py查看,至此,API接口调试成功
for i in cc.compute.services():
print(i)
新增虚拟机
- 配置连接后在python执行以下命令以创建一个名为ssa的实例
IMAGE_NAME='centos'
FLAVOR_NAME='m1.small'
NETWORK_NAME='public'
KEY_NAME='mkey'
image=cc.compute.find_image(IMAGE_NAME)
flavor=cc.compute.find_flavor(FLAVOR_NAME)
networks=cc.network.find_network(NETWORK_NAME)
keypair=cc.compute.find_keypair(KEY_NAME)
server=cc.compute.create_server(name='ssa',image_id=image.id,flavor_id=flavor.id,networks=[{'uuid':networks.id}],key_name=keypair.name)
遇到问题
- api调用失败
按照openstack\connection.py文件里面的例子,只需要四个参数即可,但是实际执行会报错。与在controller上配置的一致,identity的v3版本还需要project_domain_id和user_domain_id这两个参数的,加上去之后正常,可以获取token
- 在windows调用API的时候某些IP还是使用的形如http://controller:5000 这种形式,会导致找不到地址而使接口调用失败,这时候需要编辑system32目录下的hosts文件,增加controller的域名,可以解决问题