Friday, November 25, 2016

Instalasi OpenStack All in One (AIO) VM pada OpenSUSE 42.2 (I)

Pada pos ini hanya membahas mengenai langkah-langkah instalasi OpenStack All in One (AIO) VM pada OpenSUSE 42.2 yang dilakukan di Workshop OpenStack Administration dan diselenggarakan oleh Btech, komunitas GLIB, dan OpenSUSE ID. Untuk mengetahui tentang dasar-dasar OpenStack, pembaca dapat mengunjungi Routecloud, SekolahLinux, atau dokumentasi OpenStack Pada pos ini hanya akan membahas cara instalasi OpenStack pada suatu mesin virtual dengan sistem operasi OpenSUSE 42.2. Sebelum memulai, persiapkan dahulu mesin virtual yang berisi OpenSUSE 42.2 (minimal installation).

Disarankan untuk mengalokasikan sumber daya pada mesin virtual seperti gambar di bawah ini.


Tapi pada pos ini saya mengalokasikan 2 core CPU, 5.5 GB memori, ruang penyimpanan (HDD) 20 GB, dan dua antarmuka jaringan (network interface) karena spesifikasi sumber daya yang saya punya kurang memadai. Layanan tetap berjalan normal walau responnya sedikit lambat.

Berikut topologi yang akan digunakan.
INTALASI OPENSTACK
Langsung saja mulai. Jalankan mesin virtual yang sudah terinstal OpenSUSE 42.2 lalu tambahkan repository agar proses pengunduhan paket bisa lebih cepat lalu lakukan update.
pod13:~ # zypper mr -da
pod13:~ # zypper ar -f http://mirror.internode.on.net/pub/opensuse/distribution/leap/42.2/repo/non-oss/ repo-internode-oss
pod13:~ # zypper ar -f http://mirror.internode.on.net/pub/opensuse/distribution/leap/42.2/repo/oss/ repo-internode-non-oss
pod13:~ # zypper ar -f http://mirror.internode.on.net/pub/opensuse/update/leap/42.1/non-oss/ repo-internode-update-oss
pod13:~ # zypper ar -f http://mirror.internode.on.net/pub/opensuse/update/leap/42.2/oss/ repo-internode-update-non-oss
pod13:~ # zypper ref
pod13:~ # zypper dup

Setelah itu unduh skrip bash pada tautan ini dengan menggunakan wget.
pod13:~ # wget -c https://github.com/GLiBogor/leap42-newton-aio/archive/master.zip
Ekstrak berkas tersebut lalu ubah berkas os.conf yang terdapat pada direktori leap-
pod13:~ # unzip master.zip 
pod13:~ # cd leap42-newton-aio-master/
pod13:~/leap42-newton-aio-master # vi os.conf 
Lalu ubah sesuai dengan alamat IP yang anda punya. Pada pos ini saya memberikan alamat IP 10.99.99.13 untuk eth0 dan 10.88.88.13 untuk eth1. Untuk password saya isi "RAHASIA". Berikut isi berkas os.conf saya.
INTMAN=eth0
IPMAN=10.99.99.13
INTEXT=eth1
IPEXT=10.88.88.13
PASSWORD=RAHASIA
Simpang perubahan berkas os.conf lalu eksekusi skrip BASH dari nomor urut 00 sampai 05 secara berurut.
pod13:~/leap42-newton-aio-master # chmod +x *.sh
pod13:~/leap42-newton-aio-master # ./00-env.sh
Tunggu sampai selesai. Lama instalasi tergantung pada kecepatan internet, CPU, maupun media penyimpanan. Skrip di atas melakukan instalasi NTP Client, menambahkan repository OpenStack versi Newton, instalasi python-openstackclient, instalasi MariaDB, erlang-epmd, rabbitmq, dan memcached. Cek status masing-masing layanan apakah sudah terinstal (dan berjalan) atau belum menggunakan perintah systemctl.
pod13:~/leap42-newton-aio-master # . admin-openrc && systemctl status ntpd.service mysql.service epmd.socket epmd.service rabbitmq-server.service memcached.service
● ntpd.service - NTP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/ntpd.service.d
           └─50-insserv.conf-$time.conf
   Active: active (running) since Thu 2016-11-24 23:38:16 WIB; 19min ago
     Docs: man:ntpd(1)
 Main PID: 1453 (ntpd)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/ntpd.service
           ├─1453 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u ntp:ntp -c /etc/ntp.conf
           └─1454 ntpd: asynchronous dns resolver

