5 cara untuk melakukan tanpa server di Kubernetes

Sebut saja "tanpa server", sebut saja "komputasi yang digerakkan oleh peristiwa", atau menyebutnya "berfungsi sebagai layanan (FaaS)", idenya sama: mengalokasikan sumber daya secara dinamis untuk menjalankan fungsi individu, pada dasarnya layanan mikro, yang dipanggil sebagai respons ke acara. Platform komputasi tanpa server memungkinkan pengembang aplikasi untuk fokus pada aplikasi, bukan infrastruktur yang mendasarinya dan semua detail manajemennya.

Sebagian besar penyedia cloud menawarkan beberapa jenis platform tanpa server, tetapi Anda dapat membuatnya sendiri hanya dengan dua bahan. Salah satunya adalah Kubernetes, sistem orkestrasi container yang telah menjadi platform standar untuk membangun aplikasi yang berkomponen dan tangguh. Yang kedua adalah salah satu dari sejumlah sistem yang digunakan untuk membangun pola aplikasi tanpa server di Kubernetes.

Sebagian besar framework tanpa server untuk Kubernetes memiliki fitur yang sama:

  • Menerapkan ke lingkungan apa pun yang mendukung Kubernetes, secara lokal atau jarak jauh, termasuk lingkungan seperti OpenShift.
  • Mendukung menjalankan kode yang ditulis dalam bahasa apa pun, dengan beberapa runtime umum yang telah dikemas sebelumnya dengan kerangka kerja.
  • Memicu eksekusi kode dengan berbagai jenis peristiwa — titik akhir HTTP, pesan antrian, atau hook lainnya.

Salah satu keuntungan utama membangun tanpa server di Kubernetes adalah mendapatkan kendali yang jauh lebih besar atas platform yang mendasarinya. Banyak penawaran tanpa server yang membatasi perilaku fungsi yang dijalankannya, terkadang membuat kelas aplikasi tertentu tidak praktis. Dengan Kubernetes, Anda dapat membuat platform tanpa server yang sesuai dengan kebutuhan Anda, menyerahkan infrastruktur kepada operator Kubernetes Anda dan membiarkan developer Anda fokus pada penulisan kode penting.

Berikut adalah lima proyek besar yang menghadirkan fungsionalitas tanpa server ke Kubernetes.

Pembelahan

Fisi dibuat dan dikelola oleh Platform 9. Perusahaan yang dikelola Kubernetes. Klaim ketenaran utamanya adalah memungkinkan Anda membuat aplikasi FaaS tanpa harus membangun container, hanya dengan menyediakan file definisi.

Fisi dapat dipasang dengan atau tanpa bagan Helm, dan dapat dipasang di salah satu dari dua edisi. Ada versi lengkap dengan antrian pesan dan dukungan InfluxDB untuk logging, dan edisi yang dipreteli dengan fungsi fungsi dasar. Yang pertama dirancang untuk penerapan produksi, dan yang kedua untuk membuat kaki Anda basah.

Untuk menambahkan kode ke penerapan Fisi, Anda menggunakan file spesifikasi berbasis YAML. Alat baris perintah Fission memungkinkan Anda membuat file YAML untuk fungsi Anda dan rute yang digunakan untuk memicu titik masuknya. File spesifikasi juga memungkinkan Anda menyediakan variabel lingkungan, kontainer tambahan, volume, dan kontrol taint / toleransi Kubernetes untuk kode tersebut.

Fisi juga menyediakan "alur kerja". Dipasang oleh bagan Helm, alur kerja meneruskan output dari satu fungsi ke fungsi lain. Fungsinya bahkan tidak harus dalam bahasa yang sama. Perhatikan bahwa ini datang dengan biaya kinerja, karena setiap output fungsi dirender ke dalam format pertukaran, meskipun sistem alur kerja mendukung banyak tipe biner primitif umum untuk menjaga overhead tetap rendah (misalnya, integer, atau aliran byte umum).

Salah satu kelemahan yang awalnya terkait dengan FaaS adalah bahwa saat pertama kali suatu fungsi dipanggil, ada penundaan yang terlihat untuk meluncurkan wadah yang terkait dengannya. Fisi menjaga wadah agar tetap hangat untuk meminimalkan latensi saat pertama kali suatu fungsi dijalankan.

Fission menawarkan kemudahan lain untuk developer dan admin. Layanan dapat disebarkan ke dalam cluster yang tidak memiliki akses internet eksternal, dan kode dapat dimuat ulang ke dalam cluster sesuai permintaan. Aktivitas fungsi juga dapat direkam dan diputar ulang untuk membantu proses debug.

Proyek Fisi tersedia di bawah lisensi Apache yang sangat liberal, sehingga dapat dikerjakan ulang secara bebas sesuai kebutuhan.

Knative

Awalnya dibuat oleh Google untuk menjalankan aplikasi tanpa server di Kubernetes, Knative berfokus pada pola yang umum untuk penerapan tanpa server dalam produksi. Knative membutuhkan keahlian langsung dalam mengelola banyak komponen Kubernetes agar dapat digunakan secara efektif.

Selain Kubernetes, Knative memerlukan sistem perutean atau layanan mesh seperti Istio, tetapi opsi lain seperti Ambassador dan Gloo juga dapat digunakan. Ini berarti sedikit lebih banyak pekerjaan yang disiapkan, tetapi proyek memiliki panduan terperinci untuk menggunakan setiap opsi di berbagai layanan cloud dan lingkungan Kubernetes, termasuk vanilla Kubernetes.

