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
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
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.
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