2 poin oleh GN⁺ 2025-05-06 | 1 komentar | Bagikan ke WhatsApp
  • Penulis berbagi pengalaman frustrasi terhadap kompleksitas dan konsumsi resource Kubernetes dalam mengelola server pribadi, lalu menggantinya dengan kombinasi systemd dan Podman
  • Kubernetes memang menarik berkat GitOps dan otomatisasi, tetapi di lingkungan kecil sistem ini terasa terlalu berat
  • Dengan memanfaatkan fitur pembaruan otomatis Podman dan pembuatan layanan systemd, fungsi inti Kubernetes dapat diimplementasikan dengan sederhana
  • Artikel ini juga menjelaskan menjalankan layanan level pengguna secara otomatis dengan menggabungkan systemctl dan loginctl, serta menekankan bahwa konsumsi resource VPS berkurang drastis
  • Namun, integrasi systemd di Podman disebut akan segera digantikan oleh pendekatan baru bernama "Quadlet"

Pendahuluan: Pertemuan pertama dengan Kubernetes

  • Penulis memperkenalkan pengalamannya saat bereksperimen dengan Kubernetes pada 2018 dan mencoba membangun cluster di NUC pribadi
  • Kubernetes memang kompleks, tetapi pada dasarnya bekerja dengan struktur loop berulang seperti berikut:
    • memahami kondisi saat ini → menghitung kondisi yang diinginkan → menghitung perbedaan → menerapkan
  • Fitur otomatisasi dengan berbagai komponen seperti cert-manager terasa sangat mengesankan

Tuntutan resource Kubernetes yang berlebihan

  • Di server pribadi (NUC), Kubernetes menyebabkan penggunaan CPU terus-menerus, suara kipas, dan panas berlebih
  • Berbagai distribusi seperti Azure, MicroK8s, dan K3S juga mengonsumsi resource yang cukup besar
    • MicroK8s: penggunaan CPU 12% (VPS 2vCPU)
    • K3S: penggunaan CPU 6% (Ampere A1 2vCPU)

Godaan otomatisasi GitOps

  • Dengan alat seperti Flux, otomatisasi deployment berbasis Git menjadi sangat mudah
  • Cukup push image container ke GitHub, lalu server akan otomatis men-deploy aplikasi terbaru
  • Namun, tanpa Kubernetes, mewujudkan otomatisasi seperti ini sangat sulit

Munculnya Podman dan systemd

  • Podman adalah alat pengganti Docker dan memiliki fitur mengubah container menjadi layanan systemd
  • Melalui podman generate systemd, file service dapat dibuat secara otomatis
  • Dengan tag io.containers.autoupdate, pembaruan image otomatis sekali sehari dapat dilakukan
  • Dengan merujuk metode ini dari Fedora Magazine, penulis berhasil membangun lingkungan pengganti Kubernetes

Tiga komponen yang dibutuhkan

  1. systemctl --user enable mycontainer.service

    • Mengatur agar container berjalan otomatis saat login
  2. loginctl enable-linger

    • Mengatur agar sesi pengguna aktif saat server melakukan boot
  3. Fitur auto-update Podman

  • Dengan tiga hal ini, 99% fungsi yang disediakan Kubernetes bisa digantikan dengan cara yang lebih sederhana dan ringan

Hasil migrasi

  • Seluruh layanan dimigrasikan dari VPS lama ke VPS baru
  • Resource berkurang setengah, tetapi performa justru meningkat, kepadatan layanan bertambah, dan biaya pun turun

Tantangan berikutnya: Quadlet

  • Sayangnya, integrasi systemd di Podman akan segera dihentikan
  • Sebagai gantinya, definisi baru bernama file Quadlet akan digunakan
  • Artikel ditutup dengan catatan bahwa kita perlu bersiap mempelajari teknologi baru ini

