การติดตั้งระบบ OpenStack Ocata แบบ Multi-Node ด้วยมือ

Capture

 ติดตั้งด้วยมือ

การติดตั้งด้วยมือเป็นวิธีการติดตั้งที่จะทำให้ผู้ติดตั้งได้มีโอกาสเรียนรู้จักส่วนประกอบของ OpenStack มากที่สุด OpenStack ประกอบไปด้วย software component หลาย software ผู้ใช้จะต้องติดตั้งและกำหนดค่าในไฟล์ configuration ของ component เหล่านั้น ซึ่งส่วนใหญ่จะอยู่ใน /etc directory

เพื่อความสะดวกในการเขียนคู่มือนี้ ผมจะอ้างอิงถึง configuration ไฟล์ใน “files” subdirectory นศ สามารถดูตัวอย่างไฟล์ได้ตาม URL link บนแต่ละไฟล์และ เปรียบเทียบกับ official openstack ocata installation document [2] ที่ผมจะแนบ link ไว้ให้เป็นระยะๆแล้ว copy เนื้อหาของ configuration ไฟล์ไปใช้ตามที่จำเป็น หรือทำอีกวิธีหนึ่งคือ

ขอให้  ศึกษารายละเอียดของการกำหนดค่า configuration ใน [1][2][3] และตอบคำถาม PROJECT ของวิชา คพ 449 ที่จะถามในคู่มือนี้เป็นระยะๆ ขอให้บรรยายคำตอบในรายงานอย่างชัดเจน

1 update ubuntu บน ทุก node

เครื่อง controller

login เข้า user openstack และ modify ไฟล์ /etc/hosts

$ cd $HOME/openstack-ocata-installer/OPSInstaller/controller
$ sudo cp files/hosts /etc/hosts

รันคำสั่งต่อไปนี้

$ sudo sed -i "s/us.arch/th.arch/g" /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get -y install software-properties-common
$ sudo add-apt-repository cloud-archive:ocata

คำสั่ง add-apt-repository จะรอให้ นศ กด [ENTER]

$ sudo apt-get update 
$ sudo apt-get -y dist-upgrade
$ sudo apt-get -y install python-openstackclient
$ sudo reboot

เครื่อง network

login เข้า user openstack และใช้คำสั่งต่อไปนี้

$ cd $HOME/openstack-ocata-installer/OPSInstaller/
$ sudo cp files/hosts /etc/hosts
$ sudo sed -i "s/us.arch/th.arch/g" /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get -y install software-properties-common
$ sudo add-apt-repository cloud-archive:ocata

คำสั่งสุดท้ายจะรอให้กด [ENTER]

$ sudo apt-get update 
$ sudo apt-get -y dist-upgrade
$ sudo apt-get -y install python-openstackclient
$ sudo reboot

เครื่อง compute

login เข้า user openstack และใช้คำสั่งต่อไปนี้

$ sudo cp files/hosts /etc/hosts
$ sudo sed -i "s/us.arch/th.arch/g" /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get -y install software-properties-common
$ sudo add-apt-repository cloud-archive:ocata

คำสั่งสุดท้ายจะรอให้ นศ กด [ENTER]

$ sudo apt-get update 
$ sudo apt-get -y dist-upgrade
$ sudo apt-get -y install python-openstackclient
$ sudo reboot

เครื่อง compute1

login เข้า user openstack และใช้คำสั่งต่อไปนี้

$ sudo cp files/hosts /etc/hosts
$ sudo sed -i "s/us.arch/th.arch/g" /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get -y install software-properties-common
$ sudo add-apt-repository cloud-archive:ocata

คำสั่งสุดท้ายจะรอให้  กด [ENTER]

$ sudo apt-get update 
$ sudo apt-get -y dist-upgrade
$ sudo apt-get -y install python-openstackclient
$ sudo reboot

2 กำหนดค่า Network Interfaces และ Time Synchronization (chrony)

เครื่อง controller

$ sudo apt-get -y install chrony
$ sudo cp files/chrony.conf /etc/chrony/chrony.conf
$ 
$ sudo service chrony restart

