LoginSignup
6
6

More than 5 years have passed since last update.

OpenStack RDO Icehouse を CentOS 6.5 にインストール (LXC)

Posted at

用意するもの

ホスト名 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で実装するよりインスタンスのビルドに時間がかかる。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6