创建新的 OpenStack Nova 实例类型

正在准备这篇博客的时候有位朋友刚好在 在 Ubuntu 上安装和配置 OpenStack Nova 里问到一个类似的问题:

koory – July 19th, 2011 10:18 am
vpsee你好!实例资源如何修改,实例默认启动内存都是512M,我想修改成1G,怎么操作?

OpenStack Nova 默认提供了一些虚拟机配置的实例类型,比如:

$ sudo nova-manage instance_type list
m1.medium: Memory: 4096MB, VCPUS: 2, Storage: 40GB, FlavorID: 3, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB
m1.large: Memory: 8192MB, VCPUS: 4, Storage: 80GB, FlavorID: 4, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB
m1.tiny: Memory: 512MB, VCPUS: 1, Storage: 0GB, FlavorID: 1, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB
m1.xlarge: Memory: 16384MB, VCPUS: 8, Storage: 160GB, FlavorID: 5, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB
m1.small: Memory: 2048MB, VCPUS: 1, Storage: 20GB, FlavorID: 2, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB

新建一个云实例(云虚拟机或云 VPS)的时候就从这些实例配置类型里面选择一个配置,然后以这个配置来启动云实例,这些默认的实例类型是固定的,内存、CPU、硬盘等参数都是固定的,默认只有5个类型:m1.small, m1.tiny, m1.medium, m1.large 和 m1.xlarge. 如果我们需要一个 256MB,硬盘 10GB,VCPU 1个的云实例怎么办呢?可以用 nova-manage instance_type create 创建一个新的实例类型,比如创建一个名字为 m1.xtiny 的新类型:

$ sudo nova-manage instance_type create m1.xtiny 256 1 10 0 0 0
m1.xtiny created

上面 256 1 10 0 0 0 这一串分别表示:内存,VCPU,硬盘大小,SWAP 大小,RXTX quotas 和 RXTX cap. 如果不记得这些参数的顺序的话,可以看看联机的 nova-manage instance_type create 帮助说明:

$ sudo nova-manage instance_type create
Possible wrong number of arguments supplied
instance_type create: Creates instance types / flavors
           arguments: name memory vcpus local_gb flavorid [swap] [rxtx_quota]
                      [rxtx_cap]

然后查看一下 m1.xtiny 是否创建成功:

$ sudo nova-manage instance_type list
...
m1.xtiny: Memory: 256MB, VCPUS: 1, Storage: 10GB, FlavorID: 0, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB
...

如果想删除刚刚创建的 m1.xtiny 也很容易:

$ sudo nova-manage instance_type delete m1.xtiny
m1.xtiny deleted

安装 OpenStack 基于 Web 的管理控制台

OpenStack 基于 Web 的管理控制台 OpenStack Dashboard 是用 Python 和 Django 框架写的,部署到生产环境比较麻烦,没有基于 PHP 的 web 程序那么直观,不过 OpenStack Dashboard 项目正在快速开发中,还不稳定,一般不会用到生产环境,所以想试玩的话用 Django 自带的 web server 就可以了。如果想部署到生产环境建议用 apache + mod_wsgi 的方式,这也是 django 官方建议部署 django app 的方式。

安装版本控制工具和 python 虚拟环境:

$ sudo apt-get install -y git bzr
$ sudo easy_install virtualenv

下载 openstack dashboard 源代码并运行 run_tests.sh:

$ git clone https://github.com/4P/openstack-dashboard.git
$ cd openstack-dashboard
$ sudo sh run_tests.sh

如果上面的最新 git 代码不好用,需要找旧版本的 openstack dashboard,需要使用 bzr 从 launchpad 下载(今年6月份 openstack dashboard 项目从 launchpad 移到 github)。最新的 64 版本使用了最新的 django 1.3,安装没问题但是访问的时候显示 ViewDoesNotExist 错误,所以 VPSee 建议使用旧的 46 版本(django 1.2.4):

$ bzr init-repo .
$ bzr branch lp:openstack-dashboard
$ cd openstack-dashboard
$ bzr revert -r 46
$ sudo sh run_tests.sh

安装脚本里用到了 git,如果你的网络环境需要代理才能上网的话需要配置一下 git 使用 http 代理服务器

对照 在 Ubuntu 上安装和配置 OpenStack Nova 一文并在 /home/vpsee/creds/novarc 文件里找到 NOVA_ACCESS_KEY, NOVA_SECRET_KEY 等相关信息填写以下参数:

$ vi openstack-dashboard/local/local_settings.py
...
NOVA_DEFAULT_ENDPOINT = 'http://172.16.39.111:8773/services/Cloud'
NOVA_DEFAULT_REGION = 'nova'
NOVA_ACCESS_KEY = '22781cf0-b8b6-44e8-86c8-baf8d3827662:mycloud'
NOVA_SECRET_KEY = '2dc4007f-3425-417b-a598-33a190d2f995'
NOVA_ADMIN_USER = 'vpsee'
NOVA_PROJECT = 'mycloud'
...

同步数据库的时候需要创建一个 superuser 访问 django web:

$ source .dashboard-venv/bin/activate

$ sudo tools/with_venv.sh dashboard/manage.py syncdb
Creating table auth_permission
...
Creating table registration_registrationprofile

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no):

$ sudo tools/with_venv.sh dashboard/manage.py runserver 172.16.39.111:8000
Validating models...
0 errors found

Django version 1.2.4, using settings 'dashboard.settings'
Development server is running at http://172.16.39.111:8000/
Quit the server with CONTROL-C.

现在打开浏览器输入 http://172.16.39.111:8000/ 就应该可以看到登录界面,输入刚才创建的 superuser 的用户名和密码后就可以进入控制台了。控制台的功能有限,没有命令行那么丰富,不过基本的创建、查看、关闭 instance 功能还是有的:

openstack dashboard