เครื่อง network

$ sudo cp files/interfaces /etc/network/interfaces
$ sudo ifdown ens3
$ sudo ifup ens3
$ sudo ifdown ens4
$ sudo ifup ens4
$ sudo ifdown ens5
$ sudo ifup ens5
$ sudo ifdown ens6
$ sudo ifup ens6
$ ifconfig
$
$ sudo apt-get -y install chrony
$ sudo cp files/chrony.conf /etc/chrony/chrony.conf
$ sudo service chrony restart

เครื่อง compute

$ sudo cp files/interfaces /etc/network/interfaces
$ sudo ifdown ens3
$ sudo ifup ens3
$ sudo ifdown ens4
$ sudo ifup ens4
$ sudo ifdown ens5
$ sudo ifup ens5
$ sudo ifdown ens6
$ sudo ifup ens6
$ 
$ sudo apt-get -y install chrony
$ sudo cp files/chrony.conf /etc/chrony/chrony.conf
$ sudo service chrony restart

เครื่อง compute1

$ sudo cp files/interfaces /etc/network/interfaces
$ sudo ifdown ens3
$ sudo ifup ens3
$ sudo ifdown ens4
$ sudo ifup ens4
$ sudo ifdown ens5
$ sudo ifup ens5
$ sudo ifdown ens6
$ sudo ifup ens6
$ 
$ sudo apt-get -y install chrony
$ sudo cp files/chrony.conf /etc/chrony/chrony.conf
$ sudo service chrony restart

3 ติดตั้ง mysql

เครื่อง controller

$ sudo chronyc sources
$ sudo apt-get -y install mariadb-server
$ sudo apt-get -y install python-pymysql
cp files/99-openstack.cnf /etc/mysql/mariadb.conf.d/99-openstack.cnf
service mysql restart
mysql_secure_installation

คำสั่ง mysql_secure_installation script เป็น script สำคัญที่จะให้  กำหนดค่าเริ่มต้นของ mysql database script นี้จะถามคำถามต่อไปนี้

  • 1. ให้ผู้ใช้กรอก root password ของ mysql เนื่องจาก เพิ่งเริ่มติดตั้งจะไม่มี root password ให้ enter
  • 2. ให้กรอก password ใหม่ของ mysql root (กำหนดให้เป็นค่า mysqlpassword) โดย script จะถามให้กรอกค่านี้สองรอบ
  • 3. หลังจากนั้น script จะถามว่า ลบ test account ใหม่ และอื่นๆ ให้ตอบ “y” ให้หมด

เครื่อง compute

$ sudo chronyc sources

เครื่อง compute1

$ sudo chronyc sources

4 ติดตั้ง rabbitmq

เครื่อง controller

$ sudo apt-get -y install rabbitmq-server
$
$ sudo rabbitmqctl add_user openstack RABBIT_PASS
$ sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
$
$ sudo apt-get install memcached python-memcache
$ sudo cp files/memcached.conf /etc/memcached.conf
$ sudo service memcached restart

5 ติดตั้ง keystone

เครื่อง controller

สร้าง database สำหรับ keystone ทบทวนความจำว่า root password ของ mysql ที่เรากำหนดในตัวอย่างนี้คือ mysqlpassword

$ sudo mysql -u root -pmysqlpassword -e "CREATE DATABASE keystone;"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';"

ติดตั้ง keystone

S sudo apt-get -y install keystone
$ sudo cp files/keystone.conf /etc/keystone/keystone.conf
$ sudo su -s /bin/sh -c "keystone-manage db_sync" keystone
$
$ sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
$ sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
$
$ sudo keystone-manage bootstrap --bootstrap-password adminpassword \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
$
$ sudo cp files/apache2.conf /etc/apache2/apache2.conf
$ sudo service apache2 restart
$ sudo rm -f /var/lib/keystone/keystone.db

6 ติดตั้ง OpenStack Service Endpoint

เครื่อง controller

