用意するもの
ホスト名 | OS | eth0 | eth1 | gw |
---|---|---|---|---|
controller | CentOS6.5 | 192.168.1.41 | 192.168.11.41 | 192.168.1.1 |
compute | CentOS6.5 | 192.168.1.42 | 192.168.11.42 | 192.168.1.1 |
controller には nova-compute以外 すべてインストール
compute には nova-compute をインストールし ハイパーバイザにlxcを利用する
すべてを1台で実装することも可能であるが今回はcomputeだけ独立させる。
compute機にて
shell
echo "192.168.1.41 controller" >> /etc/hosts
echo "192.168.1.42 compute" >> /etc/hosts
sed -i "s/^HOSTNAME=.*/HOSTNAME=compute/g" /etc/sysconfig/network
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
controller機にて
shell
echo "192.168.1.41 controller" >> /etc/hosts
echo "192.168.1.42 compute" >> /etc/hosts
sed -i "s/^HOSTNAME=.*/HOSTNAME=controller/g" /etc/sysconfig/network
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
vi rdo-setup.sh
rdo-setup.sh#!/bin/bash #http://theruddyduck.typepad.com/theruddyduck/2014/02/install-and-ccnfigure-openstack-neutron.html #--- RDO RDO_URL=http://rdo.fedorapeople.org/openstack-icehouse/rdo-release-icehouse.rpm #--- EPEL EPEL_URL=http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm #--- CLOUD IMAGE CLOUD_IMAGE_URL[0]=https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-root.tar.gz CLOUD_IMAGE_URL[1]=http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-root.tar.gz #--- PUBLIC NETWORK WAN_IPADDRESS=192.168.1.41 WAN_GATEWAY=192.168.1.1 WAN_NETWORK=192.168.1.0/24 WAN_POOL_START=192.168.1.100 WAN_POOL_END=192.168.1.200 #--- PRIVATE NETWORK LAN_IPADDRESS=192.168.11.41 LAN_GATEWAY=192.168.11.1 LAN_NETWORK=192.168.11.0/24 LAN_POOL_START=192.168.11.100 LAN_POOL_END=192.168.11.200 #--- PASSWORD CONFIG_KEYSTONE_ADMIN_PW=password CONFIG_KEYSTONE_DEMO_PW=$CONFIG_KEYSTONE_ADMIN_PW CONFIG_RH_PW=RH_PW CONFIG_SATELLITE_PW=SATELLITE_PW CONFIG_SATELLITE_PROXY_PW=SATELLITE_PROXY_PW CONFIG_AMQP_NSS_CERTDB_PW=AMQP_NSS_CERTDB_PW CONFIG_MYSQL_PW=MYSQL_PW CONFIG_KEYSTONE_DB_PW=KEYSTONE_DB_PW CONFIG_GLANCE_DB_PW=LANCE_DB_PW CONFIG_GLANCE_KS_PW=GLANCE_KS_PW CONFIG_CINDER_DB_PW=CINDER_DB_PW CONFIG_CINDER_KS_PW=CINDER_KS_PW CONFIG_NOVA_DB_PW=NOVA_DB_PW CONFIG_NOVA_KS_PW=OVA_KS_PW CONFIG_NEUTRON_KS_PW=NEUTRON_KS_PW CONFIG_NEUTRON_DB_PW=NEUTRON_DB_PW CONFIG_NEUTRON_METADATA_PW=NEUTRON_METADATA_PW CONFIG_SWIFT_KS_PW=SWIFT_KS_PW CONFIG_PROVISION_TEMPEST_USER_PW=PROVISION_TEMPEST_USER_PW CONFIG_HEAT_DB_PW=HEAT_DB_PW CONFIG_HEAT_KS_PW=HEAT_KS_PW CONFIG_CEILOMETER_KS_PW=CEILOMETER_KS_PW CONFIG_NAGIOS_PW=NAGIOS_PW #--- CONTROLLER HOSTS CONFIG_CONTROLLER_HOST=$LAN_IPADDRESS CONFIG_NETWORK_HOSTS=$CONFIG_CONTROLLER_HOST CONFIG_AMQP_HOST=$CONFIG_CONTROLLER_HOST CONFIG_MYSQL_HOST=$CONFIG_CONTROLLER_HOST CONFIG_MONGODB_HOST=$CONFIG_CONTROLLER_HOST #--- COMPUTE HOSTS CONFIG_COMPUTE_HOSTS=192.168.11.42 #--- NOVA NETWORK CONFIG_NOVA_NETWORK_PUBIF=eth0 CONFIG_NOVA_NETWORK_PRIVIF=eth1 CONFIG_NOVA_COMPUTE_PRIVIF=eth1 #--- OVS CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1 CONFIG_NEUTRON_OVS_VLAN_RANGES=physnet1 CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0 CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex #--- NETWORK TYPE CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=vxlan #--- CINDER CONFIG_CINDER_VOLUMES_SIZE=50G #--- NTP NTP_SERVER=ntp.nict.jp #---------------------------------------------------------- # MAIN #---------------------------------------------------------- function main() { #--- SET UP setup_first #--- INSTALL RDO packstack --gen-answer-file answer.txt setup_rdo packstack --answer-file answer.txt #--- OPENSTACK SETUP create_glance_image ubuntu1204 ${CLOUD_IMAGE_URL[0]} create_glance_image ubuntu1404 ${CLOUD_IMAGE_URL[1]} setup_network setup_neutron setup_nova setup_neutron_demo_net setup_flavor setup_secgroup setup_keypair #--- FIN . /root/keystonerc_admin nova list nova-manage service list neutron agent-list neutron net-list } #---------------------------------------------------------- # SETUP INIT #---------------------------------------------------------- function setup_first() { rpm -ivh $EPEL_URL yum install -y --enablerepo=epel puppet nc wget ntpdate && ntpdate $NTP_SERVER yum install -y $RDO_URL yum install -y openstack-packstack yum update -y #--- SYSCTL sed -i.org \ -e "s/^net.ipv4.ip_forward.*=.*0/net.ipv4.ip_forward = 1/" \ -e "s/^net.ipv4.conf.all.rp_filter.*=.*1/net.ipv4.conf.all.rp_filter = 0/" \ -e "s/^net.ipv4.conf.default.rp_filter.*=.*1/net.ipv4.conf.default.rp_filter = 0/" \ /etc/sysctl.conf sysctl -p } #---------------------------------------------------------- # SETUP RDO #---------------------------------------------------------- function setup_rdo() { #--- MAIN PASSWORD sed -i.org \ -e "s/^CONFIG_KEYSTONE_ADMIN_PW=.*/CONFIG_KEYSTONE_ADMIN_PW=$CONFIG_KEYSTONE_ADMIN_PW/" \ -e "s/^CONFIG_KEYSTONE_DEMO_PW=.*/CONFIG_KEYSTONE_DEMO_PW=$CONFIG_KEYSTONE_DEMO_PW/" \ answer.txt #--- OTHER PASSWORD sed -i \ -e "s/^CONFIG_AMQP_NSS_CERTDB_PW=.*/CONFIG_AMQP_NSS_CERTDB_PW=$CONFIG_AMQP_NSS_CERTDB_PW/" \ -e "s/^CONFIG_MYSQL_PW=.*/CONFIG_MYSQL_PW=$CONFIG_MYSQL_PW/" \ -e "s/^CONFIG_KEYSTONE_DB_PW=.*/CONFIG_KEYSTONE_DB_PW=$CONFIG_KEYSTONE_DB_PW/" \ -e "s/^CONFIG_GLANCE_DB_PW=.*/CONFIG_GLANCE_DB_PW=$CONFIG_GLANCE_DB_PW/" \ -e "s/^CONFIG_GLANCE_KS_PW=.*/CONFIG_GLANCE_KS_PW=$CONFIG_GLANCE_KS_PW/" \ -e "s/^CONFIG_CINDER_DB_PW=.*/CONFIG_CINDER_DB_PW=$CONFIG_CINDER_DB_PW/" \ -e "s/^CONFIG_CINDER_KS_PW=.*/CONFIG_CINDER_KS_PW=$CONFIG_CINDER_KS_PW/" \ -e "s/^CONFIG_NOVA_DB_PW=.*/CONFIG_NOVA_DB_PW=$CONFIG_NOVA_DB_PW/" \ -e "s/^CONFIG_NOVA_KS_PW=.*/CONFIG_NOVA_KS_PW=$CONFIG_NOVA_KS_PW/" \ -e "s/^CONFIG_NEUTRON_KS_PW=.*/CONFIG_NEUTRON_KS_PW=$CONFIG_NEUTRON_KS_PW/" \ -e "s/^CONFIG_NEUTRON_DB_PW=.*/CONFIG_NEUTRON_DB_PW=$CONFIG_NEUTRON_DB_PW/" \ -e "s/^CONFIG_NEUTRON_METADATA_PW=.*/CONFIG_NEUTRON_METADATA_PW=$CONFIG_NEUTRON_METADATA_PW/" \ -e "s/^CONFIG_SWIFT_KS_PW=.*/CONFIG_SWIFT_KS_PW=$CONFIG_SWIFT_KS_PW/" \ -e "s/^CONFIG_PROVISION_TEMPEST_USER_PW=.*/CONFIG_PROVISION_TEMPEST_USER_PW=$CONFIG_PROVISION_TEMPEST_USER_PW/" \ -e "s/^CONFIG_HEAT_DB_PW=.*/CONFIG_HEAT_DB_PW=$CONFIG_HEAT_DB_PW/" \ -e "s/^CONFIG_HEAT_KS_PW=.*/CONFIG_HEAT_KS_PW=$CONFIG_HEAT_KS_PW/" \ -e "s/^CONFIG_CEILOMETER_KS_PW=.*/CONFIG_CEILOMETER_KS_PW=$CONFIG_CEILOMETER_KS_PW/" \ -e "s/^CONFIG_NAGIOS_PW=.*/CONFIG_NAGIOS_PW=$CONFIG_NAGIOS_PW/" \ answer.txt #--- SERVICE HOSTS sed -i \ -e "s/^CONFIG_CONTROLLER_HOST=.*/CONFIG_CONTROLLER_HOST=$CONFIG_CONTROLLER_HOST/" \ -e "s/^CONFIG_NETWORK_HOSTS=.*/CONFIG_NETWORK_HOSTS=$CONFIG_NETWORK_HOSTS/" \ -e "s/^CONFIG_AMQP_HOST=.*/CONFIG_AMQP_HOST=$CONFIG_AMQP_HOST/" \ -e "s/^CONFIG_MYSQL_HOST=.*/CONFIG_MYSQL_HOST=$CONFIG_MYSQL_HOST/" \ -e "s/^CONFIG_MONGODB_HOST=.*/CONFIG_MONGODB_HOST=$CONFIG_MONGODB_HOST/" \ -e "s/^CONFIG_COMPUTE_HOSTS=.*/CONFIG_COMPUTE_HOSTS=$CONFIG_COMPUTE_HOSTS/" \ answer.txt #--- IFACES sed -i \ -e "s/^CONFIG_NOVA_COMPUTE_PRIVIF=.*/CONFIG_NOVA_COMPUTE_PRIVIF=$CONFIG_NOVA_COMPUTE_PRIVIF/" \ -e "s/^CONFIG_NOVA_NETWORK_PUBIF=.*/CONFIG_NOVA_NETWORK_PUBIF=$CONFIG_NOVA_NETWORK_PUBIF/" \ -e "s/^CONFIG_NOVA_NETWORK_PRIVIF=.*/CONFIG_NOVA_NETWORK_PRIVIF=$CONFIG_NOVA_NETWORK_PRIVIF/" \ -e "s/^CONFIG_NEUTRON_OVS_BRIDGE_IFACES=.*/CONFIG_NEUTRON_OVS_BRIDGE_IFACES=$CONFIG_NEUTRON_OVS_BRIDGE_IFACES/" \ -e "s/^CONFIG_NEUTRON_OVS_TUNNEL_IF=.*/CONFIG_NEUTRON_OVS_TUNNEL_IF=$CONFIG_NEUTRON_OVS_TUNNEL_IF/" \ answer.txt #--- NEUTRON OVS sed -i \ -e "s/^CONFIG_NEUTRON_OVS_VLAN_RANGES=.*/CONFIG_NEUTRON_OVS_VLAN_RANGES=$CONFIG_NEUTRON_OVS_VLAN_RANGES/" \ -e "s/^CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=.*/CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=$CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS/" \ answer.txt #--- NETWORK TYPE sed -i \ -e "s/^CONFIG_NEUTRON_ML2_TYPE_DRIVERS=.*/CONFIG_NEUTRON_ML2_TYPE_DRIVERS=$CONFIG_NEUTRON_ML2_TYPE_DRIVERS/" \ -e "s/^CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=.*/CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=$CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES/" \ -e "s/^CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=.*/CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=$CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE/" \ answer.txt #--- DEMO sed -i \ -e "s/^CONFIG_PROVISION_DEMO=y/CONFIG_PROVISION_DEMO=n/" \ answer.txt #--- TOKEN FORMAT sed -i \ -e "s/^CONFIG_KEYSTONE_TOKEN_FORMAT=PKI/CONFIG_KEYSTONE_TOKEN_FORMAT=UUID/" \ answer.txt #--- CINDER sed -i \ -e "s/^CONFIG_CINDER_VOLUMES_SIZE=20G/CONFIG_CINDER_VOLUMES_SIZE=$CONFIG_CINDER_VOLUMES_SIZE/" \ answer.txt #--- HEAT INSTALL sed -i \ -e "s/^CONFIG_HEAT_INSTALL=n/CONFIG_HEAT_INSTALL=y/" \ -e "s/^CONFIG_HEAT_CLOUDWATCH_INSTALL=n/CONFIG_HEAT_CLOUDWATCH_INSTALL=y/" \ -e "s/^CONFIG_HEAT_CFN_INSTALL=n/CONFIG_HEAT_CFN_INSTALL=y/" \ answer.txt #----------------------------------------------------------- # NO INSTALL #----------------------------------------------------------- #--- NAGIOS NO INSTALL sed -i \ -e "s/^CONFIG_NAGIOS_INSTALL=y/CONFIG_NAGIOS_INSTALL=n/" \ answer.txt #--- CINDER NO INSTALL #sed -i \ # -e "s/^CONFIG_CINDER_INSTALL=.*/CONFIG_CINDER_INSTALL=n/" \ # answer.txt #--- SWIFT NO INSTALL #sed -i \ # -e "s/^CONFIG_SWIFT_INSTALL=.*/CONFIG_SWIFT_INSTALL=n/" \ # answer.txt #--- CEILOMETER NO INSTALL #sed -i \ # -e "s/^CONFIG_CEILOMETER_INSTALL=.*/CONFIG_CEILOMETER_INSTALL=n/" \ # answer.txt } #----------------------------------------------------------- # NETWORK #----------------------------------------------------------- function setup_network() { # ifcfg-eth0 cat << EOT >/etc/sysconfig/network-scripts/ifcfg-eth0 && sed -i 's/^ *//g' /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes TYPE=OVSPort DEVICETYPE=ovs OVS_BRIDGE=br-ex EOT # ifcfg-br-ex cat << EOT > /etc/sysconfig/network-scripts/ifcfg-br-ex && sed -i 's/^ *//g' /etc/sysconfig/network-scripts/ifcfg-br-ex DEVICE=br-ex TYPE=OVSBridge DEVICETYPE=ovs BOOTPROTO=static IPADDR=$WAN_IPADDRESS NETMASK=255.255.255.0 GATEWAY=$WAN_GATEWAY ONBOOT=yes EOT # restart /etc/init.d/network restart } #----------------------------------------------------------- # GLANCE #----------------------------------------------------------- function create_glance_image() { local CLOUD_IMAGE_NAME=$1 local CLOUD_IMAGE_URL=$2 wget $CLOUD_IMAGE_URL -O /dev/shm/$CLOUD_IMAGE_NAME.tar.gz truncate --size 2GB /dev/shm/$CLOUD_IMAGE_NAME.raw LOOP_DEV=`losetup -f` losetup $LOOP_DEV /dev/shm/$CLOUD_IMAGE_NAME.raw mkfs $LOOP_DEV mkdir -p /mnt/cloud-image mount $LOOP_DEV /mnt/cloud-image tar -xf /dev/shm/$CLOUD_IMAGE_NAME.tar.gz -C /mnt/cloud-image if [ -f /mnt/cloud-image/etc/rsyslog.conf ] then sed -i.org 's/^$ModLoad imklog/#$ModLoad imklog/' /etc/rsyslog.conf fi umount $LOOP_DEV losetup -d $LOOP_DEV . /root/keystonerc_admin glance image-create \ --name $CLOUD_IMAGE_NAME-lxc \ --is-public True \ --disk-format raw \ --container-format bare \ --property hypervisor_type=lxc \ --progress \ --file /dev/shm/$CLOUD_IMAGE_NAME.raw && \ rm /dev/shm/$CLOUD_IMAGE_NAME.raw && \ rm /dev/shm/$CLOUD_IMAGE_NAME.tar.gz glance image-list } #----------------------------------------------------------- # NOVA #----------------------------------------------------------- function setup_nova() { sed -i.org \ -e "s/^virt_type=.*/virt_type=lxc/" \ -e "s/^[# ]*use_cow_images=.*/use_cow_images=false/g" \ /etc/nova/nova.conf #--- restart chkconfig openstack-nova-metadata-api off chkconfig openstack-nova-api on for SERVICE_NAME in $(ls /etc/init.d/openstack-nova-*) do $SERVICE_NAME restart done } #----------------------------------------------------------- # NEUTRON #----------------------------------------------------------- function setup_neutron() { # /etc/neutron/plugin.ini echo "[ovs]" >> /etc/neutron/plugin.ini echo "network_vlan_ranges = physnet1" >> /etc/neutron/plugin.ini echo "bridge_mappings = physnet1:br-ex" >> /etc/neutron/plugin.ini # /etc/neutron/*.ini for i in /etc/neutron/*.ini do sed -i.org "s/^[# ]*ovs_use_veth.*$/ovs_use_veth = True/g" $i done # dhcp_agent.ini sed -i.org \ -e "s/^enable_isolated_metadata.*$/enable_isolated_metadata = True/" \ -e "s/^enable_metadata_network.*$/enable_metadata_network = True/" \ /etc/neutron/dhcp_agent.ini # restart for SERVICE_NAME in $(ls /etc/init.d/neutron-*) do $SERVICE_NAME restart done } #----------------------------------------------------------- # NEUTRON DEMO NET #----------------------------------------------------------- function setup_neutron_demo_net(){ . /root/keystonerc_admin #--- WAN neutron net-create WAN \ --shared \ --router:external true neutron subnet-create \ --name wan_subnet \ --enable_dhcp=False \ --allocation-pool=start=$WAN_POOL_START,end=$WAN_POOL_END \ --gateway=$WAN_GATEWAY \ WAN \ $WAN_NETWORK #--- LAN neutron net-create LAN \ --shared neutron subnet-create \ --name lan_subnet \ --enable_dhcp=True \ --allocation-pool=start=$LAN_POOL_START,end=$LAN_POOL_END \ --gateway=$LAN_GATEWAY \ LAN \ $LAN_NETWORK #--- ROUTER neutron router-create router neutron router-gateway-set router WAN neutron router-interface-add router lan_subnet } #----------------------------------------------------------- # SECGROUP #----------------------------------------------------------- function setup_secgroup(){ echo "### setup_secgroup ###" . /root/keystonerc_admin nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 } #----------------------------------------------------------- # KEYPAIR #----------------------------------------------------------- function setup_keypair() { echo "### setup_keypair ###" . /root/keystonerc_admin cd && nova keypair-add mykey > mykey && chmod 600 mykey nova keypair-list } #----------------------------------------------------------- # FLAVOR #----------------------------------------------------------- function setup_flavor() { echo "### setup_flavor ###" . /root/keystonerc_admin nova flavor-delete 1 # NAME ID RAM DISK VCPUS nova flavor-create m1.tiny 1 64 3 1 nova flavor-list } main
shell
bash rdo-setup.sh
compute機にて
ハイパーバイザをlxcに変更する
shell
ntpdate ntp.nict.jp
yum --enablerepo=epel install lxc lxc-templates lxc-doc lxc-libs
virsh net-destroy default
virsh net-autostart default --disable
sed -i.org \
-e "s/^virt_type=.*/virt_type=lxc/" \
-e "s/^[# ]*use_cow_images=.*/use_cow_images=false/g" \
/etc/nova/nova.conf
for SERVICE_NAME in $(ls /etc/init.d/openstack-nova-*)
do
$SERVICE_NAME restart
done
mv /selinux /selinux_
まとめ
仮想上の検証OSでopenstackを組むときはハイパーバイザをqemuにするよりlxcのほうがきびきびと動く。
centosにはqemu-ndbがないのでubuntuで実装するよりインスタンスのビルドに時間がかかる。