Openstack学习笔记(五):创建实例

启动一个实例

创建公共网络

  • 创建网络
    [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的域名,可以解决问题

推荐阅读更多精彩内容