HashiCorp Nomad: Orkestrasi Workload Multi-Jenis yang Fleksibel dan Ringan
1. Pendahuluan
Di dunia pengembangan web modern, aplikasi kita semakin kompleks. Kita tidak lagi hanya berbicara tentang satu server web sederhana, melainkan ekosistem microservices, batch jobs, dan bahkan virtual machines yang perlu dijalankan, diatur, dan diskalakan secara efisien. Di sinilah peran orchestrator menjadi krusial.
Mungkin Anda sudah familiar dengan Kubernetes, orchestrator kontainer yang sangat populer dan powerful. Namun, mari kita jujur: Kubernetes bisa jadi sangat kompleks. Setup-nya rumit, kurva belajarnya curam, dan terkadang terasa seperti overkill untuk proyek atau tim dengan skala tertentu.
Bagaimana jika ada solusi orkestrasi yang lebih ringan, lebih fleksibel, dan mampu mengelola tidak hanya kontainer, tetapi juga jenis workload lainnya seperti virtual machines atau aplikasi yang berjalan langsung di host, bahkan batch jobs?
💡 Perkenalkan HashiCorp Nomad.
Nomad adalah workload orchestrator yang didesain untuk kesederhanaan dan fleksibilitas. Ia memungkinkan Anda untuk men-deploy dan mengelola aplikasi di seluruh cluster server, baik itu kontainer Docker, virtual machines, aplikasi Java, atau bahkan skrip shell biasa, dengan konfigurasi yang minimalis. Jika Anda mencari alternatif Kubernetes yang lebih ringan atau membutuhkan orkestrasi untuk workload non-kontainer, Nomad adalah kandidat yang sangat menarik.
Di artikel ini, kita akan menyelami HashiCorp Nomad, memahami arsitekturnya, keunggulannya, dan bagaimana Anda bisa mulai menggunakannya untuk men-deploy aplikasi Anda. Mari kita mulai!
2. Apa Itu HashiCorp Nomad?
Nomad adalah orchestrator yang memungkinkan Anda untuk men-deploy dan mengelola berbagai jenis aplikasi (disebut workload) secara otomatis di seluruh cluster server. Bayangkan Anda memiliki puluhan atau ratusan server, dan Anda ingin menjalankan aplikasi tertentu di beberapa server tersebut, memastikan aplikasi selalu berjalan, dan bisa diskalakan dengan mudah. Nomad melakukan persis itu.
Berbeda dengan Kubernetes yang sangat berpusat pada kontainer dan ekosistemnya yang luas (Pods, Deployments, Services, Ingress, dll.), Nomad mengambil pendekatan yang lebih minimalis dan agnostik terhadap jenis workload.
Perbedaan Kunci dengan Kubernetes dan Docker Swarm:
-
Agnostik Workload:
- Nomad: Mampu mengorkestrasi berbagai jenis workload. Ini termasuk kontainer Docker, aplikasi Java (JAR), VM (QEMU, Firecracker), batch jobs, atau bahkan skrip shell. Ini adalah salah satu keunggulan terbesarnya.
- Kubernetes: Fokus utama pada orkestrasi kontainer Docker (dan OCI compliant containers lainnya). Meskipun bisa menjalankan VM dengan proyek seperti KubeVirt, itu bukan core -nya.
- Docker Swarm: Hanya untuk orkestrasi kontainer Docker.
-
Kompleksitas & Ukuran:
- Nomad: Desain yang ringan dan sederhana, dengan footprint yang kecil. Mudah di-setup dan dioperasikan.
- Kubernetes: Sangat kompleks dengan banyak komponen dan konsep. Membutuhkan sumber daya yang lebih besar untuk control plane.
- Docker Swarm: Cukup sederhana, tetapi fiturnya terbatas dibandingkan Nomad atau Kubernetes.
-
Ekosistem:
- Nomad: Terintegrasi erat dengan produk HashiCorp lainnya seperti Consul (untuk service discovery dan health checks) dan Vault (untuk secrets management), menawarkan solusi yang kohesif.
- Kubernetes: Memiliki ekosistem yang sangat luas dengan ribuan proyek third-party dan integrasi.
- Docker Swarm: Ekosistem yang terbatas dan umumnya hanya di sekitar Docker.
Singkatnya, jika Anda membutuhkan orkestrasi yang kuat namun tidak ingin dibebani oleh kompleksitas Kubernetes, atau jika Anda memiliki workload non-kontainer yang perlu diorkestrasi, Nomad bisa menjadi pilihan yang tepat.
3. Arsitektur Nomad: Sederhana dan Efisien
Arsitektur Nomad didasarkan pada model client-server yang familiar, mirip dengan banyak sistem terdistribusi lainnya.
🎯 Komponen Utama:
-
Nomad Server:
- Ini adalah “otak” dari cluster Nomad Anda. Server bertanggung jawab untuk menerima spesifikasi job (aplikasi yang ingin Anda jalankan), menjadwalkan workload ke client yang tersedia, dan memelihara status cluster.
- Server menggunakan algoritma konsensus Raft untuk memastikan high availability dan konsistensi data. Anda biasanya menjalankan 3 atau 5 server untuk toleransi kegagalan.
- Server tidak menjalankan workload aplikasi secara langsung.
-
Nomad Client:
- Ini adalah “pekerja” di cluster Anda. Setiap mesin yang ingin Anda gunakan untuk menjalankan aplikasi harus menginstal dan menjalankan agen Nomad client.
- Client berkomunikasi dengan server, melaporkan sumber daya yang tersedia (CPU, memori, disk), dan menjalankan task sesuai instruksi dari server.
- Ketika server menjadwalkan suatu workload, client akan meluncurkan dan mengelola task tersebut (misalnya, menjalankan kontainer Docker, JVM, atau skrip).
Bagaimana Alurnya?
- Anda (sebagai developer atau operator) mendefinisikan aplikasi yang ingin Anda jalankan dalam sebuah job specification (berkas HCL atau JSON).
- Anda mengirimkan job specification ini ke salah satu Nomad Server.
- Nomad Server akan mengevaluasi sumber daya yang tersedia di client dan menjadwalkan workload ke client yang paling cocok.
- Nomad Client yang menerima jadwal akan mengunduh artifact yang diperlukan (misalnya image Docker) dan menjalankan task sesuai dengan spesifikasi.
- Client terus melaporkan status workload ke server, dan server memastikan jumlah replika yang diinginkan selalu berjalan.
Kesederhanaan arsitektur ini adalah salah satu alasan mengapa Nomad sangat mudah di-deploy dan dioperasikan, terutama dibandingkan dengan Kubernetes.
4. Keunggulan Nomad untuk Developer
Nomad menawarkan beberapa keunggulan menarik yang bisa sangat bermanfaat, terutama bagi developer dan tim yang mencari solusi orkestrasi yang lebih efisien:
✅ 1. Kesederhanaan dan Kemudahan Penggunaan: * Kurva belajar Nomad jauh lebih landai dibandingkan Kubernetes. Anda bisa mulai men-deploy aplikasi dalam hitungan menit dengan konfigurasi minimal. * Job specification menggunakan HashiCorp Configuration Language (HCL) yang intuitif dan mudah dibaca, atau JSON.
✅ 2. Fleksibilitas Workload yang Tak Tertandingi:
* Ini adalah killer feature Nomad. Anda tidak hanya terbatas pada kontainer Docker. Nomad bisa menjalankan:
* Kontainer: Docker, Podman.
* Virtual Machines: QEMU, Firecracker.
* Aplikasi Berbasis Java: JAR, WAR.
* Aplikasi Lainnya: Skrip shell, biner Go, aplikasi Node.js, Python, PHP, dll., yang berjalan langsung di host (menggunakan driver exec).
* Batch Jobs: Ideal untuk tugas-tugas yang berjalan sesekali atau sesuai jadwal.
* Fleksibilitas ini sangat berharga jika Anda memiliki monolith lama yang perlu diorkestrasi bersama microservices baru, atau jika Anda memiliki workload yang tidak cocok untuk kontainer.
✅ 3. Integrasi Mendalam dengan Ekosistem HashiCorp: * Nomad didesain untuk bekerja harmonis dengan produk HashiCorp lainnya: * Consul: Untuk service discovery, health checks, dan key-value store. Nomad bisa secara otomatis mendaftarkan layanan yang di-deploy ke Consul. * Vault: Untuk secrets management. Nomad dapat menarik secrets dari Vault dan menyediakannya ke aplikasi Anda dengan aman. * Terraform: Untuk infrastructure as code. Anda bisa men-deploy cluster Nomad dan bahkan job Nomad menggunakan Terraform. * Integrasi ini menciptakan fondasi yang kokoh dan lengkap untuk aplikasi terdistribusi Anda.
✅ 4. Ringan dan Efisien Sumber Daya: * Nomad memiliki footprint yang kecil, baik dari segi binary size maupun penggunaan sumber daya sistem. Ini berarti Anda bisa menjalankan cluster Nomad dengan lebih sedikit overhead dan di lingkungan dengan sumber daya terbatas (misalnya, edge computing atau IoT).
✅ 5. Kemampuan Batch Scheduling: * Nomad memiliki dukungan kelas satu untuk batch jobs, memungkinkan Anda menjadwalkan tugas yang berumur pendek dan mengoptimalkan penempatan untuk throughput yang tinggi. Ini sangat berguna untuk ETL, komputasi data, atau tugas-tugas pemeliharaan.
5. Contoh Praktis: Menjalankan Aplikasi Web Sederhana dengan Nomad
Mari kita lihat bagaimana Anda bisa men-deploy aplikasi web Docker sederhana menggunakan Nomad.
Pertama, pastikan Anda memiliki Nomad terinstal dan berjalan (bisa di mode dev nomad agent -dev untuk lokal).
Buat file web-app.nomad dengan konten berikut:
job "web-app" {
datacenters = ["dc1"] // Ganti dengan nama datacenter Anda
type = "service" // Tipe job: service (long-running), batch, system
group "web" {
count = 2 // Jalankan 2 instans aplikasi
network {
port "http" {
static = 8080 // Aplikasi akan terekspos di port 8080
}
}
task "app" {
driver = "docker" // Gunakan driver Docker
config {
image = "hashicorp/counting-service:0.0.2" // Image Docker aplikasi
ports = ["http"] // Map port "http" dari network ke container
}
resources {
cpu = 200 // 200 MHz CPU
memory = 128 // 128 MB RAM
}
service {
name = "counting-service"
tags = ["web", "api"]
port = "http"
check {
type = "http"
path = "/health"
interval = "10s"
timeout = "2s"
}
}
}
}
}
Penjelasan Singkat:
job "web-app": Mendefinisikan sebuah job bernamaweb-app.datacenters = ["dc1"]: Menentukan datacenter tempat job akan berjalan.type = "service": Ini adalah aplikasi yang berjalan terus-menerus (bukan batch atau system).group "web": Sebuah grup task yang akan diskalakan bersama.count = 2: Nomad akan memastikan selalu ada 2 instans aplikasi ini yang berjalan.network {}: Konfigurasi jaringan, di sini kita mengekspos port 8080.task "app": Mendefinisikan task individual dalam grup.driver = "docker": Menginstruksikan Nomad untuk menggunakan driver Docker untuk menjalankan task ini.config { image = "hashicorp/counting-service:0.0.2" }: Menentukan image Docker yang akan digunakan.resources {}: Mendefinisikan batas CPU dan memori untuk task ini.service {}: Mendefinisikan layanan yang akan didaftarkan di service discovery (jika Consul terintegrasi), termasuk health check.
Untuk men-deploy job ini, jalankan perintah berikut di terminal:
nomad job run web-app.nomad
Anda bisa melihat status job dengan:
nomad job status web-app
Dan untuk melihat alokasi task:
nomad alloc status <ALLOC_ID>
Jika Anda memiliki Consul terintegrasi, layanan counting-service akan secara otomatis terdaftar di Consul, siap untuk ditemukan oleh aplikasi lain.
6. Fitur Lanjutan & Kapan Menggunakan Nomad?
Nomad juga mendukung berbagai fitur canggih yang Anda harapkan dari orchestrator modern:
- Rolling Deployments: Melakukan update aplikasi tanpa downtime.
- Service Discovery: Integrasi yang kuat dengan Consul untuk menemukan layanan lain.
- Secrets Management: Integrasi dengan Vault untuk mengelola secrets aplikasi dengan aman.
- Auto-scaling: Skalakan aplikasi secara otomatis berdasarkan metrik.
- Persistent Storage: Mendukung persistent volumes untuk aplikasi stateful.
- Multi-Region / Multi-Cloud: Mampu mengelola cluster di berbagai datacenter atau penyedia cloud.
Kapan Sebaiknya Menggunakan Nomad?
Nomad bersinar di beberapa skenario:
- Anda Membutuhkan Orkestrasi Ringan: Jika Kubernetes terasa terlalu berat atau kompleks untuk kebutuhan Anda (misalnya, tim kecil, proyek internal, lingkungan staging).
- Anda Memiliki Workload Non-Kontainer: Jika Anda perlu mengorkestrasi virtual machines, aplikasi Java/Go/Node.js langsung di host, atau batch jobs bersama dengan kontainer.
- Anda Sudah Menggunakan Produk HashiCorp Lainnya: Integrasi yang mulus dengan Consul, Vault, dan Terraform membuatnya menjadi pilihan alami.
- Edge Computing atau IoT: Ukurannya yang kecil dan efisiensi sumber daya sangat cocok untuk lingkungan dengan keterbatasan.
- Batch Processing: Jika Anda sering menjalankan batch jobs yang perlu dijadwalkan dan dikelola secara terpusat.
❌ Kapan Nomad Mungkin Bukan Pilihan Terbaik?
- Ekosistem Kubernetes adalah Kebutuhan: Jika Anda sangat bergantung pada ekosistem Kubernetes yang luas (Helm, Operator, Ingress Controllers, dll.) atau jika tim Anda sudah sangat mahir Kubernetes.
- Fitur Spesifik Kubernetes yang Tidak Ada di Nomad: Beberapa fitur networking atau storage canggih di Kubernetes mungkin tidak memiliki padanan langsung atau membutuhkan konfigurasi manual lebih di Nomad.
Kesimpulan
HashiCorp Nomad adalah workload orchestrator yang powerful namun tetap ringan dan fleksibel. Dengan kemampuannya untuk mengelola berbagai jenis workload—mulai dari kontainer Docker, virtual machines, hingga batch jobs—serta integrasinya yang erat dengan ekosistem HashiCorp, Nomad menawarkan alternatif yang menarik bagi developer yang mencari kesederhanaan tanpa mengorbankan fungsionalitas.
Jika Anda lelah dengan kompleksitas Kubernetes atau memiliki kebutuhan orkestrasi yang lebih luas dari sekadar kontainer, Nomad layak untuk Anda coba. Ia bisa menjadi “kuda pekerja” yang andal untuk men-deploy dan mengelola aplikasi Anda di berbagai lingkungan, memungkinkan Anda fokus pada pengembangan produk daripada pusing dengan infrastruktur.
Selamat mencoba Nomad dan rasakan pengalaman orkestrasi yang lebih mudah!
🔗 Baca Juga
- Docker Swarm: Orkestrasi Kontainer Ringan untuk Skala Kecil hingga Menengah
- Kubernetes Operators dan Custom Resource Definitions (CRDs): Otomatisasi Cerdas Manajemen Aplikasi Cloud-Native
- HashiCorp Consul: Service Discovery dan Konfigurasi Dinamis untuk Microservices Modern
- Orkestrasi vs Koreografi: Memilih Gaya Komunikasi yang Tepat untuk Microservices Anda