กำหนด environment variables เพื่อปฏิบัติการแบบเป็น admin user ซึ่งทำให้  สามารถใช้คำสั่ง “openstack” (ถัดไป)เพื่อสร้าง service endpoint และสร้าง user ใหม่คือ demo user

$ export OS_USERNAME=admin
$ export OS_PASSWORD=adminpassword
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:35357/v3
$ export OS_IDENTITY_API_VERSION=3
$

คำสั่งต่อไปนี้สร้าง service project สร้าง demo user สร้าง user role และ associate role นั้นให้กับ demo user

$ openstack project create --domain default --description "Service Project" service
$ openstack project create --domain default --description "Demo Project" demo
$ openstack user create --domain default --password demopassword demo
$ openstack role create user
$ openstack role add --project demo --user demo user
$
$ sudo cp files/keystone-paste.ini /etc/keystone/keystone-paste.ini
$

คำสั่งสองคำสั่งถัดไป ทดสอบว่า keystone ทำงานถูกต้อง โดยใช้สองคำสั่งถัดไปเรียกดู token สำหรับ admin และ demo users

$ unset OS_AUTH_URL OS_PASSWORD
$ 
$ openstack --os-auth-url http://controller:35357/v3 \
  --os-project-domain-name default --os-user-domain-name default \
  --os-project-name admin --os-username admin --os-password adminpassword token issue
$
$ openstack --os-auth-url http://controller:5000/v3 \
  --os-project-domain-name default --os-user-domain-name default \
  --os-project-name demo --os-username demo --os-password demopassword token issue
$

ให้ สร้างไฟล์ ./admin-openrc.sh และทดสอบว่าสามารถเรียกใช้คำสั่ง openstack CLI ได้

$ vi ./admin-openrc.sh
$ source ./admin-openrc.sh
$ openstack token issue

7 ติดตั้ง glance

เครื่อง controller

สร้าง database สำหรับ glance

$ sudo mysql -u root -pmysqlpassword -e "CREATE DATABASE glance;"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';"

สร้าง endpoint สำหรับติดต่อ glance service

$ source ./admin-openrc.sh
$
$ openstack user create --domain default --password GLANCE_PASS glance
$ openstack role add --project service --user glance admin
$ openstack service create --name glance \
  --description "OpenStack Image" image
$
$ openstack endpoint create --region RegionOne \
  image public http://controller:9292
$ openstack endpoint create --region RegionOne \
  image internal http://controller:9292
$ openstack endpoint create --region RegionOne \
  image admin http://controller:9292
$  

ติดตั้ง glance-registry และ glance-api

$ sudo apt-get -y install glance 
$ sudo cp files/glance-api.conf /etc/glance/glance-api.conf
$ sudo cp files/glance-registry.conf /etc/glance/glance-registry.conf
$
$ sudo su -s /bin/sh -c "glance-manage db_sync" glance
$
$ sudo service glance-registry restart
$ sudo service glance-api restart

ทดสอบ glance (upload cirros image เข้า glance)

$ source ./admin-openrc.sh
$ wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
$
$ openstack image create "cirros" \
  --file cirros-0.3.5-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --public
$
$ openstack image list
$ rm cirros-0.3.5-x86_64-disk.img

3.8 ติดตั้ง nova

เครื่อง controller

$ sudo mysql -u root -pmysqlpassword -e "CREATE DATABASE nova_api;"
$ sudo mysql -u root -pmysqlpassword -e "CREATE DATABASE nova;"
$ sudo mysql -u root -pmysqlpassword -e "CREATE DATABASE nova_cell0;"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';"
$ sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';"

สร้าง nova service endpoint

$ source ./admin-openrc.sh
$
$ openstack user create --domain default --password NOVA_PASS nova
$ openstack role add --project service --user nova admin
$ openstack service create --name nova \
  --description "OpenStack Compute" compute
$ openstack endpoint create --region RegionOne \
  compute public http://controller:8774/v2.1/
$ openstack endpoint create --region RegionOne \
  compute internal http://controller:8774/v2.1/
$ openstack endpoint create --region RegionOne \
  compute admin http://controller:8774/v2.1/
