Ubuntu 12.04 Server安装配置OpenNebula 3.8
这个帖子是为2011年11月所发布的《 Ubuntu 11.04 Server安装配置OpenNebula 3.0》一文的升级版。本教程在Ubuntu 12.04 Server的32位版本和64位版本上都进行过测试。在设备匮乏的情况下,本教程也可以在一台笔记本电脑上完成(在这种情况下,业务内网和管理内网合并成一个网络)。文章中嵌入的图片可能看得不是很清楚,可以点击图片看到清晰大图。
[网络拓扑]
存储设备(可以是FC SAN,可以是磁盘阵列,可以是管理节点上的本地硬盘,也可以是基于MooseFS或者Ceph的分布式文件系统)通过直连管理节点,并挂载为管理节点上的一个目录/srv。
管理节点和计算节点各有两个网卡,其中一个网卡连接业务内网,另外一个网卡连接存储内网。在条件允许的情况下,建议业务内网和存储内网都使用万兆网。在不能全面使用万兆网的情况下,建议管理节点(尤其是管理节点上的存储网络)连接到交换机的万兆网口,计算节点连接到交换机的千兆网口。
业务内网的IP段为 192.168.1.*,存储内网的IP段为192.168.2.*。管理节点的IP地址为192.168.1.1和192.168.2.1。
[管理节点的配置]
全新安装的Ubuntu 12.04 Server操作系统,安装的时候同时安装OpenSSH Server和LAMP Server。将eth0的IP配置为192.168.1.1,将eth1的IP配置为192.168.1.2。
安装必要的软件包:
sudo apt-get install libsqlite3-dev libxmlrpc-c3-dev g++ ruby libopenssl-ruby libssl-dev ruby-dev libxml2-dev libmysqlclient-dev libmysql++-dev libsqlite3-ruby libexpat1-dev rake rubygems libxml-parser-ruby1.8 libxslt1-dev genisoimage scons mysql-server nfs-kernel-server rails thin curl
sudo gem install nokogiri rake xmlparser json thin sequel sinatra sinatra-sequel sqlite3 mysql
创建cloud组和oneadmin用户:
sudo mkdir -p /srv/cloud/
sudo groupadd -g 10000 cloud
sudo useradd -u 10000 -g cloud -m oneadmin -d /srv/cloud/one -s /bin/bash
sudo passwd oneadmin
sudo chown -R oneadmin:cloud /srv/cloud/
为oneadmin用户配置无密码登陆:
su -l oneadmin
ssh-keygen
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
echo “StrictHostKeyChecking no” > ~/.ssh/config
exit
配置NFS服务:
sudo pico /etc/exports
增加一行内容:
/srv/cloud 192.168.2.*(rw,fsid=0,nohide,sync,root_squash,no_subtree_check)
启动NFS服务:
sudo /etc/init.d/nfs-kernel-server start
需要注意的是,如果/srv本来就是由MooseFS或者Ceph等分布式文件系统挂载过来的,就不需要在这里再次export出去了。
创建MySQL数据库:
mysql -u root -p
CREATE USER ‘oneadmin’@’localhost’ IDENTIFIED BY ‘oneadmin’;
CREATE DATABASE opennebula;
GRANT ALL PRIVILEGES ON opennebula.* TO ‘oneadmin’ IDENTIFIED BY ‘oneadmin’;
quit;
从http://downloads.opennebula.org下载最新版本的OpenNebula软件(OpenNebula 3.8.1 tarball),放在oneadmin用户的~目录下:
su -l oneadmin
tar -zxvf opennebula-3.8.1.tar.gz
cd opennebula-3.8.1
scons sqlite=no mysql=yes
./install.sh -u oneadmin -g cloud -d /srv/cloud/one
编辑~/.bash_profile,设置一些环境变量
export ONE_LOCATION=/srv/cloud/one
export ONE_AUTH=$ONE_LOCATION/.one/one_auth
export ONE_XMLRPC=http://localhost:2633/RPC2
export PATH=$ONE_LOCATION/bin:/usr/local/bin:/var/lib/gems/1.8/bin/:$PATH
执行.bash_profile,使得这些环境变量生效:
source ~/.bash_profile
编辑~/.one/one_auth,设置OpenNebula的用户名和密码:
mkdir ~/.one
echo “oneadmin:YOUR_PASSWORD” > ~/.one/one_auth
chmod 640 ~/.one/one_auth
编辑~/etc/oned.conf,设置OpenNebula所使用的数据库参数:
# DB = [ backend = "sqlite" ]
# Sample configuration for MySQL
DB = [ backend = "mysql",
server = "localhost",
port = 0,
user = "oneadmin",
passwd = "oneadmin",
db_name = "opennebula" ]
启动OpenNebula服务:
one start
关闭OpenNebula服务:
one stop
编辑~/etc/sunstone-server.conf,配置管理界面SunStone的相关参数。如果您需要从管理节点以外的节点访问SunStone管理界面,建议将Server Configuration部分的host参数配置为192.168.1.1。保存该配置之后,使用如下命令启动SunStone服务:
sunstone-server start
这时您就可以通过http://192.168.1.1:9869/来访问SunStone管理界面了。您需要使用您在~/.one/one_auth文件中所设置的用户名和密码来登陆SunStone管理界面。如果您需要停止SunStone服务,可以使用如下命令:
sunstone-server stop
编辑~/etc/occi-server.conf,配置用户自助服务界面的相关参数。同样,如果您需要从管理界点以外的节点访问用户自助服务门户,建议将host参数配置为192.168.1.1。保存该配置之后,使用如下命令启动OCCI服务:
occi-server start
这时您就可以通过http://192.168.1.1:4567/ui来访问用户自助服务界面了。如果您需要停止OCCI服务,可以使用如下命令:
occi-server stop
SunStone管理界面和OCCI用户自助服务界面都提供了多语言支持。简体中文的语言包是我制作的,该语言包已经被提交给OpenNebula,并且会被包含在即将发布的OpenNebula 4.0版本中。使用OpenNebula 3.8版本的用户,如果需要简体中文界面的话,可以从我的博客下载这个语言包。
在下面的介绍中,我们假定您已经依照上面的链接下载并安装了简体中文界面。在~/etc/sunstone-server.conf和~/etc/occi-server.conf中,您需要将lang参数配置为zh_CN,并且重新启动sunstone-server和occi-server两个服务。这时您的SunStone管理界面和OCCI自助服务门户都会被自动切换到简体中文界面。
最后,您需要以超级用户身份执行/srv/cloud/one/share目录下的install_novnc.sh脚本,使得SunStone管理界面和OCCI用户自助服务界面支持通过VNC连接到虚拟机控制台。
[计算节点的配置]
全新安装的Ubuntu 11.04 Server操作系统,安装的时候同时安装OpenSSH Sever和Virtualization。将eth0的IP配置为192.168.1.2,将eth1的IP配置为192.168.2.2。
首先安装必要的软件包:
(重要说明,如果在计算节点上没有安装ubuntu-vm-builder和ruby这两个软件包,用onehost create命令可以添加该计算节点,但是其状态会显示为err。)
sudo apt-get install qemu-kvm libvirt-bin bridge-utils ubuntu-vm-builder ruby nfs-common
编辑/etc/fstab,配置NFS客户端:(假定OpenNebula管理节点的IP是192.168.1.1)
192.168.2.1:/srv/cloud /srv/cloud nfs defaults 0 0
创建NFS目录并挂载NFS文件系统:
sudo mkdir -p /srv/cloud
sudo mount /srv/cloud
创建cloud组和oneadmin用户:
sudo groupadd -g 10000 cloud
sudo useradd -u 10000 -g cloud -m oneadmin -s /bin/bash
sudo usermod -d /srv/cloud/one oneadmin
sudo passwd oneadmin
sudo chown oneadmin:cloud /srv/cloud/
编辑/etc/libvirt/libvirtd.conf配置libvirt,将操作权限授予给cloud组:
unix_sock_group = “cloud”
编辑/etc/libvirt/qemu.conf配置libvirt,设置VNC:
vnc_listen = “0.0.0.0″
重启libvirt:
sudo service libvirt-bin restart
sudo chown :cloud /var/run/libvirt/libvirt-sock
编辑/etc/network/interface,根据实际的网络状况配置网桥。在这里我们使用eth0连接到业务内网,使用192.168.1.*的内网IP。
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
重启一下网络:
sudo service networking restart
[计算节点的管理]
登录到SunStone管理界面,在“基础设施-》物理机”页面点击“+新增”按钮添加计算节点。在“名称”对话框中输入计算节点业务内网的IP 192.168.1.2,其他输入框中使用缺省值即可,然后点击“创建”按钮进行确认。如果计算节点已经按照前一节的描述正确配置好的话,新增加的计算节点会出现在物理机列表里。
我们可以通过命令行界面查看计算节点是否添加成功:
onehost list
这时候应该可以看到192.168.1.2出现在计算节点列表里面。如果计算节点配置正确的话,它的状态(STAT)应该显示为“on”。如果计算节点的状态显示为“err”,说明计算节点没有配置好。这时候可以做三个检查:(1)在管理节点上是否可以用无密码模式SSH登录到计算节点,(2)计算节点是否已经安装好ubuntu-vm-builder和ruby,和(3)在计算节点上oneadmin用户是否有权限控制KVM。
[管理磁盘镜像]
登录到SunStone管理界面,在“应用市场”页面选中“ttylinux-kvm”,并点击右上角的“导入本地基础设施”按钮(中文语言包翻译为“从本地基础设施导入”,属于翻译错误)。无需改动弹出对话框内的任何内容,直接点击“创建”按钮即可。OpenNebula会在后台自动地下载一个预先配置好的ttylinux操作系统映像文件,并注册到OpenNebula数据仓库中。您可以随时在SunStone管理界面的“虚拟资源-》映像”页面中查看现有的磁盘映像及其状态。
在OpenNebula中,磁盘映像有三种类型:OS、CD-ROM、Datablock。OS型磁盘映像等价于AWS中的AMI,也等价与Eucalyptus中的EMI;CD-ROM型磁盘映像可以理解为一个ISO文件;Datablock型磁盘映像等价于AWS和Eucalyptus中的弹性块存储EBS。
ttylinux是一个精简版的Linux,其磁盘映像比较小,应该可以在很短的时间内完成下载。此后您还可以从应用市场中导入CentOS、Ubuntu、Debian等等由官方发布的操作系统磁盘映像。
我们也可以自己制作操作系统磁盘映像。在这里我们推荐您使用VirtualBox这个工具来完成操作系统的安装,安装操作系统时选择磁盘映像格式为VDI。操作系统安装完毕后,可以用下面这个命令将VDI磁盘映像格式转换成RAW磁盘映像格式:
VBoxManage clonehd file_name.vdi file_name.img –format raw
将RAW格式的磁盘映像拷贝到一台安装有QEMU的Linux机器上,用下面这个命令将RAW磁盘映像格式转换成QCOW2磁盘映像格式:
qemu-img convert file_name.img -O qcow2 file_name.qcow2
将转换过的磁盘映像(RAW格式或者QCOW2格式)拷贝到管理节点的某个目录里,例如/srv/cloud/one/images。OpenNebula缺省地认为来自用户硬盘的磁盘映像是不安全的,从而拒绝将其导入到数据仓库中。为了让OpenNebula能够导入用户硬盘上的磁盘映像,我们首先需要修改数据仓库的属性。在管理节点上执行如下命令,可以修改default数据仓库的属性:
onedatastore update 1
在vi编辑窗口中添加一行配置,存盘退出。
SAFE_DIRS=”/srv/cloud/one/images”
登录到SunStone管理界面,在“虚拟资源-》映像”页面中点击“+新增”按钮,在弹出的创建磁盘映像对话框中设定要导入的磁盘映像名称、类型、持久性、驱动程序(raw或者企鹅cow)、磁盘映像文件在管理节点上的路径等等信息,然后点击“创建”按钮。OpenNebula就会在后台将指定的磁盘映像倒入到相应的数据仓库中。您可以随时在SunStone管理界面的“虚拟资源-》映像”页面中查看现有的磁盘映像及其状态。
如果一个磁盘映像是持久性的,那么在虚拟机运行期间所执行的任何磁盘操作,在虚拟机停机之后依然会保存在磁盘映像中。如果一个磁盘映像是临时性的,那么在虚拟机运行期间所执行的任何磁盘操作,在虚拟机停机之后不会保存在磁盘映像中。
[管理网络]
登录到SunStone管理界面,在“基础设施-》虚拟网络”页面点击“+新增”按钮,即可定义可以分配给虚拟机使用的网络。您需要输入该网络的名称(任意字符串)、虚拟网络模式(缺省值为基于普通网桥的网络,还可以选择802.1Q、ebtables、Open vSwitch、VMWare等等网络类型)、网桥、物理网卡、可用的IP地址范围等等信息,然后点击“创建”按钮即可生成又gi额网络。您可以俗世在SunStong管理界面的“基础设施-》虚拟网络”页面中查看现有的网络定义及其状态。
您也可以通过命令行的方式来定义一个网络。例如您可以使用文本编辑软件创建一个small_network.net文件,该文件的内容定义了一个网络:
NAME = “Small Network”
TYPE = FIXED
BRIDGE = br1
LEASES = [ IP="192.168.1.5"]
LEASES = [ IP="192.168.1.6"]
LEASES = [ IP="192.168.1.7"]
LEASES = [ IP="192.168.1.8"]
LEASES = [ IP="192.168.1.9"]
LEASES = [ IP="192.168.1.10"]
LEASES = [ IP="192.168.1.11"]
LEASES = [ IP="192.168.1.12"]
LEASES = [ IP="192.168.1.13"]
LEASES = [ IP="192.168.1.14"]
LEASES = [ IP="192.168.1.15"]
将如上所定义的网络添加到系统:
onevnet create small_network.net
列出系统上所有的网络(刚刚创建的Small Network 的ID可能是0):
onevnet list
[管理虚拟机模板]
在OpenNebula中,操作系统磁盘映像相当于安装有操作系统的可启动硬盘。在创建虚拟机之前,还需要对虚拟机的CPU、内存、网络、显示器、输入设备等等进行定义。在OpenNebula中,我们将这些配置描述称为虚拟机模板。
用户可以通过SunStone管理界面方便地定制虚拟机模板。在“虚拟资源-》模板”页面点击“+新增”按钮,在弹出的创建VM模板中设定模板名称、内存大小、CPU数量(VM在宿主机上实际占用的CPU,精确到0.1)、vCPU数量(VM内部显示的CPU数量,为正整数)、处理器构架(i686或者x86_64)、磁盘映像(从列表中选择一个磁盘映像)、驱动程序(RAW或者QCOW2)、选择网络(从列表中选择一个可用网络)、图形界面(VNC、SDN、SPICE)等等,然后点击“创建”按钮即可生成虚拟机模板。您可以随时在SunStone管理界面的“虚拟资源-》模板”页面中查看现有的虚拟机模板及其状态。
如果您在虚拟机模板中使用了持久性的磁盘映像,你只能够基于该模板创建一个正在运行的虚拟机。这是因为一个持久型的磁盘映像只能够同时被应用到一台正在运行的虚拟机上。如果您在虚拟机模板中使用的是临时性的磁盘映像,则可以同时基于该模板创建多个虚拟机。
您也可以通过命令行来定义一个模板,编辑ttylinux.one定义虚拟机参数。这里我们使用了一个ttylinux的磁盘映像,该磁盘映像可以从下面这个链接获得。
wget http://dev.opennebula.org/attachments/download/170/ttylinux.tar.gz
tar zxvf ttylinux.tar.gz
模板文件ttylinux.one的内容如下:
NAME = ttylinux
CPU = 0.1
MEMORY = 64
DISK = [
source = "/srv/cloud/one/one-templates/ttylinux.img",
target = "hda",
readonly = "no" ]
NIC = [ NETWORK_ID = 0]
GRAPHICS = [ TYPE = "VNC"]
FEATURES=[ acpi="no" ]
在系统中创建该虚拟机:
onevm create ttylinux.one
列出系统上所有的虚拟机(刚刚创建的虚拟机的ID可能是0):
onevm list
如上命令列出了系统上所有虚拟机的状态,包括运行这些虚拟机的计算节点。如果需要了解某个虚拟机的详细状况,可以使用onevm show VM_ID命令,例如:
onevm show 0
这个命令会列出ID为0的虚拟机的所有相关信息,包括运行该虚拟机的计算节点,VNC端口号等等。找到这个端口号(假定为5900),就可以通过VNC客户端连接到该虚拟机的控制台,例如:
vncviewer 192.168.1.2:5900
管理虚拟机
当虚拟机模板创建完毕后,您可以在SunStone管理界面的“虚拟资源-》模板”页面中选中一个虚拟机模板,并点击页面上方的“创建实例”按钮创建一个基于该模板的虚拟机。您也可以在“虚拟资源-》虚拟机”页面点击页面上方的“+新增”按钮,并在弹出的对话框中选择一个用于创建虚拟机的模板。
您可以在“虚拟资源-》虚拟机”页面随时查看您可管理的虚拟机列表及其状态,并通过页面上方的各种按钮进行虚拟机生命周期管理操作(例如暂停运行、继续运行、关机、重启、删除等等)。如果您在安装OpenNebula时设定了VNC支持,并且您所创建的虚拟机指定VNC作为控制台显示设备的话,在虚拟机列表中与该虚拟机相对应的VNC图标会被点亮,您可以点击该图标,直接在浏览器中通过VNC连接到该虚拟机的控制台。
[其他说明]
虚拟机的在线迁移,需要配置好所有计算节点的/etc/hosts和/etc/hostname,确保在所有在计算节点上都能够根据主机名来寻找到其他计算节点,不然的话在线迁移会失败。此外,所有节点(包括控制节点和计算节点)之间需要配置无密码SSH登录。
数据库的用户名和密码尽可能不要包含:和@字符,否则会出现数据库连接错误。
我会在后续的教程中陆续介绍OpenNebula的更多配置和使用方法。