Knative - platform-as-a-service berbasis k8s dengan dukungan tanpa server

Knative - platform-as-a-service berbasis k8s dengan dukungan tanpa server

Kubernetes tidak diragukan lagi telah menjadi platform dominan untuk penerapan container. Ini memberikan kemampuan untuk mengontrol hampir semua hal menggunakan API dan pengontrol khusus yang memperluas API-nya dengan sumber daya khusus.

Namun, pengguna tetap harus membuat keputusan mendetail tentang cara menyebarkan, mengonfigurasi, mengelola, dan menskalakan aplikasi. Masalah penskalaan aplikasi, perlindungan, dan arus lalu lintas tetap menjadi kebijaksanaan pengguna. Hal ini membedakan Kubernetes dari platform konvensional sebagai layanan (PaaS), seperti Cloud Foundry dan Heroku.

Platform ini memiliki antarmuka pengguna yang disederhanakan dan ditujukan untuk pengembang aplikasi yang paling sering terlibat dalam pengaturan aplikasi individual. Perutean, penerapan, dan metrik dikelola secara transparan kepada pengguna oleh sistem PaaS yang mendasarinya.

Alur kerja sumber-ke-kapal ditangani oleh PaaS dengan membuat gambar kontainer khusus, menerapkannya, menyiapkan rute baru dan subdomain DNS untuk lalu lintas masuk. Semua ini diluncurkan berdasarkan perintah git push.

Kubernetes (dengan sengaja) hanya menyediakan landasan inti untuk platform tersebut, sehingga komunitas bebas melakukan pekerjaannya sendiri. Bagaimana kata Kelsey Hightower:

Kubernetes adalah platform untuk membangun platform. Posisi terbaik untuk memulai, tetapi bukan untuk menyelesaikan.

Hasilnya, kami melihat banyak build Kubernetes, serta perusahaan hosting yang mencoba membuat PaaS untuk Kubernetes, seperti OpenShift dan Rancher. Di tengah berkembangnya pasar Kube-PaaS, Knative, yang didirikan pada Juli 2018 oleh Google dan Pivotal, ikut serta.

Knative merupakan kolaborasi antara Google dan Pivotal, dengan sedikit bantuan dari perusahaan lain seperti IBM, RedHat dan Solo.im. Ia menawarkan hal-hal PaaS yang mirip dengan Kubernetes dengan dukungan terbaik untuk aplikasi berbasis komputasi tanpa server. Tidak seperti build Kubernetes, Knative diinstal sebagai add-on pada cluster Kubernetes yang kompatibel dan dikonfigurasi melalui sumber daya pengguna.

Apa itu Knatif?

Knative digambarkan sebagai β€œPlatform berbasis Kubernetes untuk mengirimkan dan mengelola beban kerja menggunakan komputasi tanpa server modern.” Knative, meskipun menyebut dirinya sebagai platform semacam itu, secara aktif melakukan penskalaan otomatis pada container sesuai dengan permintaan HTTP secara bersamaan. Layanan yang tidak digunakan pada akhirnya diturunkan skalanya menjadi nol, sehingga memberikan penskalaan sesuai permintaan bergaya tanpa server.

Knative terdiri dari sekumpulan pengontrol yang dipasang di cluster Kubernetes mana pun dan menyediakan kemampuan berikut:

  • membangun aplikasi dalam container dari kode sumber (disediakan oleh komponen Membangun),
  • menyediakan akses ke lalu lintas masuk ke aplikasi (disediakan oleh komponen Porsi),
  • pengiriman dan penskalaan otomatis aplikasi sesuai permintaan (juga disediakan oleh komponen Porsi),
  • mengidentifikasi sumber peristiwa yang mengarah ke peluncuran aplikasi (disediakan oleh komponen Acara).

Komponen utamanya adalah Penyajian, yang menyediakan penyediaan, penskalaan otomatis, dan manajemen lalu lintas untuk aplikasi terkelola. Setelah menginstal Knative, Anda masih memiliki akses penuh ke API Kubernetes, yang memungkinkan pengguna untuk mengelola aplikasi biasa saja cara, dan juga berfungsi untuk men-debug layanan Knative, bekerja dengan primitif API yang sama dengan yang digunakan layanan ini (modul, layanan, dll.).

Dengan bantuan Melayani, perutean lalu lintas biru-hijau juga diotomatisasi, memastikan pemisahan lalu lintas antara aplikasi versi baru dan lama saat pengguna mengirimkan versi aplikasi yang diperbarui.

Knative sendiri bergantung pada pemasangan pengontrol ingress yang kompatibel. Pada saat penulisan artikel ini didukung Gerbang API Gloo ΠΈ Jaring Layanan Istio. Ini akan mengonfigurasi masuknya yang tersedia untuk merutekan lalu lintas ke aplikasi yang dikelola Knative.

Istio Service Mesh dapat menjadi ketergantungan besar bagi pengguna Knative yang ingin mencobanya tanpa menginstal panel kontrol Istio, karena Knative hanya bergantung pada gateway.

Karena alasan ini, sebagian besar pengguna lebih memilih Gloo sebagai gateway ke Knative, yang menyediakan serangkaian kemampuan serupa dengan Istio (untuk tujuan hanya menggunakan Knative), sekaligus menggunakan sumber daya yang jauh lebih sedikit dan biaya operasional yang lebih rendah.

Mari kita uji Knative beraksi di mimbar. Saya akan menggunakan cluster yang baru diinstal dan berjalan di GKE:

kubectl get namespace
NAME          STATUS   AGE
default       Active   21h
kube-public   Active   21h
kube-system   Active   21h

