31 poin oleh GN⁺ 2024-03-04 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2024-03-04
Opini Hacker News
  • Ringkasan komentar pertama:

    • Saat mengadopsi sistem kompleks seperti Kubernetes, kompleksitas itu terus meluas sehingga berbagai komponen saling memperkuat dan akhirnya dianggap esensial.
    • Ketika cloud pertama kali muncul, orang-orang tertarik karena dapat mengurangi kompleksitas load balancer dan pengelolaan database.
    • Server aplikasi stateless bukanlah masalah pemeliharaan besar, tetapi penginjilan microservices justru menciptakan masalah yang sebelumnya tidak ada.
    • Kini budaya itu sudah mengakar sehingga sulit untuk sekadar mengangguk setuju pada klaim bahwa microservices itu wajib.
  • Ringkasan komentar kedua:

    • Sebagai orang yang memperkenalkan Kubernetes ke perusahaan kecil dan menengah, ada insinyur yang tidak puas, tetapi sebagian besar menjawab bahwa mereka puas.
    • Kubernetes memang kompleks, tetapi merupakan alat yang cocok untuk masalah yang kompleks.
    • Memiliki standar lebih baik daripada kekacauan sederhana yang tidak terdokumentasi, dan "kubectl explain X" diklaim jauh lebih baik daripada dokumentasi AWS.
    • Kubernetes memang rumit, tetapi bekerja dengan cara yang sama seperti yang pernah digunakan para developer di tempat kerja sebelumnya, dan kecepatan itu penting.
  • Ringkasan komentar ketiga:

    • Mengkritik Kubernetes memang sedang tren, tetapi ini tetap solusi terbaik.
    • Kubernetes memungkinkan pendefinisian infrastruktur secara deklaratif, serta menyediakan load balancing, pemulihan otomatis, dan scaling.
    • Kubernetes memberikan observabilitas yang sangat baik untuk seluruh stack, dan banyak software siap pakai yang sudah dipaketkan tersedia.
    • Infrastruktur yang hampir sama bisa dibangun di cloud, server sendiri, maupun lingkungan lokal, sehingga tidak terkunci pada penyedia cloud tertentu.
  • Ringkasan komentar keempat:

    • Keuntungan besar Kubernetes adalah Helm dan Operators.
    • Jika harus membayar biaya kompleksitas, kita seharusnya mendapat manfaat berupa 'app store' untuk komponen infrastruktur dan kemampuan mengelola operasional secara terprogram.
    • Misalnya, untuk menyiapkan sesuatu yang kompleks seperti Ceph, Rook adalah cara yang baik.
    • Helm atau Operators tidak menjadikan infrastruktur sebagai appliance turnkey terkelola, tetapi antarmuka deklaratif umumnya lebih baik untuk dikelola.
  • Ringkasan komentar kelima:

    • Kubernetes adalah teknologi yang baik, tetapi karena kompleksitasnya, para maintainer cenderung menjadi pahlawan di perusahaan.
    • Banyak penyesuaian dan tuas dapat membuat tim menjauh dari tujuan sebenarnya dari proyek.
  • Ringkasan komentar keenam:

    • Perusahaan saat ini terbagi antara Kubernetes dan sistem deployment kustom berbasis Ansible.
    • Pendekatan Ansible bekerja dengan baik, tetapi berpindah ke Kubernetes dapat memangkas waktu deployment dari berjam-jam menjadi beberapa menit, serta memungkinkan auto-scaling yang lebih cepat dan efisien.
    • Sulitnya mencari penyebab kegagalan deployment Helm dan perlunya mempelajari cara operasi baru adalah umpan balik konsisten yang didengar dari tim-tim sebelumnya.
  • Ringkasan komentar ketujuh:

    • Dari percakapan dengan mantan site reliability engineer Google, dikatakan bahwa perusahaan yang benar-benar membutuhkan Kubernetes bisa dihitung dengan jari.
    • Banyak orang cenderung mengembangkan sesuatu hanya karena mengikuti tren.
  • Ringkasan komentar kedelapan:

    • Kubernetes bisa jadi alat yang tepat, tetapi harus diterima sebagai kejahatan yang perlu.
    • Software yang berpotensi gagal berkolaborasi karena kegagalan dari banyak pihak sering kali bisa menimbulkan masalah.
  • Ringkasan komentar kesembilan:

    • Menulis YAML secara langsung bisa menjadi masalah, sehingga sebagai gantinya digunakan TypeScript dan Pulumi untuk menghasilkan definisi resource Kubernetes.
    • Alih-alih me-lint YAML, pendekatan ini memasukkan runtime bahasa pemrograman penuh dan library pihak ketiga, serta menanggung kompleksitas tambahan seperti pemeliharaan versi dan kompilasi proyek.
  • Ringkasan komentar kesepuluh:

    • Sebagai seseorang yang pernah sangat antusias terhadap Kubernetes, bagian terbaik Kubernetes adalah elemen dasarnya (deployments, services, configmaps), dan sisanya sebaiknya hanya digunakan dalam situasi khusus.
    • Tim lebih memilih menulis YAML mentah dan menggunakan kustomize agar konfigurasi tetap jelas dan tegas.