$
$ openstack user create --domain default --password NOVA_PASS placement
$ openstack role add --project service --user placement admin
$ openstack service create --name placement \
  --description "Placement API" placement
$ openstack endpoint create --region RegionOne \
  placement public http://controller:8778
$ openstack endpoint create --region RegionOne \
  placement internal http://controller:8778
$ openstack endpoint create --region RegionOne \
  placement admin http://controller:8778
$

ติดตั้ง nova software components ได้แก่ nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler nova-placement-api

$ sudo apt-get -y install nova-api nova-conductor nova-consoleauth \
  nova-novncproxy nova-scheduler nova-placement-api

$ sudo cp files/nova.conf /etc/nova/nova.conf
$
$ sudo su -s /bin/sh -c "nova-manage api_db sync" nova
$ sudo su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
$ sudo su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
$ sudo su -s /bin/sh -c "nova-manage db sync" nova
$
$ sudo nova-manage cell_v2 list_cells
$
$ sudo service nova-api restart
$ sudo service nova-consoleauth restart
$ sudo service nova-scheduler restart
$ sudo service nova-conductor restart
$ sudo service nova-novncproxy restart

เครื่อง compute

$ sudo apt-get -y install nova-compute
$ sudo cp files/nova.conf /etc/nova/nova.conf
$ sudo cp files/nova-compute.conf /etc/nova/nova-compute.conf
$
$ sudo service nova-compute restart

เครื่อง compute1

$ sudo apt-get -y install nova-compute
$ sudo cp files/nova.conf /etc/nova/nova.conf
$ sudo cp files/nova-compute.conf /etc/nova/nova-compute.conf
$
$ sudo service nova-compute restart

เครื่อง controller

discovery หา compute nodes

$ source ./admin-openrc.sh
$
$ openstack hypervisor list
$ sudo su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
$
$ openstack compute service list

ลอง discovery ถ้ายังไม่เจอ compuet แบะ compute1

$ source ./admin-openrc.sh
$
$ openstack hypervisor list
$ sudo su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

แสดงรายการของ compute service

$ source ./admin-openrc.sh
$
$ openstack compute service list
$ openstack catalog list
$ openstack image list
$ sudo nova-status upgrade check

3.9 ติดตั้ง neutron

เครื่อง controller

สร้าง database สำหรับ neutron

sudo mysql -u root -pmysqlpassword -e "CREATE DATABASE neutron;"
sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';"
sudo mysql -u root -pmysqlpassword -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';"

สร้าง service endpoints สำหรับ neutron

$ source ./admin-openrc.sh
$
$ openstack user create --domain default --password NEUTRON_PASS neutron
$ openstack role add --project service --user neutron admin
$ openstack service create --name neutron \
  --description "OpenStack Networking" network
$ openstack endpoint create --region RegionOne \
  network public http://controller:9696
$ openstack endpoint create --region RegionOne \
  network internal http://controller:9696
$ openstack endpoint create --region RegionOne \
  network admin http://controller:9696
$

ติดตั้ง neutron-server neutron-plugin-ml2 python-neutronclient และ openvswitch-switch

$ sudo apt-get -y install neutron-server neutron-plugin-ml2 python-neutronclient
$ sudo apt-get -y install openvswitch-switch
$
$ sudo cp files/neutron.conf /etc/neutron/neutron.conf
$ sudo cp files/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini
$ sudo cp files/nova-stage23.conf /etc/nova/nova.conf
$
$ sudo su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
$
$ sudo service nova-api restart
$ sudo service neutron-server restart

ทดสอบ neutron ขั้นแรก

$ source ./admin-openrc.sh
$ openstack extension list --network

เครื่อง network

$ sudo apt-get -y install neutron-plugin-ml2 neutron-l3-agent 
$ sudo apt-get -y install neutron-openvswitch-agent openvswitch-switch
$
$ sudo cp files/neutron.conf /etc/neutron/neutron.conf
$ sudo cp files/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini
$
$ sudo service openvswitch-switch start

