HASHICORP NOMAD ORCHESTRATION DEVOPS CONTAINERS VIRTUAL-MACHINES BATCH-JOBS SYSTEM-DESIGN SCALABILITY DEPLOYMENT INFRASTRUCTURE CLOUD-NATIVE BACKEND AUTOMATION FLEXIBILITY

HashiCorp Nomad: Orkestrasi Workload Multi-Jenis yang Fleksibel dan Ringan

⏱️ 12 menit baca
👨‍💻

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:

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:

  1. 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.
  2. 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?

  1. Anda (sebagai developer atau operator) mendefinisikan aplikasi yang ingin Anda jalankan dalam sebuah job specification (berkas HCL atau JSON).
  2. Anda mengirimkan job specification ini ke salah satu Nomad Server.
  3. Nomad Server akan mengevaluasi sumber daya yang tersedia di client dan menjadwalkan workload ke client yang paling cocok.
  4. Nomad Client yang menerima jadwal akan mengunduh artifact yang diperlukan (misalnya image Docker) dan menjalankan task sesuai dengan spesifikasi.
  5. 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:

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:

Kapan Sebaiknya Menggunakan Nomad?

Nomad bersinar di beberapa skenario:

Kapan Nomad Mungkin Bukan Pilihan Terbaik?

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