1 komentar

 
GN⁺ 2025-05-06
Komentar Hacker News
  • Jika Kubernetes hanya dipandang sebagai alat untuk menjalankan dan memperbarui image container, itu bisa jadi penggunaan yang berlebihan

    • Kubernetes menyediakan resource yang diperlukan agar container dapat berbagi state, saling terhubung, dan mengakses konfigurasi atau secret
    • Biaya CPU dan memori muncul dari pengelolaan container dan penyediaan resource yang dibutuhkan
    • Dalam sistem terdistribusi, tidak semua sistem bekerja sesuai keinginan, sehingga operator terus berupaya mencapai state yang diinginkan
  • Pernah mencoba menjalankan beberapa situs web kecil dengan Docker, tetapi pembaruan image dan pengujiannya sulit

    • Mengganti semuanya dengan skrip yang membuat unit systemd di Debian, lalu me-restart saat layanan berubah
    • Menggunakan VM pengujian untuk melakukan rsync perubahan ke host deployment dan menjalankan skrip deployment
    • Seluruh sistem berjalan di VPS 2GB, dan bisa turun ke 1GB jika Wordpress secara resmi mendukung SQLite
    • Menggunakan Mariadb untuk meminimalkan kebutuhan dukungan
  • Tidak ada masalah dalam mengelola klaster Kubernetes, tetapi untuk proyek hobi sulit digunakan karena kebutuhan resource

    • Kubernetes terlalu intensif resource untuk dijalankan di VPS $10/bulan
    • Menggunakan perintah docker compose secara manual, dan memakai fitur penemuan container dari Traefik alih-alih Ingress
    • Menulis skrip kecil untuk mengelola crontab alih-alih CronJobs
    • Berusaha menyelesaikan, dengan cara yang kurang efisien, masalah yang sebenarnya sudah diselesaikan Kubernetes
    • Menginginkan alternatif ringan yang menyediakan API kompatibel Kubernetes dan berjalan baik di instance VPS murah
  • Systemd menyelesaikan banyak masalah dan tidak boleh diabaikan

    • Menyediakan beragam fitur seperti machinectl, nspawn, vmspawn, importctl, dan lainnya
    • homed/homectl memperluas pengelolaan pengguna, mounts untuk auto-mount drive, boot untuk mengontrol start/stop layanan, timers sebagai pengganti cron
    • Unit layanan mengontrol pekerjaan, dan file konfigurasi dapat diedit dengan systemctl edit
  • Menjalankan homelab dengan podman-systemd, dan setiap kali meneliti varian Kubernetes baru tidak ada kerepotan tambahan

    • Menggunakan playbook Ansible untuk menarik image terlebih dahulu dan menempatkan file unit di lokasi yang tepat
    • Menjalankan stack printer 3D Voron dengan podman-systemd, dan sedang mempertimbangkan beralih ke mkosi dan systemd-sysupdate
    • Ada kerepotan karena harus mengonversi file docker-compose menjadi unit systemd
    • Podman mengurangi kompleksitas pengaturan pengguna/izin
  • Langkah berikutnya adalah mengelola container di dalam systemd dengan Quadlet

    • Detail lebih lanjut tersedia di blog Red Hat
  • Membuat Skate untuk membangun sistem yang mendukung multi-host dan manifest Kubernetes

    • Di balik layar menggunakan podman dan systemd
  • Dimungkinkan menggunakan perintah Docker compose dan Caddy untuk mendapatkan sertifikat secara otomatis

    • Dapat disetel dengan sederhana menggunakan perintah docker compose up -d --pull always
    • Konfigurasi CI dibangun menggunakan scp dan ssh
    • Sederhana dan juga berfungsi di mesin pengembangan
  • Systemd kini juga menyediakan ParticleOS, distro OS resmi untuk workflow immutable

  • Berpendapat bahwa deployment ke satu server seharusnya tidak rumit, lalu menulis alat bernama Harbormaster

    • Menggunakan file YAML untuk menemukan repositori dan menjalankan file Docker Compose
    • Menyimpan semua state dalam satu direktori sehingga mudah dibackup
    • Ini adalah alat orkestrasi container termudah yang dibutuhkan untuk satu server