Nov 24 23:38:16 pod13 systemd[1]: Starting NTP Server Daemon...
Nov 24 23:38:16 pod13 ntpd[1452]: ntpd 4.2.8p8@1.3265-o Fri Oct 28 16:49:28 UTC 2016 (1): Starting
Nov 24 23:38:16 pod13 ntpd[1452]: Command line: /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u ntp:ntp -c /etc/ntp.conf
Nov 24 23:38:16 pod13 ntpd[1453]: proto: precision = 0.044 usec (-24)
Nov 24 23:38:16 pod13 ntpd[1453]: switching logging to file /var/log/ntp
Nov 24 23:38:16 pod13 start-ntpd[1426]: Starting network time protocol daemon (NTPD)
Nov 24 23:38:16 pod13 systemd[1]: Started NTP Server Daemon.

● mysql.service - MySQL server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-11-24 23:40:50 WIB; 16min ago
 Main PID: 1940 (mysqld)
    Tasks: 35 (limit: 512)
   CGroup: /system.slice/mysql.service
           └─1940 /usr/sbin/mysqld --defaults-file=/etc/my.cnf --user=mysql

Nov 24 23:40:49 pod13 mysql-systemd-helper[1836]: You can find additional information about the MySQL part at:
Nov 24 23:40:49 pod13 mysql-systemd-helper[1836]: http://dev.mysql.com
Nov 24 23:40:49 pod13 mysql-systemd-helper[1836]: Support MariaDB development by buying support/new features from MariaDB
Nov 24 23:40:49 pod13 mysql-systemd-helper[1836]: Corporation Ab. You can contact us about this at sales@mariadb.com.
Nov 24 23:40:49 pod13 mysql-systemd-helper[1836]: Alternatively consider joining our community based development effort:
Nov 24 23:40:49 pod13 mysql-systemd-helper[1836]: http://mariadb.com/kb/en/contributing-to-the-mariadb-project/
Nov 24 23:40:49 pod13 mysql-systemd-helper[1941]: Waiting for MySQL to start
Nov 24 23:40:49 pod13 mysql-systemd-helper[1940]: 161124 23:40:49 [Note] /usr/sbin/mysqld (mysqld 10.0.27-MariaDB) starting as process 1940 ...
Nov 24 23:40:50 pod13 mysql-systemd-helper[1941]: MySQL is alive
Nov 24 23:40:50 pod13 systemd[1]: Started MySQL server.

