OpenStack 是管理虛擬機的開源雲平台,由多組件協同運作。本文記錄在單機(Controller)上部署 OpenStack(Diablo 版本)的完整流程,採用 EC2 相容認證,適合測試與學習環境。生產環境仍需考慮高可用架構、網路拓撲、儲存後端等進階議題。
eth0 外網管理,eth1 內網數據平面(橋接至 br100)。$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install bridge-utils
/etc/network/interfacesauto eth0
iface eth0 inet static
address 192.168.200.21
netmask 255.255.255.0
gateway 192.168.200.10
auto br100
iface br100 inet static
bridge_ports eth1
bridge_stp off
bridge_maxwait 0
bridge_fd 0
address 10.200.200.2
netmask 255.255.255.0
sudo /etc/init.d/networking restart 生效。
# 消息佇列與 Python 依賴
$ sudo apt-get install -y rabbitmq-server python-greenlet python-mysqldb
# Nova 全家桶
$ sudo apt-get install nova-volume nova-vncproxy nova-api nova-ajax-console-proxy \
nova-doc nova-scheduler nova-objectstore nova-network nova-compute
# Glance 映像服務
$ sudo apt-get install glance
# EC2 相容工具
$ sudo apt-get install -y euca2ools unzip
$ MYSQL_PASS=nova
$ sudo debconf-set-selections <<EOF
mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS
mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS
mysql-server-5.1 mysql-server/start_on_boot boolean true
EOF
$ sudo apt-get install -y mysql-server
$ sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
$ sudo service mysql restart
$ NOVA_PASS=notnova
$ sudo mysql -uroot -p$MYSQL_PASS -e 'CREATE DATABASE nova;'
$ sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO 'nova'@'%' WITH GRANT OPTION;"
$ sudo mysql -uroot -p$MYSQL_PASS -e "SET PASSWORD FOR 'nova'@'%' = PASSWORD('$NOVA_PASS');"
/etc/nova/nova.conf--dhcpbridge_flagfile=/etc/nova/nova.conf
--dhcpbridge=/usr/bin/nova-dhcpbridge
--logdir=/var/log/nova
--state_path=/data/openstack/nova
--instances_path=/data/openstack/nova/instances
--lock_path=/var/lock/nova
--force_dhcp_release=True
--use_deprecated_auth
--iscsi_helper=tgtadm
--verbose
--scheduler_driver=nova.scheduler.simple.SimpleScheduler
--network_manager=nova.network.manager.FlatDHCPManager
--my_ip=10.200.200.2
--public_interface=eth0
--sql_connection=mysql://nova:notnova@localhost/nova
--libvirt_type=kvm
--api_paste_config=/etc/nova/api-paste.ini
--image_service=nova.image.glance.GlanceImageService
--ec2_dmz_host=192.168.200.21
--ec2_url=https://192.168.200.21:8773/services/Cloud
--rabbit_host=localhost
--glance_api_servers=10.200.200.2:9292
--flat_network_bridge=br100
--flat_interface=eth1
--flat_network_dhcp_start=10.200.200.51
--fixed_range=10.200.200.0/24
--flat_injected=False
--multi_host=1
--libvirt_use_virtio_for_bridges
注意:/data/openstack/nova 需預先建立並歸屬 nova 用戶。
/etc/glance/glance-api.conf:修改 filesystem_store_datadir 指定映像儲存路徑,權限歸 glance。/etc/glance/glance-registry.conf:設定 sql_connection = mysql://nova:notnova@localhost/glance(需先建立 glance DB)。$ sudo chown -R root:nova /etc/nova
$ sudo chmod 640 /etc/nova/nova.conf
$ sudo restart libvirt-bin
$ sudo restart nova-network nova-compute nova-api nova-objectstore nova-scheduler
$ sudo restart glance-registry glance-api
註:nova-volume 需獨立 VG,暫不啟動。
$ sudo nova-manage db sync
$ sudo nova-manage user admin test
# 輸出 EC2_ACCESS_KEY / EC2_SECRET_KEY
$ sudo nova-manage project create test-proj test
$ sudo nova-manage network create --label=test-net \
--fixed_range_v4=10.200.200.0/24 --num_network=1 --network_size=256
$ sudo start nova-network nova-compute nova-scheduler
$ mkdir creds
$ sudo nova-manage project zipfile test-proj test creds/novacreds.zip
$ unzip creds/novacreds.zip -d creds/
$ source creds/novarc
每次新 Shell 需 source novarc,或寫入 ~/.bashrc。
$ euca-describe-availability-zones verbose
# 應顯示 nova, nova-network, nova-compute, nova-scheduler 均為 enabled
$ sudo nova-manage service list
$ sudo nova-manage network list
$ sudo apt-get install kvm-pxe
$ kvm-img create -f raw server.img 5G
$ sudo kvm -m 1024 -cdrom rhel5.iso -drive file=server.img,if=virtio,index=0 -boot d -net nic -net user -nographic -vnc :0
# 用 VNC 連線 192.168.200.21:0 完成 OS 安裝
在映像檔 /etc/rc.local 加入雲端初始化腳本(抓取 SSH 公鑰、設定主機名等)。
$ glance --verbose add name="rhel5" disk_format=raw is_public=true < server.img
$ glance index
$ euca-describe-images
$ euca-run-instances -t m1.tiny ami-XXXXXXXX
$ euca-describe-instances
觀察 /var/log/nova/ 下各服務日誌排查問題。