Setelah kita selesai membangun cluster OpenStack dengan kolla ansible pada postingan sebelumnya, untuk mengoperasikan OpenStack melalui CLI terdapat beberapa langkah sebagai berikut:

Mengakses Cluster

Menggunakan OpenStack RC File

File RC berisi kumpulan variabel yang digunakan untuk mengakses OpenStack dengan user atau project tertentu.

source ~/admin-openrc.sh

Membuat Project

openstack project create --enable --description "project untuk kubernetes" kubernetes
openstack project list --long --fit-width

Membuat User

openstack user create --project admin --email [email protected] --password p@ssw0rd viki
openstack user create --project kubernetes --email [email protected] --password-prompt k8s
openstack user set viki --project kubernetes

Verifikasi

for i in {viki,k8s}; do
    openstack user show $i;
done

Role Project

openstack role add --user viki --project admin admin
openstack role add --user viki --project kubernetes member
openstack role add --user k8s --project kubernetes admin

Verifikasi

for i in {viki,k8s}; do
    openstack role assignment list --user $i --names;
done

Membuat Kuota Project

openstack quota set --core 24 --ram 20480 --instances 10 --volumes 10 --floating-ips 6 --secgroups 2 kubernetes

Membuat Image

Unduh file cloud image terlebih dahulu:

wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
curl -LO https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img

Kemudian import image yang sudah diunduh ke OpenStack dengan perintah berikut:

openstack image create --public --disk-format qcow2 --file cirros-0.6.1-x86_64-disk.img cirros-test
openstack image create --public --disk-format qcow2 --file focal-server-cloudimg-amd64.img ubuntu20-focal
openstack image list

Membuat Flavor

Flavor mendefinisikan spesifikasi sebuah instance. Contohnya, membuat flavor dengan 1 VCPU, 1GB RAM, dan 10GB Disk dapat dilakukan dengan perintah berikut:

openstack flavor create --project kubernetes --private --vcpu 2 --ram 2048 --disk 2 n1-kubemaster
openstack flavor create --project kubernetes --private --vcpu 4 --ram 4096 --disk 4 n2-kubeworker
openstack flavor list --all

Membuat SSH Keypair

Keypair di sini adalah SSH keypair yang biasanya kita buat dengan perintah ssh-keygen, yang menghasilkan file public key dan private key. Ini membantu cloud-init untuk memasukkan public key ke dalam instance. Untuk membuat keypair, gunakan perintah berikut:

openstack keypair create --public-key ~/.ssh/id_rsa.pub controller-key
openstack keypair create --public-key ~/.ssh/k8s.pub k8s-key

Membuat Security Group

Security group berfungsi sebagai firewall pada level instance. Misalnya, kita dapat mengatur koneksi masuk (ingress) pada SSH (TCP port 22), layanan web (TCP port 80, 443), dan protokol ICMP dengan perintah berikut:

Membuat security group kubesecgroup

openstack security group create kubesecgroup
openstack security group rule create --ingress --protocol icmp
openstack security group rule create --ingress --protocol tcp --dst-port 22 --description ssh
openstack security group rule create --ingress --protocol tcp --dst-port 80 --description http
openstack security group rule create --ingress --protocol tcp --dst-port 443 --description https
openstack security group rule create --ingress --protocol tcp --dst-port 6443 --description api-service
openstack security group rule create --ingress --protocol tcp --dst-port 8443 --description ha-api-service
openstack security group show kubesecgroup

Membuat security group app-secgroup

openstack security group create app-secgroup
openstack security group rule create --ingress --protocol tcp --dst-port 30080 --description http-ingress
openstack security group rule create --ingress --protocol tcp --dst-port 30443 --description https-ingress

Membuat External Network

External network digunakan untuk komunikasi keluar dari instance melalui provider eksternal. Untuk membuatnya, kita perlu mengetahui physical network provider terlebih dahulu dengan perintah berikut:

sudo cat /etc/kolla/neutron-server/ml2_conf.ini | grep flat_network | awk '{print $3}'

Kemudian, definisikan network dan subnet dengan perintah berikut:

openstack network create --project admin --external --provider-network-type flat \
--provider-physical-network physnet1 ext-net

openstack subnet create --network ext-net \
--subnet-range 172.16.1.0/24 --gateway 172.16.1.1 --dns-nameserver 172.16.1.1 \
--allocation-pool start=172.16.1.242,end=172.16.1.254 --no-dhcp ext-subnet

openstack network list --long --fit-width
openstack subnet list --long --fit-width

Membuat Internal Network

Internal network digunakan untuk komunikasi antar instance melalui jaringan internal. Untuk membuatnya, definisikan network dan subnet dengan perintah berikut:

openstack network create --internal kubenet
openstack subnet create --network kubenet --subnet-range 10.1.0.0/24 --gateway 10.1.0.1 kubesubnet
openstack network list --long --fit-width
openstack subnet list --long --fit-width

Membuat Router

Di OpenStack, router digunakan untuk menghubungkan trafik internal ke trafik eksternal, baik masuk (ingress) maupun keluar (egress). Untuk membuat router, gunakan perintah berikut:

openstack router create kuberouter
openstack router set --external-gateway ext-net kuberouter
openstack router add subnet kuberouter kubesubnet
openstack router show kuberouter

Membuat Instance

Setelah langkah-langkah di atas selesai, Anda dapat membuat instance dengan perintah berikut:

openstack server create --flavor n1-kubemaster --network kubenet \
--key-name k8s-key --image ubuntu20-focal --security-group kubesecgroup k8s-master01

openstack server create --flavor n2-kubeworker --network kubenet \
--key-name k8s-key --image ubuntu20-focal --security-group kubesecgroup k8s-worker01

Membuat Floating IP

Floating IP berfungsi sebagai NAT yang diterapkan ke IP internal instance. Untuk membuat floating IP, gunakan perintah berikut:

openstack floating ip create --floating-ip 172.16.1.244 ext-net
openstack floating ip create --floating-ip 172.16.1.245 ext-net
openstack floating ip list
openstack server add floating ip k8s-master01 172.16.1.244
openstack server add floating ip k8s-worker01 172.16.1.245
openstack server list

Membuat Volume

Volume digunakan sebagai penyimpanan persisten untuk instance dalam bentuk block storage. Untuk membuat volume dan meng-attach ke instance, gunakan perintah berikut:

openstack volume create --size 1 mvolume
openstack server add volume k8s-master01 mvolume

Memperbesar Volume

openstack server remove volume k8s-master01 mvolume
openstack volume set --size 2 mvolume
openstack volume list
openstack server add volume k8s-master01 mvolume
openstack server show k8s-master01

Instance dengan Penyimpanan Persisten

Untuk membuat penyimpanan persisten pada partisi root saat instance dibuat, gunakan perintah berikut:

openstack volume create --size 10 --image ubuntu20-focal web-server-ubuntu02
openstack server create --flavor c1-standard-01 \
  --key-name controllerkey \
  --security-group secg-basic-web \
  --network int-net01 \
  --volume web-server-ubuntu02 --wait \
  web-server-ubuntu02

Upgrade Instance dengan Flavor Baru

Seiring waktu, spesifikasi instance mungkin perlu di-upgrade untuk memenuhi kebutuhan resource baru. Untuk melakukan upgrade, ikuti perintah berikut:

openstack flavor create --vcpus 2 --ram 2048 --disk 15 --public c2-standard-01
openstack server resize --flavor c2-standard-01 web-server-ubuntu01
openstack server list | grep web-server-ubuntu01
openstack server resize confirm web-server-ubuntu01

Referensi