Mari kita mulai menginstal Knative dan Gloo. Ini dapat dilakukan dalam urutan apa pun:

# ставим Knative-Serving
kubectl apply -f 
 https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml
namespace/knative-serving created
# ...
# ставим Gloo
kubectl apply -f 
  https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml
namespace/gloo-system created
# ...

Kami memeriksa apakah semua Pod berada dalam status β€œBerjalan”:

kubectl get pod -n knative-serving
NAME                              READY   STATUS    RESTARTS   AGE
activator-5dd55958cc-fkp7r        1/1     Running   0          7m32s
autoscaler-fd66459b7-7d5s2        1/1     Running   0          7m31s
autoscaler-hpa-85b5667df4-mdjch   1/1     Running   0          7m32s
controller-85c8bb7ffd-nj9cs       1/1     Running   0          7m29s
webhook-5bd79b5c8b-7czrm          1/1     Running   0          7m29s
kubectl get pod -n gloo-system
NAME                                      READY   STATUS    RESTARTS   AGE
discovery-69548c8475-fvh7q                1/1     Running   0          44s
gloo-5b6954d7c7-7rfk9                     1/1     Running   0          45s
ingress-6c46cdf6f6-jwj7m                  1/1     Running   0          44s
knative-external-proxy-7dd7665869-x9xkg   1/1     Running   0          44s
knative-internal-proxy-7775476875-9xvdg   1/1     Running   0          44s

Gloo siap untuk perutean, mari buat layanan Knative penskalaan otomatis (sebut saja kservice) dan arahkan lalu lintas ke sana.

Layanan Knative menyediakan jalur yang lebih mudah untuk mengirimkan aplikasi ke Kubernetes dibandingkan model Deployment+Service+Ingress konvensional. Kami akan bekerja dengan contoh ini:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
 name: helloworld-go
 namespace: default
spec:
 template:
   spec:
     containers:
       - image: gcr.io/knative-samples/helloworld-go
         env:
           - name: TARGET
             Value: Knative user

Saya menyalin ini ke sebuah file, lalu menerapkannya ke cluster Kubernetes saya dengan cara ini:

kubectl apply -f ksvc.yaml -n default

Kita dapat melihat sumber daya yang dibuat oleh Knative di cluster setelah mengirimkan 'helloworld-go' kita layanan:

kubectl get pod -n default
NAME                                              READY   STATUS    RESTARTS   AGE
helloworld-go-fjp75-deployment-678b965ccb-sfpn8   2/2     Running   0          68s

Pod dengan image 'helloworld-go' kami diluncurkan saat kservice di-deploy. Jika tidak ada lalu lintas, jumlah pod akan dikurangi menjadi nol. Dan sebaliknya, jika jumlah permintaan simultan melebihi ambang batas tertentu yang dapat dikonfigurasi, jumlah pod akan bertambah.

kubectl get ingresses.networking.internal.knative.dev -n default
NAME            READY   REASON
helloworld-go   True

Knative mengonfigurasi masuknya menggunakan sumber daya 'ingress' khusus di API Knative internal. Gloo menggunakan API ini sebagai konfigurasinya untuk menyediakan fitur mirip PaaS, termasuk model penerapan biru-hijau, penerapan TLS otomatis, batas waktu, dan fitur perutean lanjutan lainnya.

Setelah beberapa waktu, kami melihat bahwa pod kami telah hilang (karena tidak ada lalu lintas masuk):

kubectl get pod -n default

No resources found.
kubectl get deployment -n default
NAME                             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
helloworld-go-fjp75-deployment   0         0         0            0           9m46s

Akhirnya kami akan mencoba menjangkau mereka. Anda dapat dengan mudah dan mudah mendapatkan URL untuk Knative Proxy menggunakan glooctl:

glooctl proxy url --name knative-external-proxy
http://35.190.151.188:80

Tanpa diinstal glooctl Anda dapat melihat alamat dan port di layanan kube:

kubectl get svc -n gloo-system knative-external-proxy
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE
knative-external-proxy   LoadBalancer   10.16.11.157   35.190.151.188   80:32168/TCP,443:30729/TCP   77m

Mari kita jalankan beberapa data menggunakan cURL:

curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Hello Knative user!

Knative menyediakan hampir PaaS untuk pengembang selain Kubernetes yang siap pakai menggunakan gateway API full-stack Gloo yang berkinerja tinggi. Posting ini hanya menggores permukaan dari opsi penyesuaian ekstensif dan fitur tambahan Knative. Sama dengan Gloo!

Meskipun Knative masih merupakan proyek muda, timnya merilis versi baru setiap enam minggu, dan penerapan fitur-fitur canggih telah dimulai, seperti penerapan TLS otomatis, penskalaan panel kontrol otomatis. Ada kemungkinan besar bahwa, sebagai hasil kolaborasi antara beberapa perusahaan cloud, dan sebagai dasar dari penawaran Cloud Run Google yang baru, Knative dapat menjadi pilihan utama untuk komputasi tanpa server dan PaaS di Kubernetes. Ikuti beritanya!

Dari Editor SouthBridge
Pendapat pembaca penting bagi kami, jadi kami meminta Anda untuk mengambil bagian dalam survei singkat terkait artikel mendatang tentang Knative, Kubernetes, komputasi tanpa server:

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Lanjutkan menulis artikel dan panduan tentang komputasi Knative dan tanpa server?

  • Ya silahkan.

  • Tidak, terima kasih.

28 pengguna memilih. 4 pengguna abstain.

Sumber: www.habr.com

Tambah komentar