● epmd.socket - Erlang Port Mapper Daemon Activation Socket
   Loaded: loaded (/usr/lib/systemd/system/epmd.socket; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2016-11-24 23:41:45 WIB; 15min ago
   Listen: 0.0.0.0:4369 (Stream)

Nov 24 23:41:45 pod13 systemd[1]: Closed Erlang Port Mapper Daemon Activation Socket.
Nov 24 23:41:45 pod13 systemd[1]: Listening on Erlang Port Mapper Daemon Activation Socket.

● epmd.service - Erlang Port Mapper Daemon
   Loaded: loaded (/usr/lib/systemd/system/epmd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-11-24 23:41:45 WIB; 15min ago
 Main PID: 2133 (epmd)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/epmd.service
           └─2133 /usr/bin/epmd -systemd

Nov 24 23:41:45 pod13 systemd[1]: Started Erlang Port Mapper Daemon.

● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-11-24 23:41:46 WIB; 15min ago
 Main PID: 2155 (rabbitmq-server)
   Status: "Exited."
    Tasks: 74 (limit: 512)
   CGroup: /system.slice/rabbitmq-server.service
           ├─2155 /bin/sh /usr/sbin/rabbitmq-server
           ├─2161 /usr/lib64/erlang/erts-7.3.1.2/bin/beam.smp -W w -A 64 -P 1048576 -K true -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa...
           ├─2296 inet_gethost 4
           └─2297 inet_gethost 4

Nov 24 23:41:45 pod13 systemd[1]: Starting RabbitMQ broker...
Nov 24 23:41:46 pod13 systemd[1]: Started RabbitMQ broker.

● memcached.service - memcached daemon
   Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-11-24 23:48:39 WIB; 8min ago
 Main PID: 5310 (memcached)
    Tasks: 7 (limit: 512)
   CGroup: /system.slice/memcached.service
           └─5310 /usr/sbin/memcached -l 127.0.0.1

Nov 24 23:48:39 pod13 systemd[1]: Stopped memcached daemon.
Nov 24 23:48:39 pod13 systemd[1]: Started memcached daemon.
pod13:~/leap42-newton-aio-master #
Bila semua layanan di atas statusnya active, lanjutkan dengan mengeksekusi skrip 01-keystone.sh.
pod13:~/leap42-newton-aio-master # ./01-keystone.sh
Tunggu sampai skrip tersebut selesai dieksekusi. Sambil menunggu selesai, silakan buka tautan ini yang menjelaskan fungsi Keystone pada OpenStack.
pod13:~/leap42-newton-aio-master # . admin-openrc && systemctl status apache2.service && openstack project list && openstack token issue
Layanan Keystone telah aktif yang ditandai dengan munculnya tabel seperti di atas :-P
Selanjutnya eksekusi skrip BASH 02.glance.sh untuk menginstal layanan Glance. Glance digunakan sebagai layanan images. Penjelasan lebih lengkapnya bisa dilihat di sini.
pod13:~/leap42-newton-aio-master # ./02-glance.sh
Cek apakah instalasi Glance sudah berhasil atau tidak.
pod13:~/leap42-newton-aio-master # . admin-openrc && systemctl status openstack-glance-api.service openstack-glance-registry.service && glance image-list

Bila semua status telah active dan tampil tabel seperti di atas, maka instalasi Glance telah berhasil. Selanjutnya eksekusi skrip BASH 03-nova.sh.
pod13:~/leap42-newton-aio-master # ./03-nova.sh
Nova digunakan untuk mengatur sumber daya komputasi yang akan digunakan oleh instances/VM. Penjelasan lebih lengkapnya bisa diliht di sini. Selanjutnya cek apakah Nova sudah terinstal dan sudah dikonfigurasi sesuai dengan yang ada pada skrip BASH 03.nova.sh.
pod13:~/leap42-newton-aio-master # . admin-openrc && systemctl status openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service libvirtd.service openstack-nova-compute.service && openstack compute service list
Bila semua status telah active dan tampil tabel seperti di atas, maka instalasi Nova telah berhasil. Selanjutnya eksekusi skrip BASH 04-neutron.sh.
pod13:~/leap42-newton-aio-master # ./04-neutron.sh
Neutron adalah layanan pada OpenStack yang menyediakan "Network as Service" antar perangkat jaringan (vNIC) yang dikelola oleh layanan OpenStack lainnya (Nova). Penjelasan lebih lengkapnya dapat dilihat di sini. Selanjutnya cek apakah instalasi Neutron sudah berhasil atau tidak.
pod13:~/leap42-newton-aio-master # . admin-openrc && systemctl status openstack-neutron.service openstack-neutron-linuxbridge-agent.service openstack-neutron-dhcp-agent.service openstack-neutron-metadata-agent.service openstack-neutron-l3-agent.service && neutron ext-list && openstack network agent list
Bila semua status telah active dan tampil tabel seperti di atas, maka instalasi Neutron telah berhasil. Selanjutnya eksekusi skrip BASH 05-horizon.sh.
pod13:~/leap42-newton-aio-master # ./05-Horizon.sh
Horizon adalah layanan Dashboard pada OpenStack yang berbasis web dan dapat mengelola semua layanan Openstack lainnya. Penjelasan lebih lengkapnya dapat dilihat di sini. Selanjutnya cek apakah instalasi Horizon berhasil atau tidak dengan cara membukanya dengan memasukkan alamat IP VM. Bila berhasil maka akan tampil halaman login seperti ini.
Masukkan domain dengan "default", User Name dengan "admin", dan Password dengan "RAHASIA" lalu login. Maka akan tampil halaman seperti ini.

MEMBUAT INSTANCE
Sebelum melanjutkan instalasi Cinder dan Swift, saya akan membahas tentang langkah-langkah membuat flavor (jenis-jenis spesifikasi untuk VM), mengunggah image untuk instance/VM, membuat jaringan untuk eksternal dan internal, router untuk menghubungkan jaringan eksternal dan internal,  membuat Security Group yang dapat digunakan pada suatu instance, dan terakhir membuat instance/VM yang dapat terhubung dengan jaringan eksternal. Pertama-tama, buat dahulu sebuah flavor yang akan nanti digunakan untuk membuat instance. Masuk ke Dashboard lalu masuk ke Admin -> System -> Flavor. Pilih "Create Flavor" dan masukkan nama dan spesifikasi sesuai yang diinginkan. Pada pos ini saya membuat satu buah flavor dengan nama "mini", spesifikasi 1 VCPU, RAM 256 MB, dan 2GB Disk. Setelah semua diisi, pilih "Create Flavor". Bila sudah dibuat maka tabel pada menu Flavor akan tampil seperti ini.
Setelah itu buat semua Images yang nanti akan digunakan oleh instance. Masuk ke Admin -> System -> Images lalu pilih "Create Images". Pada pembuatan images di Dashboard, saya memberikan nama "cirros1", image yang digunakan adalah cirros, dan dengan format QCOW2. Kalau images berhasil dibuat makan halaman images akan tampil seperti gambar di bawah ini.
Selanjutnya buat sebuah jaringan (network) eksternal. Masuk ke Admin -> System -> Networks, lalu pilih "Create Network". Pada jendela Create Network, saya masukkan sesuai dengan di bawah ini.
Name = ext-int
Project = admin
Provide Network Type = Flat
Physical Netowrk = external
Admin State = UP
Shared = Yes
external Network = Yes
Kalau jaringan berhasil dibuat, maka akan tampil seperti gambar di bawah ini.
Setelah itu klik Network Name "ext-int" lalu masuk ke Subnet dan pilih "Create Subnet". Masukkan nama subnet, alamat jaringan. alamat gateway, dan allocation pool yang berada pada Subnet Details.
Subnet Name = sub-ext
Network Address = 10.88.88.0/24
IP Version = IPV4
Gateway IP = 10.88.88.254
Allocation Pool = 10.88.88.130,10.88.88.139
Setelah itu masuk ke halaman Project -> Network -> Networks, pilih "Create Network". Isi sesuai dengan yang di bawah ini.
Network Name = int0
Admin State = UP
Shared = Yes
Create Subnet = Yes
Subnet Name = sub-int0
Network Address = 192.168.10.0/24
IP Version = IPV4
Gateway IP = 192.168.10.254
Allocation Pool = 192.168.10.1,192.168.10.100
DNS Name Servers = 8.8.8.8
Setelah itu klik "Create". Maka tabel Networks akan tampil seperti berikut.
Selanjutnya masuk ke Project -> Network -> Routers, lalu pilih "Create Router" lalu berikan nama router sesuai yang diinginkan. Saya memberikan nama "rotuer0". Pada bagian External Network "pilih "ext-int" lalu klik Create Router. Maka tabel Routes akan tampil seperti gambar di bawah ini.
Agar jaringan "int0" dapat terhubung dengan jaringan "ext-int" tambahkan interface untuk jaringan "int0". Caranya klik nama router yang tadi dibuat (router0), lalu masuk ke bagian "Interfaces" lalu pilih "Add Interfaces". Pada opsi Subnet, pilh "int0: 192.168.10.0/24 (sub/int0)" dan masukkan alamat IP "192.168.1.254". Lalu klik "Submit" maka tabel Interfaces akan seperti gambar di bawah ini.

Selanjutnya buat sebuah grup yang terdiri dari rules yang nanti akan digunakan oleh instances. Buat sebuah grup bernama "sec1"
Lalu pilih "Manage Rules" pada "sec0". Setelah itu tambahkan rule dengan cara pilih "Add Rule". Pilih Rule "All ICMP" dan dengan Direction "Ingress", tujuannya agar host lain yang berada pada jaringan eksternal dapat mengirimkan ping lalu klik Add. Tambahkan rule "SSH" agar host lain dapat melakukan remote ke instances yang ada di jaringan internal.
Setelah semua sudah siap, waktunya membuat sebuah instances. Masuk ke halaman Project -> Compute -> Instances lalu pilih "Launch Instances". Isi sesuai dengan yang ada di bawah ini.
Instance Name = nganu0
Availability Zone = nova
Count = 1
Source = cirros1
Flavor = mini
Networks = int0
Security Group = default, sec0
Pada bagian Key Pair, klik "Import Key Pair". berikan nama Key Pair lalu masukkan Public Key user server. Pada pos ini menggunakan Public Key root yang berada pada ~/.ssh/id_rsa.pub yang sudah dibangkitkan menggunakan perintah "ssh-keygen -t rsa".
Lalu klik "Import Key Pair". Setelah itu klik "Launch Instace".

Instance berhasil dibuat. Seperti yang terlihat di tabel, "nganu0" sudah memiliki alamat IP 192.168.10.3 yang otomatis diberikan sesusai dengan projek network yang sebelumnya dibuat (int0). Untuk mengecek instance sudah terinstal cirros atau belum, klik "nganu0" lalu masuk ke bagian "Console".
Seperti yang terlihat, Cirros berhasil terinstal pada instance "nganu0". Agar instance dapat terhubung dengan jaringan eksternal, berikan Floating IP pada instance nganu0. Caranya masuk ke Project -> Compute -> Instances -> pada nganu0 pilih opsi "Associate Floating IP". Pada bagian "IP Address" klik simbol "+" lalu pilih "ext-int" sebagai Pool, lalu klik "Allocate IP". Jendela Floating IP berubah menjadi seperti ini.
Lalu klik "Associate". Seperti yang terlihat pada tabel, pada instance "nganu0" di bagian IP Address terjadi penambahan "Floating IPs: 10.88.88.132" yang artinya instance tersebut memiliki alamat IP eksternal (10.88.88.0/24).
Untuk membuktikannya, lakukan remote instance tersebut (10.88.88.132) dari server (10.88.88.13). 
Server berhasil terhubung ke instance.

Karena sudah larut, untuk instalasi Cinder dan Swift akan dibahas di pos berikutnya (Bag. II). Sekian tutorial kali ini. Semoga bermanfaat.

No comments:

Post a Comment