Virtual Machine dan Container

Hai semuanya, apa kabar? Kali ini saya mau nulis tentang perbandingan VM dan Container. Pada Proxmox Virtual Environment (PVE), kita bisa membuat atau konfigurasi VM dan Container. Setelah beberapa pengujian dan video youtube yang saya tonton, saya menyadari terdapat beberapa hal yang berbeda diantara keduanya.

VM dan container memiliki fungsi utama yang mirip, yaitu untuk menjalankan aplikasi. Beberapa aspek yang berbeda dari keduanya adalah tentang isolasi, fleksibilitas, dan waktu startup. Pada post kali ini, saya akan mencoba menuliskannya.

Saya coba contohkan ilustrasi singkat terlebih dahulu (gambar 1). Komponen pada VM meliputi perangkat/hardware, hypervisor, kemudian OS yang terpasang pada masing masing VM.

Hardware-Perangkat-2
Gambar 1 VM vs CT

Pada VM, terdapat Hypervisor. Bayangkan kita memiliki sebuah server yang berisi beberapa OS dalam satu waktu. Tiap OS ingin memiliki kendali penuh terhadap sumber daya atau resource dari server yang kita punya. Disinilah Hypervisor digunakan. Hypervisor merupakan “manajer” dari resources yang dimiliki server kita. Hypervisor terletak diantara hardware dan OS yang ingin menggunakan resource dari server kita. Hypervisor bertugas untuk membagi resources komputer untuk dapat digunakan oleh banyak OS.

Pada container, terdapat Container Manager. Container manager berfungsi untuk melakukan manajemen terhadap containers, seperti pembuatan, deployment dan alokasi resource. Salah satu program container manager yang terkenal adalah Docker.

Mungkin ada dari para pembaca yang memiliki pertanyaan seperti ini:
“Itu kok di gambar yang VM habis perangkat langsung hypervisor? Terus kalo misalkan saya pakai komputer Windows dan pasang Virtualbox itu bagaimana?”

Gambar yang saya tampilkan (gambar 1) menggambarkan untuk environment virtualisasi untuk tingkat Enterprise. Sedangkan untuk case tadi, seperti VirtualBox yang dipasang pada komputer pengguna umum, hirarkinya adalah (dari yang paling bawah/dasar): Hardware/Perangkat -> Host Operating System -> Hypervisor -> VM (gambar 2).

Hardware-Perangkat-3
Gambar 2
  1. Perangkat. Merepresentasikan perangkat fisik yang digunakan.
  2. Host OS. OS yang digunakan pada perangkat. Misalkan Windows, Mac OS, atau Linux.
  3. Hypervisor. VirtualBox bertindak sebagai hypervisor.
  4. VM. VM atau machines yang kita buat di dalam VirtualBox.

Lalu, bagaimana dengan Proxmox Virtual Environment (PVE)? Karena PVE bisa digunakan untuk membuat VM maupun container.

Proxmox-VE-8-0-Cluster-Summary
Gambar 3 – Tampilan PVE (sumber: web Proxmox)

Proxmox VE merupakan “hyper-converged infrastructure open source software“. PVE merupakan hosted hypervisor dan juga sebagai sebuah distribusi Linux berbasis Debian dengan kernel Ubuntu LTS yang sudah dimodifikasi. PVE memungkinkan deployment dan mengatur (manajemen) VM dan Container. Jadi, bisa dikatakan PVE merupakan hypervisor sekaligus OS.

Kita kembali lagi ke topik sebelumnya. Terkait dengan perbedaan apa saja yang ada pada VM dan Container.

1. Isolasi
VM memungkinkan adanya isolasi yang kuat karena tiap VM menjalankan OS-nya masing-masing (artinya juga memiliki kernel sendiri yang tidak dibagikan ke luar). Seperti membuat “lingkungan” atau environment masing-masing. Hal ini membuat masalah yang terjadi pada suatu VM tidak akan berpengaruh terhadap VM lain.
Sedangkan pada Container, terdapat beberapa hal yang saling dibagikan (shared) yaitu kernel dari host OS. Ya, container juga memungkinkan isolasi antar container. Namun isolasi ini tidak seketat VM. Misalnya, apabila terdapat konfigurasi yang salah pada kernel di host OS, kernel yang bermasalah ini mungkin saja dapat berpengaruh pada banyak container di perangkat atau host tersebut.
VM= Isolation of Machines, Container=Isolation of Processes

Motherboard
Gambar 4

2. Alokasi Sumber Daya (resources)
VM memiliki alokasi resources masing-masing. Misalkan untuk penggunaan CPU, memori, dan penggunaan. Dimana alokasi ini sudah diatur untuk masing-masing VM dan tidak dapat dibagikan atau diatur langsung dari VM lain. Hal ini juga memiliki kelemahan, misalkan apabila resources yang sudah dibagikan atau dialokasikan tidak digunakan secara maksimal (underutilized).
Sedangkan untuk Container, mereka saling berbagi resource dari host mereka. Containers menggunakan shared kernel (beberapa fitur seperti namespaces dan cgroups) dan melakukan alokasi resources dengan dinamis, berdasarkan demand. Hal ini dapat meningkatkan efisiensi penggunaan resources.

3. Fleksibilitas
VM menawarkan fleksibilitas karena pada VM dapat menjalankan berbagai OS dan program dalam satu host yang sama. Tiap VM memiliki berbagai keperluannya masing masing (dependencies, libraries, configurations).
Sedangkan, konteks fleksibilitas pada container, mereka dapat dikatakan memiliki ukuran file yang kecil (lightweight) karena container fokus untuk menjalankan suatu program atau service. Container cocok digunakan untuk menjalankan aplikasi modular yang memiliki dependencies yang sama.
Pada Proxmox VE, VM memungkinkan untuk dilakukan Live Migration, atau migrasi ke server lain pada node PVE secara langsung. VM langsung dipindahkan tanpa terlebih dahulu dimatikan VM-nya. Hal ini menguntungkan untuk service yang terus dibutuhkan (tidak boleh ada downtime) karena VM akan tetap aktif walaupun dilakukan migrasi.
Lain halnya dengan Container. Walaupun ukurannya kecil, namun untuk dilakukan migrasi, container tidak dapat melakukannya dengan langsung. Container akan dimatikan servicenya saat dilakukan migrasi. Sehingga, container kurang cocok untuk layanan atau service yang membutuhkan 100% uptime. Karena container akan dinonaktifkan saat proses migrasi.

4. Waktu Startup
VM memiliki waktu startup yang lebih lama daripada Container. Karena pada VM memiliki OS sendiri, sehingga ada beberapa proses yang dilakukan. Seperti OS boot juga inisialisasi virtual hardware, menjalankan beberapa service, dan hal lain.
Sedangkan pada Container, karena memuat aplikasi dan dependenciesnya saja, tidak memiliki OS sendiri hal ini memungkinkan Container dapat dijalankan hampir dengan instan. Menyalakan VM dapat membutuhkan waktu hingga beberapa menit, sedangkan untuk Container hanya dalam hitungan detik (atau bahkan milidetik).

Kesimpulannya, VM memungkinkan isolasi yang lebih kuat dibanding container, fleksibilitas dalam menjalankan berbagai macam OS dan cocok untuk pekerjaan yang memiliki banyak atau berbagai kebutuhan.

Sedangkan Container lebih unggul secara efisiensi sumber data, waktu startup yang jauh lebih cepat, juga ukuran file yang lebih ringan (lightweight).

Sekian yang saya bagikan kali ini. Bye~

Leave a Comment