Panduan Kritis tentang Kubernetes
- Kubernetes mendapat reputasi di kalangan sebagian teknolog sebagai sesuatu yang rumit secara tidak perlu dan membuang waktu, serta dianggap over-engineering jika digunakan oleh tim kecil.
- Di Jamsocket, mereka telah menjalankan Kubernetes di lingkungan produksi selama beberapa tahun, dan menemukan cara menggunakannya secara efisien dengan hanya memakai fitur yang diperlukan dan mengabaikan sisanya.
Alasan Menggunakan Kubernetes
- Kubernetes adalah jalur yang paling matang jika Anda menginginkan ketiga hal berikut sekaligus:
- Saat ingin menjalankan banyak proses/server/pekerjaan terjadwal.
- Saat ingin menjalankannya secara redundan dan membagi beban.
- Saat ingin menyusun konfigurasi serta hubungan antarkomponen tersebut sebagai kode.
- Kubernetes adalah lapisan abstraksi yang memungkinkan sekumpulan komputer diperlakukan seperti satu komputer tanpa kepala (headless).
- Jamsocket melakukan deployment beberapa kali sehari, dan jika ada masalah pada produknya maka produk pelanggan juga akan terdampak, sehingga mereka memperoleh kepercayaan diri untuk sering melakukan deployment melalui rolling deployment.
Cara Menggunakan Kubernetes
- Jamsocket adalah layanan yang membuat proses dinamis yang dapat berkomunikasi dengan aplikasi web, mirip AWS Lambda, tetapi umur prosesnya bergantung pada koneksi WebSocket alih-alih satu siklus request/response.
- Kubernetes digunakan untuk menjalankan proses jangka panjang seperti server API, container registry, controller, pengumpul log, beberapa layanan DNS, dan pengumpulan metrik.
- Hal-hal yang tidak menggunakan Kubernetes: proses sementara, situs statis/pemasaran, dan hal-hal yang menyimpan data secara langsung.
- Mereka menggunakan Google Kubernetes Engine untuk mendelegasikan pengelolaan Kubernetes ke pihak luar, dan jika diperlukan perpindahan ke Amazon EKS relatif mudah dilakukan.
Resource Kubernetes yang Digunakan Secara Aktif
- Deployments: sebagian besar pod dibuat melalui deployment.
- Services: menggunakan ClusterIP untuk layanan internal dan LoadBalancer untuk layanan eksternal.
- CronJobs: digunakan untuk skrip pembersihan dan sejenisnya.
- ConfigMaps dan Secrets: digunakan untuk meneruskan data ke resource-resource di atas.
Hal-Hal yang Digunakan dengan Hati-Hati
- StatefulSet dan PersistentVolumeClaim memang digunakan, tetapi mereka lebih memilih menyimpan data penting di layanan terkelola di luar Kubernetes.
- RBAC dihindari sebisa mungkin karena menambah kompleksitas.
Hal-Hal yang Secara Aktif Dihindari
- Menulis YAML secara manual: definisi resource Kubernetes dibuat menggunakan TypeScript dan Pulumi.
- Resource non-standar dan operator: memang memungkinkan perangkat lunak pihak ketiga memanfaatkan infrastruktur Kubernetes, tetapi pada praktiknya sulit digunakan.
- Helm: tidak digunakan karena operator dan aturan YAML.
- Segala sesuatu yang memiliki nama "mesh": dianggap tidak diperlukan.
- Resource Ingress: dihindari karena menambah lapisan tidak langsung yang tidak perlu.
- Menyalin seluruh stack k8s secara lokal: mereka menggunakan Docker Compose atau skrip sendiri untuk hanya menyalakan bagian sistem yang diperlukan.
Manusia Seharusnya Tidak Menunggu Pod
- Kubernetes dirancang dengan fokus pada ketangguhan dan modularitas, bukan kecepatan startup container, sehingga kurang cocok jika manusia harus menunggu pod untuk mulai berjalan.
- Jamsocket menggunakan Plane, sebuah orchestrator Rust berlisensi MIT, untuk menjadwalkan dan menjalankan proses dengan cepat bagi workload interaktif.
Abstraksi Tingkat Lebih Tinggi
- Beberapa alternatif Kubernetes sangat bagus, terutama jika Anda tidak perlu mendefinisikan infrastruktur sebagai kode.
- Anda juga bisa memilih solusi lain alih-alih Kubernetes dengan menggunakan layanan seperti Railway, Render, dan Flight Control.
- Jika Anda mengelola pendekatan terhadap Kubernetes secara sistematis, tak seorang pun bisa mengatakan bahwa itu terlalu dini.
Pendapat GN⁺
- Kubernetes adalah alat yang kuat untuk mengelola kompleksitas dan otomatisasi, terutama pada sistem berskala besar, tetapi kompleksitasnya bisa menjadi beban bagi proyek kecil atau startup.
- Tulisan ini membantu pemula atau tim kecil memanfaatkan keunggulan Kubernetes dengan menunjukkan cara menghindari kompleksitas berlebihan yang dapat muncul saat menggunakannya.
- Sebelum menggunakan Kubernetes, perlu dipertimbangkan secara cermat fitur yang benar-benar dibutuhkan dan kemampuan teknis tim, agar manfaatnya sepadan dengan kompleksitas serta biaya pengelolaannya.
- Menggunakan layanan yang lebih sederhana dan mudah dikelola daripada Kubernetes bisa menjadi pilihan yang lebih baik. Misalnya Docker Swarm, Apache Mesos, dan Nomad, yang masing-masing memiliki kelebihan dan kekurangan.
- Saat mengadopsi Kubernetes, integrasi dengan infrastruktur yang sudah ada, keamanan, biaya pengelolaan, dan kurva pembelajaran juga perlu dipertimbangkan.
- Keuntungan yang bisa diperoleh dengan memilih Kubernetes adalah skalabilitas, ketersediaan tinggi, dan pengalaman deployment yang konsisten di berbagai lingkungan cloud. Namun, hal itu memerlukan pemahaman tentang pengelolaan resource dan orkestrasi.
1 komentar
Opini Hacker News
Ringkasan komentar pertama:
Ringkasan komentar kedua:
Ringkasan komentar ketiga:
Ringkasan komentar keempat:
Ringkasan komentar kelima:
Ringkasan komentar keenam:
Ringkasan komentar ketujuh:
Ringkasan komentar kedelapan:
Ringkasan komentar kesembilan:
Ringkasan komentar kesepuluh: