ホストOS(CentOS7)に直接OpenStackを入れると、失敗した時が面倒なので、KVM上のCentOS7にOpenStackをRDOを使ってインストールしてみました。構成は最も単純な、NIC 1枚のall-in-one構成です。
CentOS 7をKVM上にインストール
ホストOSにはKVM環境がインストールされている状態を前提とし、今回は、virt-intall コマンドを使ってGUIを使わずに一気にOSをインストールします。
CentOS 7のインストールメディア(ISOファイル)を/tmp/にダウンロードしておきます。
# ls /tmp/ CentOS-7-x86_64-DVD-1511.iso
Kickstartを使って自動インストールするために、以下のファイルを/tmp/centos7.ks.cfgとして作成します。
#version=RHEL7 install cdrom text cmdline skipx lang en_US.UTF-8 keyboard --vckeymap=jp106 --xlayouts=jp timezone Asia/Tokyo --isUtc --nontp network --activate --bootproto=dhcp --noipv6 zerombr bootloader --location=mbr clearpart --all --initlabel part / --fstype=xfs --grow --size=1 --asprimary --label=root rootpw --plaintext password auth --enableshadow --passalgo=sha512 selinux --disabled firewall --disabled firstboot --disabled reboot %packages %end
virt-installコマンドをインスールします。
# yum install -y virt-install
virt-install実行するためのスクリプト/root/virt-install-centos7.shを作成します。(ファイルには実行権限をつけてください)
–ram はホストのメモリに応じて適切に変更してください。以下は約20Gを割り当てています。
virt-install \ --name centos7 \ --hvm \ --virt-type kvm \ --ram 20480 \ --vcpus 4 \ --cpu host --arch x86_64 \ --os-type linux \ --os-variant rhel7 \ --boot hd \ --disk pool=default,size=120,format=qcow2 \ --network network=default \ --graphics none \ --serial pty \ --console pty \ --location /tmp/CentOS-7-x86_64-DVD-1511.iso \ --initrd-inject /tmp/centos7.ks.cfg \ --extra-args "inst.ks=file:/centos7.ks.cfg console=ttyS0"
インストールを開始します。
# /root/virt-install-centos7.sh
数十分でインストールが完了し、ログインプロンプトが出てくるので、rootでログインします。パスワードはpasswordです。
※ ホストに戻りたい場合は Ctrl + ] で抜けられます。VMのコンソールに入りたい場合は virsh console centos7 で入れます。
インストール完了後、VMのIPを固定します。今回私が使ったKVMのNATは192.168.122.0/24セグメントで、GWは192.168.122.1でした。よって、VMには192.168.122.2を割り当てることにします。
/etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを以下のように設定しました。HWADDRやUUID等は環境依存なので、以下とあわせる必要はありません。
NAME="eth0" HWADDR=52:54:00:AA:AA:AA ONBOOT=yes NETBOOT=yes UUID="38b16985-2ee6-485c-9558-118877711111" IPV6INIT=no BOOTPROTO=static IPADDR=192.168.122.2 NETMASK=255.255.255.0 GATEWAY=192.168.122.1 TYPE=Ethernet DEFROUTE=yes IPV4_FAILURE_FATAL=no PEERDNS=yes PEERROUTES=yes
ネットワークを再起動します。
# systemctl restart network
OSをアップデートします。カーネルもアップデートされると思うので、一旦再起動します。
# yum update # shutdown -r now
OpenStackのインストール
※/etc/hosts に自ホスト名の登録がないとインストール後にうまく動かないので注意してください。
RDOを使ってインストールしていきます。
# yum install https://repos.fedorapeople.org/repos/openstack/openstack-liberty/rdo-release-liberty-2.noarch.rpm # yum install openstack-packstack # systemctl disable NetworkManager # systemctl stop NetworkManager
packstackの設定ファイル(answerファイル)を作成する。
# packstack --gen-answer-file=answers.txt --allinone --default-password=hogehoge --nagios-install=n --os-ceilometer-install=n --os-swift-install=n --provision-demo=n --os-neutron-ovs-bridge-mappings=extnet:br-ex --os-neutron-ovs-bridge-interfaces=br-ex:eth0 --os-neutron-ml2-type-drivers=vxlan,flat,vlan,gre --os-neutron-ml2-tenant-network-type=vxlan,vlan,gre
OpenStackをインストールする
# packstack --answer-file=answers.txt ~省略~ Applying Puppet manifests [ DONE ] Finalizing [ DONE ] **** Installation completed successfully ****** Additional information: * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack component s. * File /root/keystonerc_admin has been created on OpenStack client host 192.168.122.2. To use the command line tools you need to source the file. * To access the OpenStack Dashboard browse to http://192.168.122.2/dashboard . Please, find your login credentials stored in the keystonerc_admin in your home directory. * The installation log file is available at: /var/tmp/packstack/20160124-221929-25cjdB/openstack-setup.log * The generated manifests are available at: /var/tmp/packstack/20160124-221929-25cjdB/manifests
上記のように表示されれば完了です。ホストOSから192.168.122.2にブラウザでアクセスすれば、Horizonの画面が表示されます。admin/hogehoge でログインできます。
ネットワークの作成
VMが外部と通信できるように、最低限のネットワークを作成していきます。Horizonだと画面キャプチャが面倒なので、ここではコマンドラインでやります。
まずは、OpenStack API にアクセスするために、/root/keystonerc_admin を読み込みます。
# source /root/keystonerc_admin
コマンドプロンプトは以下のように変わりますが、本文では省略します。引き続きrootで作業していきます。
[root@localhost ~(keystone_admin)]#
外部(192.168.122.0/24)に接続するためのネットワークを作成します。
# neutron net-create external_network --name public --provider:network_type flat --provider:physical_network extnet --router:external --shared Created a new network: +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | dc9b4e69-fe9f-4e51-95bb-993e920c539f | | mtu | 0 | | name | public | | provider:network_type | flat | | provider:physical_network | extnet | | provider:segmentation_id | | | router:external | True | | shared | True | | status | ACTIVE | | subnets | | | tenant_id | b6f4124545c74c49b34d01d2bee0d8a6 | +---------------------------+--------------------------------------+
続けてサブネットを作ります。サブネットは外部NWで使っている192.168.122.0/24、floating IPの範囲は、192.168.122.50~250 とします。
# neutron subnet-create public 192.168.122.0/24 --name public_subnet --enable_dhcp=False --allocation-pool=start=192.168.122.50,end=192.168.122.250 --gateway=192.168.122.1 Created a new subnet: +-------------------+-------------------------------------------------------+ | Field | Value | +-------------------+-------------------------------------------------------+ | allocation_pools | {"start": "192.168.122.50", "end": "192.168.122.250"} | | cidr | 192.168.122.0/24 | | dns_nameservers | | | enable_dhcp | False | | gateway_ip | 192.168.122.1 | | host_routes | | | id | ba164dd2-adae-4032-92ff-c0dde2d39698 | | ip_version | 4 | | ipv6_address_mode | | | ipv6_ra_mode | | | name | public_subnet | | network_id | dc9b4e69-fe9f-4e51-95bb-993e920c539f | | subnetpool_id | | | tenant_id | b6f4124545c74c49b34d01d2bee0d8a6 | +-------------------+-------------------------------------------------------+
publicネットワークに繋げるルータを作成します。
# neutron router-create router-public Created a new router: +-----------------------+--------------------------------------+ | Field | Value | +-----------------------+--------------------------------------+ | admin_state_up | True | | distributed | False | | external_gateway_info | | | ha | False | | id | f327752b-ff18-4407-ae5d-6359b859af6e | | name | router-public | | routes | | | status | ACTIVE | | tenant_id | b6f4124545c74c49b34d01d2bee0d8a6 | +-----------------------+--------------------------------------+
ルータをpublicネットワークにつなげます。
# neutron router-gateway-set router-public public Set gateway for router router-public
次にプライベートネットワーク/サブネット(192.168.200.0/24(任意))を作成し、上記ルータに接続します。
# neutron net-create private_network --name private Created a new network: +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | efc08ebd-b37d-4044-8bde-0c9bbe0ec9bc | | mtu | 0 | | name | private | | provider:network_type | vxlan | | provider:physical_network | | | provider:segmentation_id | 42 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | b6f4124545c74c49b34d01d2bee0d8a6 | +---------------------------+--------------------------------------+ # neutron subnet-create private 192.168.200.0/24 --name private_subnet Created a new subnet: +-------------------+------------------------------------------------------+ | Field | Value | +-------------------+------------------------------------------------------+ | allocation_pools | {"start": "192.168.200.2", "end": "192.168.200.254"} | | cidr | 192.168.200.0/24 | | dns_nameservers | | | enable_dhcp | True | | gateway_ip | 192.168.200.1 | | host_routes | | | id | 1b843ed8-d09f-4421-a994-7801ae0330c0 | | ip_version | 4 | | ipv6_address_mode | | | ipv6_ra_mode | | | name | private_subnet | | network_id | efc08ebd-b37d-4044-8bde-0c9bbe0ec9bc | | subnetpool_id | | | tenant_id | b6f4124545c74c49b34d01d2bee0d8a6 | +-------------------+------------------------------------------------------+ # neutron router-interface-add router-public private_subnet Added interface 8e97fd0f-60c8-4232-a453-a641edb1f7fa to router router-public.
あとは、必要なイメージをglanceにアップロードし、キーペアを作成すれば、VMが起動できます。なお、デフォルトのセキュリティグループでは、VMへsshログインできないので、注意してください。
参考
- KVM に virt-install でコマンドラインだけで CentOS 7 を インストール
- OpenStack Liberty All In One Installation on CentOS 7
- OpenStack (Liberty) のデモ環境を作ってみた (RDO)
- Chapter 2. Packstack command-line client