สร้าง provider network และ vlan network

$ sudo ovs-vsctl add-br br-provider
$ sudo ovs-vsctl add-port br-provider ens6
$ sudo ovs-vsctl add-br br-vlan
$ sudo ovs-vsctl add-port br-vlan ens5
$ sudo cp files/openvswitch_agent.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini
$ sudo cp files/l3_agent.ini /etc/neutron/l3_agent.ini
$
$ sudo service openvswitch-switch restart
$ sudo service neutron-openvswitch-agent restart
$ sudo service neutron-l3-agent restart

เครื่อง controller

เช็ค neutron

$ source ./admin-openrc.sh
$ openstack extension list --network

เครื่อง compute

$ sudo apt-get -y install neutron-plugin-ml2 neutron-openvswitch-agent openvswitch-switch 
$ sudo apt-get -y install neutron-dhcp-agent neutron-metadata-agent 
$ sudo cp files/neutron.conf /etc/neutron/neutron.conf
$ sudo cp files/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini
$ sudo cp files/openvswitch_agent.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini
$ sudo cp files/dhcp_agent.ini /etc/neutron/dhcp_agent.ini
$ sudo cp files/metadata_agent.ini /etc/neutron/metadata_agent.ini
$
$ sudo service openvswitch-switch start
$

สร้าง provide bridge และ vlan bridge บน compute node

$ sudo ovs-vsctl add-br br-provider
$ sudo ovs-vsctl add-port br-provider ens6
$ sudo ovs-vsctl add-br br-vlan
$ sudo ovs-vsctl add-port br-vlan ens5
$ 
$ sudo service openvswitch-switch restart
$
$ sudo cp files/nova-stage29.conf /etc/nova/nova.conf
$
$ sudo service nova-compute restart
$ sudo service openvswitch-switch restart
$ sudo service neutron-openvswitch-agent restart
$ sudo service neutron-metadata-agent restart
$ sudo service neutron-dhcp-agent restart

เครื่อง compute1

$ sudo apt-get -y install neutron-plugin-ml2 neutron-openvswitch-agent openvswitch-switch 
$ sudo apt-get -y install neutron-dhcp-agent neutron-metadata-agent 
$ sudo cp files/neutron.conf /etc/neutron/neutron.conf
$ sudo cp files/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini
$ sudo cp files/openvswitch_agent.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini
$ sudo cp files/dhcp_agent.ini /etc/neutron/dhcp_agent.ini
$ sudo cp files/metadata_agent.ini /etc/neutron/metadata_agent.ini
$
$ sudo service openvswitch-switch start
$

สร้าง provide bridge และ vlan bridge บน compute node

$ sudo ovs-vsctl add-br br-provider
$ sudo ovs-vsctl add-port br-provider ens6
$ sudo ovs-vsctl add-br br-vlan
$ sudo ovs-vsctl add-port br-vlan ens5
$ 
$ sudo service openvswitch-switch restart
$
$ sudo cp files/nova-stage29.conf /etc/nova/nova.conf
$
$ sudo service nova-compute restart
$ sudo service openvswitch-switch restart
$ sudo service neutron-openvswitch-agent restart
$ sudo service neutron-metadata-agent restart
$ sudo service neutron-dhcp-agent restart

เครื่อง controller

$ source ./admin-openrc.sh
$ openstack extension list --network

10 ติดตั้ง horizon

เครื่อง controller

ถ้าเครื่องที่ นศ ติดตั้งมี RAM น้อยหรือ CPU ไม่แรง ผมแนะนำให้ไม่ต้องติดตั้ง horizon และใช้ OpenStack CLI เป็นหลัก

$ sudo apt-get -y install openstack-dashboard
$ sudo cp files/local_settings.py /etc/openstack-dashboard/local_settings.py
$ sudo service apache2 reload
$
$ sudo chown www-data:www-data /var/lib/openstack-dashboard/secret_key
$ sudo service apache2 reload

11 เปลี่ยน neutron ให้เป็นแบบ Distributed Virtual Routers (DVR)

