Penulis artikel terjemahan baru kami mengklaim bahwa Knative adalah yang terbaik yang dapat mereka pikirkan di alam semesta! Apa kamu setuju?
Jika Anda sudah menggunakan Kubernetes, Anda mungkin pernah mendengar tentang arsitektur tanpa server. Meskipun kedua platform, Kubernetes dan Knative, dapat diskalakan, arsitektur tanpa serverlah yang melakukan apa saja untuk menyediakan kode kerja kepada developer tanpa mengganggu mereka dengan masalah infrastruktur. Ini juga mengurangi biaya infrastruktur dengan menskalakan instans aplikasi secara virtual dari awal.
Di sisi lain, Anda dapat memanfaatkan Kubernetes tanpa batas dengan mengikuti model hosting tradisional dan teknik manajemen lalu lintas lanjutan. Berkat hal tersebut, kami membuka berbagai peluang, misalnya penerapan biru-hijau dan pengujian A / B.
Knative adalah upaya untuk memanfaatkan yang terbaik dari kedua dunia! Sebagai platform cloud open source, Knative memungkinkan Anda menjalankan aplikasi tanpa server di Kubernetes, memanfaatkan kekuatan Kubernetes, dan memastikan kesederhanaan dan fleksibilitas arsitektur tanpa server.
Dengan demikian, pengembang dapat fokus pada pengkodean dan penerapan kontainer ke Kubernetes dengan satu perintah, sementara Knative mengelola aplikasi sambil menjaga nuansa jaringan, penskalaan otomatis ke nol, dan pelacakan versi.
Selain itu, Knative memungkinkan pengembang untuk menulis kode yang digabungkan secara longgar dengan kerangka kerja penanganan acara mereka, yang menyediakan langganan universal, pengiriman, dan manajemen acara. Ini berarti Anda dapat mendeklarasikan konektivitas acara dan aplikasi Anda dapat berlangganan aliran data tertentu.
Dipimpin oleh Google, platform open-source telah disertakan dalam Cloud Native Computing Foundation. Ini menyiratkan kurangnya vendor lock-in, yang sebaliknya merupakan batasan signifikan dari solusi FaaS cloud tanpa server saat ini. Anda dapat menjalankan Knative di cluster Kubernetes mana pun.
Untuk siapa Knative?
Knative membantu berbagai profesional, masing-masing dengan pengetahuan, pengalaman, dan tanggung jawab mereka sendiri.
Engineer dapat fokus pada pengelolaan cluster Kubernetes dan menginstal serta memelihara instance Knative menggunakan kubectl, sementara developer membangun dan menerapkan aplikasi menggunakan Knative API.
Ini adalah nilai tambah yang besar bagi organisasi mana pun, karena sekarang tim yang berbeda dapat menyelesaikan tugas mereka tanpa saling mengganggu.
Mengapa Anda harus menggunakan Knative?
Sebagian besar organisasi yang menggunakan Kubernetes memiliki proses yang kompleks untuk mengelola penerapan dan pemeliharaan beban kerja. Ini mengarahkan pengembang untuk memperhatikan detail yang tidak perlu mereka khawatirkan. Pengembang harus fokus pada pengkodean daripada memikirkan tentang rakitan dan penerapan.
Kubeless membantu pengembang untuk menyederhanakan eksekusi kode mereka tanpa harus mengetahui terlalu banyak tentang apa yang terjadi di balik terpal Kubernetes.
Kluster Kubernetes menggunakan sumber daya infrastruktur karena mengharuskan semua aplikasi memiliki setidaknya satu container yang sedang berjalan. Knative mengelola aspek ini untuk Anda dan menangani penampung penskalaan otomatis dalam cluster dari awal. Hal ini memungkinkan administrator Kubernetes untuk mengemas beberapa aplikasi ke dalam satu cluster.
Jika Anda memiliki beberapa aplikasi dengan waktu puncak yang berbeda, atau memiliki cluster dengan node pekerja penskalaan otomatis, Anda bisa mendapatkan keuntungan besar dari ini selama waktu henti.
Tambang emas untuk aplikasi arsitektur layanan mikro yang mungkin tidak memerlukan layanan mikro yang dijalankan pada waktu tertentu. Ini membantu Anda menggunakan sumber daya dengan lebih efisien dan Anda dapat melakukan lebih banyak dengan sumber daya terbatas.
Plus, ini terintegrasi cukup baik dengan mesin Eventing dan membuatnya mudah untuk merancang sistem yang tidak terkait. Kode aplikasi dapat tetap bebas sepenuhnya dari konfigurasi endpoint apa pun, dan Anda dapat memublikasikan serta berlangganan event dengan mendeklarasikan konfigurasi di level Kubernetes. Ini adalah keuntungan yang signifikan untuk aplikasi layanan mikro yang kompleks!
Bagaimana cara kerja Knative?
Knative menyediakan kn API menggunakan operator Kubernetes dan CRD. Dengan menggunakannya, Anda dapat menerapkan aplikasi menggunakan baris perintah. Di latar belakang, Knative akan membuat semua yang dibutuhkan Kubernetes (penerapan, layanan, data masuk, dll.) Untuk menjalankan aplikasi tanpa perlu Anda khawatirkan.
Ketahuilah bahwa Knative tidak langsung membuat pod. Sebaliknya, ia menyediakan titik akhir virtual untuk aplikasi dan mendengarkannya. Jika permintaan mencapai titik akhir ini, Knative menjalankan pod yang diperlukan. Ini memungkinkan aplikasi untuk menskalakan dari awal ke jumlah instance yang diinginkan.
Knative menyediakan titik akhir aplikasi menggunakan domainnya sendiri dalam format [nama-aplikasi]. [ruang nama]. [domain-khusus] .
Ini membantu untuk mengidentifikasi aplikasi secara unik. Mirip dengan cara Kubernetes menangani layanan, tetapi Anda perlu membuat data A domain Anda sendiri untuk mengarah ke gateway masuk Istio. Istio mengelola semua lalu lintas yang melewati cluster Anda di latar belakang.
Knative adalah penggabungan dari banyak CNCF dan produk open source seperti Kubernetes, Istio, Prometheus, Grafana, dan mesin streaming acara seperti Kafka dan Google Pub / Sub.
Memasang Knative
Knative memiliki struktur modular yang masuk akal dan Anda hanya dapat memasang komponen yang Anda butuhkan. Knative menawarkan komponen acara, layanan, dan pemantauan. Anda dapat menginstalnya menggunakan CRD kustom.
Knative memang memiliki dependensi dan persyaratan eksternal untuk setiap komponen. Misalnya, jika Anda menginstal komponen layanan, Anda juga perlu menginstal Istio dan add-on DNS.
Menginstal Knative cukup rumit dan layak untuk artikel terpisah. Tetapi demi demonstrasi, mari kita mulai dengan menginstal komponen layanan.
Untuk melakukan ini, Anda memerlukan cluster Kubernetes yang berfungsi.
Instal CRD Layanan dan komponen inti penyajian:
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-crds.yaml kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-core.yaml
Instal Istio untuk Knative:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.7.0 sh - &&
cd istio-1.7.0 && export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo
kubectl label namespace knative-serving istio-injection=enabled
Tunggu hingga Istio siap dengan memeriksa apakah Kubernetes telah mengalokasikan alamat IP eksternal ke gateway Istio Ingress:
kubectl -n istio-system get service istio-ingressgateway
Tentukan domain Anda sendiri dan konfigurasikan DNS agar mengarah ke alamat IP gateway masuk Istio:
kubectl patch configmap/config-domain --namespace knative-serving --type merge -p "{\"data\":{\"$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}').xip.io\":\"\"}}"
kubectl apply -f https://github.com/knative/net-istio/releases/download/v0.17.0/release.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-default-domain.yaml
Instal add-on Istio HPA:
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-hpa.yaml
Memasang Knative CLI
Memasang Knative CLI itu mudah. Anda perlu mengunduh biner Knative CLI versi terbaru ke folder bin atau menentukan jalur yang sesuai.
sudo wget https://storage.googleapis.com/knative-nightly/client/latest/kn-linux-amd64 -O /usr/local/bin/kn
sudo chmod +x /usr/local/bin/kn
kn version
Meluncurkan Aplikasi Hello, World!
Sekarang mari kita jalankan "Hello, World!" Pertama kita. aplikasi untuk melihat betapa mudahnya menerapkan dengan Knative.
Mari gunakan aplikasi Contoh Hello, World! di Go untuk demonstrasi. Ini adalah REST API sederhana yang mengembalikan Hello $ TARGET , di mana $ TARGET adalah variabel lingkungan yang dapat Anda setel di penampung.
Jalankan perintah berikut untuk memulai:
$ kn service create helloworld-go --image gcr.io/knative-samples/helloworld-go --env TARGET="World" --annotation autoscaling.knative.dev/target=10
Creating service 'helloworld-go' in namespace 'default':
0.171s Configuration "helloworld-go" is waiting for a Revision to become ready.
6.260s ...
6.324s Ingress has not yet been reconciled.
6.496s Waiting for load balancer to be ready
6.637s Ready to serve.
Service 'helloworld-go' created to latest revision 'helloworld-go-zglmv-1' is available at URL:
http://helloworld-go.default.34.71.125.175.xip.io
kubectl get pod
No resources found in default namespace.
Mari kita mulai layanan helloworld .
$ curl http://helloworld-go.default.34.71.125.175.xip.io Hello World!
Dan setelah beberapa saat kami mendapat jawaban. Mari kita lihat polongnya.
$ kubectl get pod NAME READY STATUS RESTARTS AGE helloworld-go-zglmv-1-deployment-6d4b7fb4f-ctz86 2/2 Running 0 50s
Jadi, seperti yang Anda lihat, Knative membuka gulungan di bawahnya dalam satu gerakan. Ternyata kami benar-benar menskalakan dari awal.
Jika kita memberi sedikit waktu, kita akan melihat bahwa pod mulai selesai. Mari kita lihat apa yang terjadi.
$ kubectl get pod -w NAME READY STATUS RESTARTS AGE helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 2/2 Running 0 7s helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 2/2 Terminating 0 67s helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 1/2 Terminating 0 87s
Contoh di atas menunjukkan bahwa Knative mengelola pod sesuai dengan kebutuhan kami. Meskipun permintaan pertama lambat karena Knative membuat beban kerja untuk memprosesnya, permintaan selanjutnya akan berjalan lebih cepat. Anda dapat menyesuaikan waktu perlambatan pod tergantung pada kebutuhan Anda atau jika Anda memiliki SLA yang lebih ketat.
Mari melangkah lebih jauh. Jika Anda melihat anotasi, kami telah membatasi setiap anotasi yang sedang diproses menjadi 10 permintaan bersamaan. Jadi apa yang terjadi jika kita memuat fungsi kita di atas itu? Yuk cari tahu sekarang!
Kami akan menggunakan utilitas hey untuk memuat aplikasi. Perintah berikut mengirimkan 50 permintaan bersamaan ke titik akhir dalam waktu 30 detik.
$ hey -z 30s -c 50 http://helloworld-go.default.34.121.106.103.xip.io
Average: 0.1222 secs
Requests/sec: 408.3187
Total data: 159822 bytes
Size/request: 13 bytes
Response time histogram:
0.103 [1] |
0.444 [12243] |โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ
0.785 [0] |
1.126 [0] |
1.467 [0] |
1.807 [0] |
2.148 [0] |
2.489 [0] |
2.830 [0] |
3.171 [0] |
3.512 [50] |
Latency distribution:
10% in 0.1042 secs
25% in 0.1048 secs
50% in 0.1057 secs
75% in 0.1077 secs
90% in 0.1121 secs
95% in 0.1192 secs
99% in 0.1826 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0010 secs, 0.1034 secs, 3.5115 secs
DNS-lookup: 0.0006 secs, 0.0000 secs, 0.1365 secs
req write: 0.0000 secs, 0.0000 secs, 0.0062 secs
resp wait: 0.1211 secs, 0.1033 secs, 3.2698 secs
resp read: 0.0001 secs, 0.0000 secs, 0.0032 secs
Status code distribution:
[200] 12294 responses
Sekarang mari kita lihat polongnya.
$ kubectl get pod NAME READY STATUS RESTARTS AGE helloworld-go-thmmb-1-deployment-77976785f5-6cthr 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-7dckg 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-fdvjn 0/2 Pending 0 57s helloworld-go-thmmb-1-deployment-77976785f5-gt55v 0/2 Pending 0 58s helloworld-go-thmmb-1-deployment-77976785f5-rwwcv 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-tbrr7 2/2 Running 0 58s helloworld-go-thmmb-1-deployment-77976785f5-vtnz4 0/2 Pending 0 58s helloworld-go-thmmb-1-deployment-77976785f5-w8pn6 2/2 Running 0 59s
Seperti yang bisa kita lihat, Knative menskalakan pod saat beban pada fungsi meningkat dan memperlambatnya saat tidak ada lagi beban.
Kesimpulan
Knative menggabungkan fitur terbaik dari arsitektur tanpa server dengan kemampuan Kubernetes. Ini secara bertahap bergerak menuju cara standar penerapan FaaS. Karena Knative adalah bagian dari CNCF dan semakin banyak diminati secara teknis, kami mungkin segera menemukan bahwa penyedia cloud mengadopsi Knative ke dalam produk tanpa server mereka.
Terima kasih telah membaca artikel saya! Saya harap Anda menikmatinya.