Knative bekerja terutama dengan memanfaatkan atau memperluas perkakas dan fungsionalitas Kubernetes yang ada. Aplikasi, atau fungsi, dikonfigurasi melalui file YAML dan dikirimkan sebagai container Docker yang Anda buat. Menambahkan, mengubah, atau menghapus definisi dilakukan melalui kubectlaplikasi baris perintah. Untuk metrik pada aplikasi Knative, gunakan Grafana. Penskalaan dapat dilakukan dengan penskala otomatis Knative, atau dengan penskalaan lain yang kompatibel dengan Kubernetes termasuk penskalaan khusus.

Knative sedang dalam pengembangan besar-besaran, dan banyak dari alat khusus miliknya masih dalam kondisi kasar. Ini termasuk  knctl, CLI khusus untuk Knative, yang membuat Anda tidak perlu repot menggunakan alat Kubernetes lainnya untuk mengelola Knative jika Anda hanya ingin fokus pada Knative; dan ko, alat untuk membuat aplikasi Go di Knative dengan menghilangkan langkah pembuatan kontainer.

Kubeless

Kubeless dibuat oleh Bitnami, pengembang penginstal mudah untuk tumpukan aplikasi web umum. Kubeless menggunakan Definisi Sumber Daya Kustom bawaan Kubernetes untuk menangani fungsi, jadi ada sedikit abstraksi antara metafora Kubernetes dan fungsionalitas Kubeless.

Runtime bahasa yang paling umum hadir dengan platform: .NET, Java, Python, Node.js, PHP, Ruby, Go, dan bahkan bahasa Ballerina baru untuk pengembangan cloud-native. Runtime hanyalah gambar Docker, meskipun Kubeless memiliki format kemasan khusus untuk menggunakan Dockerfiles untuk membangun runtime khusus.

Fitur Kubeless lain yang berguna adalah CLI-nya, yang identik dengan perintah dengan AWS Lambda CLI. Ini sangat nyaman jika Anda ingin bermigrasi keluar dari AWS Lambda, tetapi Anda ingin mempertahankan beberapa skrip manajemen yang ada, atau hanya tidak perlu mempelajari kumpulan perintah yang sama sekali baru.

Kubeless juga berfungsi sebagai plug-in untuk Serverless Framework, sebuah sistem untuk membangun aplikasi tanpa server pada berbagai arsitektur. Jika Anda sudah menggunakan Serverless atau Kubeless, Anda akan lebih mudah menambahkan salah satunya daripada menggunakan yang lain.

OpenFaaS

Pitch untuk OpenFaaS adalah "fungsi tanpa server yang dibuat sederhana". Sederhananya, maksud pengembang "tidak lebih sulit daripada menerapkan container Docker".

OpenFaaS dapat di-deploy ke Kubernetes atau ke cluster Docker Swarm (untuk pengujian lokal atau penggunaan dengan permintaan rendah). Anda menggunakan OpenFaaS CLI untuk membuat, mendorong, dan menerapkan image Docker ke dalam cluster untuk menjalankan fungsi. Template yang ada menyediakan cara yang sudah dibuat sebelumnya untuk menerapkan aplikasi yang ditulis dalam Go, Python, Node.js, .NET, Ruby, Java, atau PHP 7, meskipun Anda selalu dapat menggulir sendiri. CLI OpenFaaS juga memberi Anda cara untuk mengelola rahasia di cluster Anda, sementara UI web bawaan memungkinkan Anda membuat fungsi baru dan mengelolanya.

Versi lain dari OpenFaaS, OpenFaaS Cloud, mengemas ulang OpenFaaS dengan fitur-fitur untuk banyak pengembang termasuk integrasi dengan Git (termasuk GitHub dan edisi GitLab yang dihosting sendiri), CI / CD, manajemen rahasia, HTTPS, dan kemampuan untuk memberi makan peristiwa ke Slack dan lainnya tenggelam. OpenFaas Cloud tersedia sebagai produk open source gratis, dan dalam versi yang dihosting yang saat ini gratis untuk digunakan.

OpenWhisk

Apache OpenWhisk ditagih sebagai platform tanpa server generik. Kubernetes hanya satu dari beberapa opsi yang tersedia untuk menjalankan container di OpenWhisk, karena OpenWhisk juga mendukung Mesos dan Docker Compose. Namun demikian, Kubernetes lebih disukai karena perkakasnya untuk penerapan aplikasi, terutama bagan Helm. IBM Cloud Functions didasarkan pada proyek OpenWhisk, sehingga dapat bekerja dengan perintah CLI OpenWhisk juga.

Tidak seperti kebanyakan framework Kubernetes tanpa server lainnya, OpenWhisk ditulis dalam bahasa Scala, bukan Go (yang digunakan oleh Kubernetes dan Docker). Ini mungkin menjadi masalah hanya jika Anda ingin meretas OpenWhisk, dan Anda hanya memiliki pengalaman dengan Go. 

Sebagian besar opsi runtime aplikasi populer sudah dikemas dengan OpenWhisk: Java, Node.js, Python, Ruby, PHP, dan .NET. Plus, banyak opsi esoterik dan mutakhir juga disertakan: Scala, Ballerina, Swift, dan Rust. Runtime hanyalah container Docker, jadi mudah untuk menyediakannya sendiri.

Salah satu fitur penerapan OpenWhisk yang nyaman adalah "tindakan zip". Arahkan arsip .zip kode dan file tambahan ke OpenWhisk menggunakan file manifes untuk paket kode, dan OpenWhisk akan membuat tindakan darinya. CLI OpenWhisk juga menyertakan alat untuk mengubah pohon direktori kode menjadi arsip semacam itu. Dan katalog paket layanan memudahkan untuk memasukkan aplikasi Anda ke penawaran pihak ketiga yang umum seperti GitHub, Slack, Apache Kafka, atau Jira.