เตรียมเครื่องสำหรับติดตั้ง Ubuntu 16.04-server จำนวน 4 เครื่อง เชื่อมต่อกันบนเนตดังภาพที่ 1 (ชื่อเครื่องต้องตรงกับผลจากคำสั่ง hostname) เครื่องชื่อ controller network compute และ compute1 จากภาพกำหนดให้เครื่อง controller มีspecแนะนำคือ cpu 4 cores RAM 8ถึง 12 GB Disk 20 GB เครื่อง network มี cpu 2 cores RAM 2 Disk 20 GB เครื่อง compute และ compute1 มี cpu 4 cores RAM 4 GB Disk 20 GB (เป็น spec ใช้สำหรับการศึกษา ถ้าจะ deploy ขอให้ดู official OpenStck doc)
ภาพที่ 1
กำหนดให้ทุกเครื่องมี username คือ opensatck และ password คือ openstack และเพื่อความสะดวกแนะนำว่าให้ทำให้ทุกเครื่องใช้ sudo โดยไม่ต้องป้อน password อีกอย่างที่สำคัญคือเครื่องเหล่านี้ควรมีเวลาใกล้เคียงกัน
สำหรับเน็ต (network) ที่จะใช้ในการติดตั้ง เรา ASSUME ว่ามี management network รวมทั้ง network gateway ที่ใช้งานได้อยู่เรียบร้อยแล้ว และมี data tunnel network และ vlan network ที่พร้อมจะใช้เชื่อมต่อกับเครื่องที่จะติดตั้งเรียบร้อยแล้ว
network ที่ใช้ในการติดตั้งได้แก่
- management network: มี cidr 10.0.0/24 และ gateway คือ 10.0.0.1 openstack ใช้เน็ตนี้เป็นเน็ตหลักเพื่อออกอินเตอร์เน็ตและส่งคำสั่งระหว่างโหนด(หรือเครื่องทั้ง 4)ต่างๆของมัน
- data tunnel network: ใช้สร้าง tunnel สำหรับส่งข้อมูลของ vm ที่จะถูกสร้างขึ้นภายใน openstack เน็ตนี้ใช้สำหรับส่งข้อมูลระว่าง vm กันเอง (east-west) และระหว่าง vm กับ internet (north-south)
- vlan network: ใช้ส่งข้อมูลระหว่าง vm ภายใน openstack กับ vlan network ภายนอก openstack
- external network: คือเน็ตที่เป็น internet service provider ของ openstack ในที่นี้เราจะใช้ management network
จากภาพที่ 1 สมมุติว่า NIC ที่ 1 คือ ens3 NIC ที่ 2 คือ ens4 NIC ที่ 3 คือ ens5 NIC ที่ 4 คือ ens6 จะเห็นว่าเครื่อง conroller มี ens3 อันเดียว เครื่อง network compute แบะ compute1 ทั้งหมด มี ens3 ถึง ens6
เพื่อให้การติดตั้งเร็วขึ้นให้ กำหนดค่า apt configuration ของเครื่องต่างๆให้ใช้ ubuntu repository ในประเทศไทย โดยกำหนดค่าใน /etc/apt/sources.list ด้วยมือ หรือใช้คำสั่ง sed ข้างล่าง บน openstack node ทุกเครื่อง
$ sudo sed -i "s/us.arch/th.arch/g" /etc/apt/sources.list $ sudo apt-get update
และให้ dist-upgrade ทุกเครื่องด้วย
$ sudo dist-upgrade
ให้กำหนด network configuration ของทุกเครื่องบน management network ดังตัวอย่างข้างล่าง (เรา ASSUME ว่าทุก interface มี MTU คือ 1500 bytes)
เครื่อง controller
openstack@controller:~$ cat /etc/network/interfaces ... auto lo iface lo inet loopback ... auto enp0s3 iface enp0s3 inet static address 10.0.0.11 netmask 255.255.255.0 network 10.0.0.0 gateway 10.0.0.1 dns-nameservers 8.8.8.8 8.8.4.4
openstack@controller:~$
openstack@controller:~$ ifconfig
enp0s3 Link encap:Ethernet HWaddr 00:54:09:25:20:17
inet addr:10.0.0.11 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::254:9ff:fe25:2017/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:17777 errors:0 dropped:0 overruns:0 frame:0
TX packets:12906 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5715989 (5.7 MB) TX bytes:2963058 (2.9 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:160 errors:0 dropped:0 overruns:0 frame:0
TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB)
openstack@controller:~$
openstack@controller:~$ ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:20:17 brd ff:ff:ff:ff:ff:ff
openstack@controller:~$
เครื่อง network
openstack@network:~$ cat /etc/network/interfaces ... auto lo iface lo inet loopback ... auto enp0s3 iface enp0s3 inet static address enp0s3 netmask 255.255.255.0 network 10.0.0.21 gateway 10.0.0.1 dns-nameservers 61.19.245.245 122.155.55.55 openstack@network:~$
openstack@network:~$ ifconfig
ens192 Link encap:Ethernet HWaddr 00:54:09:25:21:17
inet addr:192.168.30.108 Bcast:192.168.30.255 Mask:255.255.255.0
inet6 addr: fe80::254:9ff:fe25:2117/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4053 errors:0 dropped:0 overruns:0 frame:0
TX packets:3014 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4715574 (4.7 MB) TX bytes:255812 (255.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:160 errors:0 dropped:0 overruns:0 frame:0
TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB)
openstack@network:~$
openstack@network:~$ ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens192: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:21:17 brd ff:ff:ff:ff:ff:ff
3: ens224: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:21:18 brd ff:ff:ff:ff:ff:ff
4: ens256: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:21:19 brd ff:ff:ff:ff:ff:ff
openstack@network:~$
เครื่อง compute
openstack@compute:~$ cat /etc/network/interfaces ... auto lo iface lo inet loopback ... auto enp0s3 iface enp0s3 inet static address 10.0.10.31 netmask 255.255.255.0 network 10.0.10.0 gateway 10.0.10.1 dns-nameservers 8.8.8.8 openstack@compute:~$
openstack@compute:~$ ifconfig
ens3 Link encap:Ethernet HWaddr 00:54:09:25:31:17
inet addr:10.0.10.31 Bcast:10.0.10.255 Mask:255.255.255.0
inet6 addr: fe80::254:9ff:fe25:3117/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16953 errors:0 dropped:0 overruns:0 frame:0
TX packets:10473 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23969227 (23.9 MB) TX bytes:771168 (771.1 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:160 errors:0 dropped:0 overruns:0 frame:0
TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB)
openstack@compute:~$
openstack@compute:~$ ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:31:17 brd ff:ff:ff:ff:ff:ff
3: ens4: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:31:18 brd ff:ff:ff:ff:ff:ff
4: ens5: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:31:19 brd ff:ff:ff:ff:ff:ff
5: ens6: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:31:16 brd ff:ff:ff:ff:ff:ff
openstack@compute:~$
เครื่อง compute1
openstack@compute1:~$ cat /etc/network/interfaces ... auto lo iface lo inet loopback ... auto enp0s3 iface enp0s3 inet static address 10.0.10.32 netmask 255.255.255.0 network 10.0.10.0 gateway 10.0.10.1 dns-nameservers 8.8.8.8 openstack@compute1:~$
openstack@compute1:~$ ifconfig
ens3 Link encap:Ethernet HWaddr 00:54:09:25:32:17
inet addr:10.0.10.32 Bcast:10.0.10.255 Mask:255.255.255.0
inet6 addr: fe80::254:9ff:fe25:3217/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16827 errors:0 dropped:0 overruns:0 frame:0
TX packets:9776 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:24038372 (24.0 MB) TX bytes:693719 (693.7 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:160 errors:0 dropped:0 overruns:0 frame:0
TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB)
openstack@compute1:~$
openstack@compute1:~$ ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:32:17 brd ff:ff:ff:ff:ff:ff
3: ens4: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:32:18 brd ff:ff:ff:ff:ff:ff
4: ens5: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:32:19 brd ff:ff:ff:ff:ff:ff
5: ens6: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:54:09:25:32:16 brd ff:ff:ff:ff:ff:ff
openstack@compute1:~$
ขอให้ make sure ว่าสามารถใช้ NIC ทุกอันส่งข้อมูลได้ นศ อาจใช้วิธี ping IP address ใน management network โดยเช็คว่าสามารถ ping จาก controller ผ่าน ens3 ไปยัง IP ของ ens3 บนเครื่องอื่นทุกๆเครื่องได้
สำหรับ ens4 ens5 ens6 ให้แอบกำหนดค่า IP (หมายถึงกำหนดแล้วลบทิ้ง คือกำหนดเพื่อเช็คต่อไปนี้เฉยๆ แล้วลบทิ้ง ifdown หรือ ifconfig down ก่อนติดตั้งในส่วนที่ 2 หรือ 3) ให้กับ ensx interface ทุกๆอันที่เหลือและให้เช็คว่า ens4 IP ของทุกเครื่องสามารถ ping กันได้ และ ens5 IP ของทุกเครื่องสามารถ ping กันได้ และ ens6 IP ของทุกเครื่อง ping กันและกันได้
หมายเหตุ ขอให้ระวังว่า ens4 IP ไม่ควร ping ens3 IP หรือ ens5 IP หรือ ens6 IP ได้ พูดอีกอย่างคือ data tunnel network subnet และ vlan network subnet และ management network subnet ต้อง isolate จากกัน
เมื่อเช็คเสร็จแล้วให้ ลบ และ ifdown หรือ ifconfig down IP address ของ ens4 ens5 ens6 บนทุกเครื่องออก เราจะใช้ installation scripts กำหนดค่า หรือกำหนดค่าเองด้วยมือภายหลัง
ติดตั้งด้วย scripts
1 ดาวน์โหลด openstack-ocata-installer scripts
ใช้เครื่อง controller เป็นหลักในการติดตั้งด้วย script เริ่มต้นด้วยการ login เข้า openstack user (makes sure ว่า username และ password คือ “openstack” บนทุกเครื่อง) และ download script ด้วยคำสั่ง
$ cd $HOME $ git clone https://github.com/kasidit/openstack-ocata-installer $ cd openstack-ocata-installer
เมื่อดู content ของ directory จะมีไฟล์และ subdirectory ดังนี้
$ ls config.d exe-config-installer.sh LICENSE README.md documents install-paramrc.sh OPSInstaller-init.tar $
ในกรณีที่ จะติดตั้งบน vbox vm ขอให้ copy ไฟล์ Example.vbox.install-paramrc.sh มาเป็น install-paramrc.sh ใน openstack-ocata-installer directory
$ cp documents/Example.vbox.install-paramrc.sh install-paramrc.sh
แต่ถ้าติดตั้งบน kvm หรือเครื่องจริงก็ให้ใช้ไฟล์ install-paramrc.sh ที่มีอยู่แต่เดิมเป็นตัวอย่าง
2.2 กำหนดค่าพารามีเตอร์สำหรับการติดตั้ง
ต่อไป จะกำหนด configuration สำหรับการติอตั้งโดยกำหนดค่าในไฟล์ install-paramrc.sh ซึ่งกำหนดค่า vm และเนตตามที่ระบุใน ส่วนที่ 1.1 และติดตั้งบน kvm (ที่ใช้รหัส ens เป็นชื่อ NIC) ก็สามารถใช้ไฟล์ install-paramrc.sh นี้ได้เลย และในกรณีที่ ใช้ vbox ติดตั้งและกำหนดค่าต่างๆเหมือนที่อธิบายในส่วน 1.2 ก็สามารถใช้ไฟล์ Example.vbox.install-paramrc.sh ได้เลยเช่นกัน (ข้ามไปทำส่วนที่ 2.3 ได้)
แต่อย่างไรก็ตาม หากติดตั้งบนเครื่องจริง ชื่อ NICs และค่าอื่นๆก็อาจเปลี่ยนไป ดังนั้นจะอธิบายความหมายของตัวแปรต่างๆในไฟล์ install-paramrc.sh เพื่อที่จะได้กำหนดค่าอย่างถูกต้องอันดับแรก environment variables สามอันแรกในไฟล์นั้นได้แก่
export INSTALL_TYPE=full export NETWORK_TYPE=dvr_ovs export PASSWD_TYPE=studypass
มีความหมายดังนี้ INSTALL_TYPE เป็นแบบ “full” คือเป็นการติดดั้งแบบ 4 nodes ถ้าเปลี่ยนค่าเป็น “compact” จะหมายถึงติดตั้งแบบ 3 nodes ได้แก่ controller network และ compute ส่วน NETWORK_TYPE เป็นตัวแปรที่ระบุชนิดของ network deployment ถ้ากำหนดค่าเป็น “dvr_ovs” หมายถึงใช้ neutron ที่สร้างด้วย openvswitch และปฏิบัติงานแบบ Distributed Virtual Router (DVR) ซึ่งเป็น default configuration ถ้าเปลี่ยนค่าเป็น “classic_ovs” จะหมายถีง neutron ที่สร้างด้วย openvswitch แต่ปฏิบัติงานแบบธรรมดา ไม่มี DVR high availabiility feature สำหรับตัวแปร PASSWD_TYPE เป็นตัวแปรที่ระบุชนิดของ password ที่จะถูกกำหนดสำหรับการติดตั้ง component ต่างๆของ openstack ถ้า่าเป็น “studypass” หมายถึงการกำหนดค่า password ที่เป็น string ธรรมดาที่สื่อความหมายว่าเป็น password ของ component ใด ในทางตรงกันข้าม ถ้ากำหนดค่าเป็น “randompass” จะหมายถึงการกำหนดค่า password สำหรับการติดตั้ง component เหล่านั้นให้เป็นตัวเลข random
export OPS_LOGIN_NAME=openstack export OPS_LOGIN_PASS=openstack export OPS_TIMEZONE=Asia\\/Bangkok
ตัวแปร OPS_LOGIN_NAME และ OPS_LOGIN_PASS ในที่นี้เรากำหนดให้เป็น “openstack” ทั้งคู่ ค่า OPS_LOGIN_NAME และ OPS_LOGIN_PASS นี้ต้องตรงกับชื่อ login name และค่า password ของ Linux account ที่ จะใช้ติดตั้ง OpenStack บนทุก node ส่วน OPS_TIMEZONE นั้นใช้กำหนดค่ว TIMEZONE ซึ่งในทีนี้คือ Asia/Bangkok
อันดับถัดไปคือการกำหนดค่า root password ของ mysql ซึ่งต้องจำด้วยว่ากำหนดค่าตัวแปรนี้ว่าอะไร เพราะในระหว่างการติดตั้ง ต้องป้อนค่านี้ด้วยตนเองอีกครั้งหนึ่ง สำหนับ DEMO_PASS และ ADMIN_PASS คือค่า password ของ “demo” user และ “admin” user หลังจากเสร็จสิ้นการติดตั้ง OpenStack
export OPS_MYSQL_PASS=mysqlpassword export DEMO_PASS=demopassword export ADMIN_PASS=adminpassword # export HYPERVISOR=qemu
ถัดจากนั้นจะเป็นการกำหนดค่า HYPERVISOR ให้เป็น “qemu” ในกรณีที่ ติดตั้งบนเครื่องจริง ให้เปลี่ยนค่าของตัวแปรนี้เป็น “kvm” แทน สำหรับตัวแปรถัดไปต่อไปนี้ ไม่ต้องไปยุ่งกับมันก็ได้ มันเป็นการกำหนดค่า url ของ cirros OS image ที่ script จะไป download มา ตัวแปร LOCAL_REPO เป็นการกำหนดค่า apt repository และตัวแปร NTP_SERVER เป็นตัวแปรกำหนดค่า NTP server ซึ่งถ้าติดตั้งในเมืองไทยคงไม่ต้องเปลี่ยนอะไร
export INIT_IMAGE_LOCATION=http:\\/\\/download.cirros-cloud.net\\/0.3.5\\/cirros-0.3.5-x86_64-disk.img export INIT_IMAGE_NAME=cirros # export DOMAINNAME=cs.tu.ac.th # # Ubuntu Repository Parameters # export LOCAL_REPO=th.archive.ubuntu.com export LOCAL_SECURITY_REPO=security.ubuntu.com # # ntp servers export NTP_SERVER0=0.th.pool.ntp.org export NTP_SERVER1=1.th.pool.ntp.org export NTP_SERVER2=2.th.pool.ntp.org export NTP_SERVER3=3.th.pool.ntp.org # # Deprecate export NTP_SERVER_LOCAL=10.0.10.126
อันดับถัดไปจะเป็นการกำหนดค่า network configuration ในกรณีที่จะติดตั้งด้วย script และต้องการกำหนดค่าตัวแปรที่แตกต่างจากที่ระบุในส่วนที่ 1 ควรทราบความหมายของตัวแปรเหล่านี้
จากภาพ ตัวแปรต่อไปนี้ใช้กำหนดค่าของ management network
export MANAGEMENT_NETWORK_NETMASK=255.255.255.0 export MANAGEMENT_NETWORK=10.0.10.0 export MANAGEMENT_BROADCAST_ADDRESS=10.0.10.255 export DNS_IP=8.8.8.8
ถัดจากนั้นเป็นตัวแปร GATEWAY_IP_NIC ซึ่งจะใช้สำหรับการติดตั้งด้วย vbox (ซึ่งจะใช้ controller เป็น virtual gateway) เท่านั้น เนื่องจากเราไม่ได้ใช้ vbox จึงไม่ต้องกำหนดค่าให้ตัวแปรนี้
ตัวแปร CONTROLLER_IP และ CONTROLLER_IP_NIC ใช้ระบุค่า IP address และ NIC แรกของเครื่อง controller และตัวแปร GATEWAY_IP ใช้ระบุค่า IP address ของ gateway router ของ management network ซึ่งในที่นี้จะหมายถึง IP address ของ gateway router ของ external network ด้วย เพราะเราจะใช้ management network เป็น external network ในการติดตั้งของเรา
export CONTROLLER_IP=10.0.10.11 export CONTROLLER_IP_NIC=ens3 # export GATEWAY_IP=10.0.10.1
ต่อไปเป็นการกำหนดค่า IP address ของ network node (ตัวแปร NETWORK_IP) และค่า NIC ของ network node ที่เชื่อมกับ management network (NETWORK_NODE_IP_NIC) ถัดจากนั้นจะเป็นการกำหนดค่าตัวแปรสำหรับ NIC ที่เชื่อมต่อ Data tunnel network ของ network node ได้แก่ DATA_TUNNEL_NETWORK_NODE_IP และ DATA_TUNNEL_NETWORK_NODE_IP_NIC และ DATA_TUNNEL_NETWORK_ADDRESS และ DATA_TUNNEL_NETWORK_NETMASK
export NETWORK_IP=10.0.10.21 export NETWORK_IP_NIC=ens3 # export DATA_TUNNEL_NETWORK_NODE_IP=10.0.11.21 export DATA_TUNNEL_NETWORK_NODE_IP_NIC=ens4 export DATA_TUNNEL_NETWORK_ADDRESS=10.0.11.0 export DATA_TUNNEL_NETWORK_NETMASK=255.255.255.0
นอกจากเชื่อมต่อกับ management และ data tunnel network แล้ว network node ยังต่อกับ Vlan network และ External network ด้วยซึ่งจะกำหนดค่าของทั้งสอง network ดังนี้
export VLAN_NETWORK_NODE_IP_NIC=ens5 # export EXTERNAL_CIDR=10.0.10.0\\/24 export EXTERNAL_CIDR_NIC=ens6 # export START_FLOATING_IP=10.0.10.100 export END_FLOATING_IP=10.0.10.200
จะเห็นได้ว่า การกำหนดค่าของ vlan network นั้นไม่ต้องทำอะไรมาก แค่กำหนดค่าตัวแปร VLAN_NETWORK_NODE_IP_NIC เพื่อระบุว่า NIC ไหนบน network node เชื่อมต่อกับ Vlan network (openstack จะมี CLI ให้ผู้ใช้ๆกำหนดค่าของ vlan network ได้หลังจากการติดตั้ง)
ส่วนตัวแปร EXTERNAL_CIDR_NIC คือการบอก OpenStack ว่า NIC ไหนบน network node ที่จะใช้ติดต่อกับ network ที่ติดต่อกับ Internet ได้ (หรือ External network) และเนื่องจากเครื่อง compute และ compute1 ก็มี NIC ต่อกับ External network เช่นกัน ผมจะใช้ค่าของตัวแปร EXTERNAL_CIDR_NIC ตัวแปรเดียวเพื่อกำหนดค่า NIC ดังกล่าวสำหรับ network compute และ compute1 node
ถัดจากนั้น จะต้องระบุ CIDR ของ External network (ด้วยตัวแปร EXTERNAL_CIDR) ซึ่งในการติดตั้งนี้เราจะใช้ CIDR ของ management network
หลังจากนั้น ต้องกำหนดค่า range ของ Floating IP โดยให้ตัวแปร START_FLOATING_IP เป็นค่า IP address เริ่มต้น และตัวแปร END_FLOATING_IP เป็นค่า IP address สุดท้าย
ต้องระบุค่าตัวแปร COMPUTE_NODE_IP เพื่อกำหนดค่า IP address บน management network ของ compute node และกำหนดค่า COMPUTE_NODE_IP_NIC เพื่อระบุว่า NIC ไหนของ compute node ที่ใช้ต่อกับ management network ตัวแปร DATA_TUNNEL_COMPUTE_NODE_IP และ DATA_TUNNEL_COMPUTE_NODE_IP_NIC ใช้กำหนดค่า IP address และ NIC ที่เชื่อมต่อกับ data tunnel network ส่วน VLAN_COMPUTE_NODE_IP_NIC ใช้ระบุค่า NIC ที่เชื่อมต่อกับ Vlan network
export COMPUTE_IP=10.0.10.31 export COMPUTE_IP_NIC=ens3 export DATA_TUNNEL_COMPUTE_NODE_IP=10.0.11.31 export DATA_TUNNEL_COMPUTE_NODE_IP_NIC=ens4 export VLAN_COMPUTE_NODE_IP_NIC=ens5
ในไฟล์ install-paramrc.sh เรากำหนดค่าตัวแปรสำหรับ compute1 node ในแบบเดียวกันกับการกำหนดค่าของ compute node ข้างต้น
3 การติดตั้ง OpenStack ocata ด้วย scripts
เริ่มต้นการติดตั้งด้วยคำสั่งต่อไปนี้ (หมายเหตุ ต้องออกคำสั่งใน user mode คือเป็น openstack user ห้ามใช้ sudo จนจบ script เหล่านี้)
$ cd $HOME/openstack-ocata-installer $ ./exe-config-installer.sh
คำสั่ง ./exe-config-installer.sh จะนำค่าที่กำหนดใน install-paramrc.sh ไปแทนค่า template ของ scripts สำหรับติดตั้ง openstack ในไฟล์ OPSInstaller-init.tar และสร้าง directory ใหม่ชือ OPSInstaller ขึ้น
ให้ cd เข้า directory ดังกล่าวดังนี้
$ cd OPSInstaller/installer
ในกรณีที่ ติดตั้งบน vbox จะต้อง script OS-installer-00-0-set-gateway.sh ข้างล่างนี้เพื่อทำให้เครื่อง controller เป็น virtual gateway สำหรับ management network ถ้าไม่ได้ใช้ vbox ให้ข้ามไปรัน script ถัดไปเลย
$ ./OS-installer-00-0-set-gateway.sh
ถัดจากนั้นรัน script แรกเพื่อทำให้สามารถ remote ssh จาก controller ไปยังเครื่องอื่นๆได้โดยไม่ต้องใส่ password (หมายเหตุ: ในกรณีที่ จะใช้ script ติดตั้งเพื่อใช้งานจริง หลังจากติดตั้งเสร็จเรียบร้อยแล้ว ต้องทำสองอย่างได้แก่ (1) เปลี่ยน password ของ openstack user บนทุกเครื่องและ (2) ลบเนื้อหาของไฟล์ $HOME/.ssh/id_rsa และไฟล์ $HOME/.ssh/authorized_keys ใน openstack user บนทุกเครื่อง) (ดู youtube video)
$ ./OS-installer-00-1-set-remote-access.sh
script ที่สองจะ update ubuntu 16.04 บนโหนดต่างๆให้เป็นเวอร์ชันล่าสุดและกำหนด cloud repository สำหรับ openstack ocata installation
$ ./OS-installer-00-2-update-ubuntu.sh
script จะ remote ssh เข้าไปที่เครื่อง controller network compute และ compute1 และในระหว่างที่ update ubuntu ของแต่ละเครื่อง มันจะถามให้ กด [ENTER] เครื่องละครั้ง หลังจาก update ubuntu บนแต่ละเครื่องเสร็จมันจะ reboot เครื่องเหล่านั้น โดยจะ reboot เครื่อง controller หลังสุด
ในอันดับถัดไป เราจะเริ่มต้นด้วยการกำหนดค่า network configurations ที่จำเป็นสำหรับการติดตั้ง openstack ด้วย OS-installer-01-node-setups.sh ซึ่งจะกำหนดค่าและ ifup interfaces ต่างๆบนทุกๆเครื่องในภาพที่ 1 และติดตั้ง chrony เพื่อ sync เวลาระหว่าง NTP server กับ controller และระหว่าง controller กับทุกๆ node
$ ./OS-installer-01-node-setups.sh
หลังจากนั้นจะติดตั้ง mysql ด้วย script OS-installer-02-mysql.sh
$ ./OS-installer-02-mysql.sh
ขอให้จำรหัสผ่านสำหรับ root ของ mysql ที่กำหนดไว้ใน install-paramrc.sh ด้วย (ในที่นี้คือ “mysqlpassword”) ระหว่างที่รัน script นี้จะต้องระวังและป้อนค่าตามที่ script ต้องการดังนี้
- หลังจากติดตั้ง mysql แล้ว script จะให้ป้อนค่า root password ซึ่งไม่มีเพราะเป็นการติดตั้งใหม่ ดังนั้น ต้อง กด ENTER
- ถัดจากนั้นมันจะให้ป้อน password (mysqlpassword) สองครั้ง
- คำถามที่เหลือตอบ y ให้หมด
จะติดตั้ง rabbitmq ซึ่งเป็น message queue software ที่ components ของ openstack ใช้สื่อสารกัน
$ ./OS-installer-03-rabbitmq.sh
ถัดจากนั้นจะติดตั้ง keystone
$ ./OS-installer-04-keystone.sh
ตามด้วย glance
$ ./OS-installer-05-glance.sh
และ nova
$ ./OS-installer-06-nova.sh
และ neutron
$ ./OS-installer-07-neutron.sh
ติดตั้ง horizon web gui (ถ้าเครื่อง cpu หรือ memory น้อย แนะนำให้ใช้ CLI แทน web interface)
$ ./OS-installer-08-horizon.sh
กำหนดค่า network ให้เป็น Distributed Virtual Router (DVR)
$ ./OS-installer-09-set-dvr.sh
ใช้ script สร้าง network เริ่มต้นและทดสอบ network
$ ./OS-installer-10-initial-user-network.sh
2.4 ใช้งาน OpenStack Horizon
ในกรณีที่ติดตั้งบนเครื่องจริง ควรจะเข้าใช้ web interface ของ openstackได้ที่ http://10.0.10.11:80/horizon/