หลังจาก install neutron นศ จะได้ neutron ที่ทำงาน classic openvswitch การกำหนดค่า configuration ต่อไปนี้จะเปลี่ยน neutron ให้เป็นแบบ DVR

เครื่อง controller

$ sudo cp files/neutron_stage33.conf /etc/neutron/neutron.conf
$ sudo service neutron-server restart

เครื่อง network

$ sudo cp files/openvswitch_agent_stage34.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini
$ sudo cp files/l3_agent_stage34.ini /etc/neutron/l3_agent.ini
$
$ sudo service openvswitch-switch restart
$ sudo service neutron-openvswitch-agent restart
$ sudo service neutron-l3-agent restart

เครื่อง compute

$ sudo apt-get -y install neutron-l3-agent 
$
$ sudo cp files/openvswitch_agent_stage35.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini
$ sudo cp files/l3_agent_stage35.ini /etc/neutron/l3_agent.ini
$
$ sudo service openvswitch-switch restart
$ sudo service neutron-openvswitch-agent restart
$ sudo service neutron-l3-agent restart

เครื่อง compute1

$ sudo apt-get -y install neutron-l3-agent 
$
$ sudo cp files/openvswitch_agent_stage36.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini
$ sudo cp files/l3_agent_stage36.ini /etc/neutron/l3_agent.ini
$
$ sudo service openvswitch-switch restart
$ sudo service neutron-openvswitch-agent restart
$ sudo service neutron-l3-agent restart

12 สร้าง network เริ่มต้น

เครื่อง controller


หลังจากรันคำสั่ง ping คำสั่งนี้ควรจะทำให้  ping 10.0.10.100 ได้ ถ้าไม่ได้แสดงว่าการติดตั้ง
 neutron ผิดพลาด$ source ./admin-openrc.sh
$
$ openstack network create --share --provider-physical-network provider \
 --provider-network-type flat provider1
$
$ openstack subnet create --subnet-range 10.0.10.0/24 --gateway 10.0.10.11 \
 --network provider1 --allocation-pool start=10.0.10.100,end=10.0.10.200 \
 --dns-nameserver 8.8.4.4 provider1-v4
$
$ openstack security group rule create --proto icmp default
$
$ openstack security group rule create --proto tcp --dst-port 22 default
$
$ openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
$
$ openstack flavor create --id 1 --vcpus 1 --ram 512 --disk 1 m1.mini
$
$ ping -c 4 10.0.10.100

ถ้าผ่านการ ping มาได้อันดับถัดไปจะให้  สร้าง network สำหรับ admin user


$ openstack network set --external provider1
$
$ openstack network create selfservice1
$
$ openstack subnet create --subnet-range 192.0.2.0/24 \
  --network selfservice1 --dns-nameserver 8.8.4.4 selfservice1-v4
$
$ openstack router create router1
$
$ openstack router add subnet router1 selfservice1-v4
$
$ openstack router set router1 --external-gateway provider1
$
$ openstack floating ip create provider1
$

13 ทดสอบ OpenStack

 ในอันดับถัดไป จะต้องใช้ horizon เข้าไปสร้าง “cirros” vm instance 2 เครื่อง (สมมุติว่าชื่อ cirros1 และ cirros2) บน selfservice1-v4 network และทำตามคำสั่งหรือตอบคำถามต่อไปนี้

  • กำหนดค่า floating IP ให้กับ cirros vm เครื่องหนึ่ง (สมมุติว่าชื่อ cirros1)
  • ใช้ ssh จากเครื่อง controller เข้าสู่ floatinf IP นั้น
  • หลังจาก login เข้า cirros1 แล้วให้ ping www.google.com
  • ให้ใช้ ifconfig ดูว่าลักษณะของ network interface เป็นอย่างไร มีค่า MTU เท่าไรแตกต่างจากบนเครื่อง controller network compute และ compute1 หรือไม่ และทำไมถึงเกิดความแตกต่างขึ้น
  • ให้  ssh จาก cirros1 ไปยัง cirros2
  • จาก cirros2 ให้ ping www.google.com ทำได้หรือไม่
  • ให้ poweroff เครื่อง network node
  • จากเครื่อง cirros2 นศ ping google.com ได้หรือไม่
  • ให้ exit จาก cirros2 กลับมาที่ cirros1
  • ให้ลอง ping google.com ทำได้หรือไม่ เพราะอะไร
  • ให้ boot เครื่อง network node อีกครั้งหนึ่ง
  • ให้ลอง ssh จาก cirros1 ไปยัง cirros2 อีกครั้ง
  • ให้ลอง ping google.com ทำได้หรือไม่ เพราะอะไร

ส่วนที่ 4: สรุป

OpenStack ประกอบไปด้วย software component ที่ออกแบบมาให้รองรับธรรมชาติของ distributed systems ที่ประสานงานกันแบบหลวม (หรือ loosely coupling) เมื่อคอมพิวเตอร์ ซอฟต์แวร์ หรือ network ในสภาพแวดล้อมของ OpenStack มีปัญหา software component ที่ไม่ได้รับผลกระทบก็จะยังคงทำงานต่อได้ และหลังจากระบบที่มีปัญหาได้รับการซ่อมแซม ระบบก็จะกลับมาปฏิบัติงานได้ตามปกติ

สำหรับ system admin ของระบบ OpenStack การเรียนรู้และเข้าใจส่วนประกอบของ OpenStack เป็นเรื่องสำคัญและไม่ไช่เรื่องที่ยากจนเกินไป ทั้งนี้เพราะ OpenStack เป็นระบบเปิดและสร้างด้วย Open Source software ทั้งหมด

Syadmin ไม่จำเป็นต้องอ่าน code ของ OpenStack (แต่ถ้าทำก็จะดีมาก) แต่ควรจะเข้าใจส่วนประกอบต่างๆว่ามี agents/services อะไรบ้างและเข้าใจการกำหนดค่า configuration ต่างๆใน configuration files ว่ามีความสามารถอะไรบ้างที่นำมาใช้งานได้และพารามีเตอร์ต่างๆความหมายอย่างไร

การศึกษา OpenStack โดยได้ติดตั้งด้วยมือและลองผิดลองถูกเป็นวิธีการที่ดีในการเรียนรู้ ด้วยเหตุนี้ผมจึงอยากให้ นศ ลองสร้างระบบสำหรับทดสอบขึ้นไม่ว่าจะเป็นเครื่องจริงหรือ vm และทดลองติดตั้งด้วยมือโดยศึกษาเวปเพจนี้ ประกอบกับข้อมูลจาก Official OpenStack Installation Manual

การติดตั้ง OpenStack มีรูปแบบและวิธีการหลากหลายในปัจจุบัน ผู้ใช้จะติดตั้งบน node เดียว 2 nodes หรือ multi-node แล้วแต่ resources ที่มี และสามารถเลือก component ได้ตามที่ต้องการใช้งาน วิธีการติดตั้งในปัจจุบันมีหลายแบบ อาทิเช่น การติดตั้งด้วยมือ การติดตั้งแบบใช้ scripts (เช่นในเวปนี้ หรือ RDO ของ Redhat) และการติดตั้งโดยใช้ container และ Ansible (เช่น OpenStack Kolla)

อย่างไรก็ตาม ไม่ว่าจะติดตั้งแบบใด sys admin ของระบบ OpenStack ควรมี (1) ความเข้าใจการทำงานของ OpenStack components (2) ความคุ้นเคยกับ configuration files เพื่อให้สามารถดูแลและปรับเปลี่ยนระบบได้อย่างมีประสิทธิภาพในระยะยาว (3) รู้จักคำสั่งที่จำเป็นในการ start/stop/restart OpenStack services (4) คุ้นเคยกับ OpenStack CLI หรือ API

อ้างอิง

[1] http://docs.openstack.org/
[2] https://docs.openstack.org/ocata/install/ubuntu-services.html
[3] https://docs.openstack.org/ocata/networking-guide/
[4] OpenStack ocata installation youtube video playlist