
Kubernetes tidak diragukan lagi telah menjadi platform dominan untuk penyebaran kontainer. Ini memberikan kemampuan untuk mengelola hampir semua hal menggunakan API dan pengontrol pengguna yang memperluas API melalui sumber daya pengguna.
Namun, pengguna masih harus membuat keputusan terperinci tentang cara menggunakan, mengkonfigurasi, mengelola, dan skala aplikasi. Atas kebijaksanaan pengguna, pertanyaan tetap tentang penskalaan aplikasi, perlindungan, jalur lalu lintas. Ini membedakan Kubernetes dari โplatform as a serviceโ (PaaS) konvensional, seperti Cloud Foundry dan Heroku.
Platform memiliki antarmuka pengguna yang disederhanakan, berfokus pada pengembang aplikasi yang paling sering terlibat dalam menyesuaikan aplikasi individual. Routing, deployment, dan metrics transparan kepada pengguna dikelola oleh sistem PaaS yang mendasarinya.
Alur kerja pengiriman sumber ditangani oleh PaaS dengan membuat gambar kontainer kustom, menggunakannya, menyiapkan rute baru dan subdomain DNS untuk lalu lintas masuk. Semua ini dipicu oleh perintah git push
.
Kubernetes (sengaja) hanya menyediakan blok bangunan dasar untuk platform semacam itu, memberi masyarakat kesempatan untuk melakukan pekerjaan ini sendiri. Seperti yang dikatakan Kelsey Hightower :
Kubernetes adalah platform untuk membangun platform. Posisi terbaik untuk memulai, tetapi tidak selesai.
Sebagai hasilnya, kami melihat sekelompok majelis Kubernetes, serta perusahaan hosting yang mencoba membuat PaaS untuk Kubernetes, misalnya, OpenShift dan Rancher. Terhadap latar belakang pasar Kube-PaaS yang sedang tumbuh, Knative, yang dibuat pada Juli 2018 oleh Google dan Pivotal, memasuki arena.
Knative adalah kolaborasi antara Google dan Pivotal, dengan sedikit kolaborasi dari perusahaan lain seperti IBM, RedHat dan Solo.im. Ini menawarkan hal-hal PaaS serupa untuk Kubernetes dengan dukungan aplikasi komputasi serverless kelas satu. Tidak seperti majelis Kubernetes, Knative diinstal sebagai add-on untuk kluster Kubernet yang kompatibel, dan dikonfigurasi melalui sumber daya pengguna.
Apa itu Knative?
Knative dideskripsikan sebagai "Platform berbasis Kubernetes untuk mengirim dan mengelola beban kerja dengan komputasi tanpa server modern." Dengan mendeklarasikan dirinya sebagai platform semacam itu, Knative secara otomatis menskala kontainer sesuai dengan permintaan HTTP simultan. Layanan yang tidak digunakan pada akhirnya diperkecil menjadi nol, memberikan penskalaan sesuai permintaan dalam gaya komputasi tanpa server.
Knative terdiri dari satu set pengontrol yang dipasang di setiap cluster Kubernetes dan menyediakan fitur-fitur berikut:
- perakitan aplikasi kemas dari kode sumber (disediakan oleh komponen Build ),
- menyediakan akses ke lalu lintas masuk ke aplikasi (disediakan oleh komponen Penyajian ),
- pengiriman dan penskalaan otomatis aplikasi sesuai permintaan (juga disediakan oleh komponen Penyajian ),
- penentuan sumber acara yang mengarah ke peluncuran aplikasi (disediakan oleh komponen Acara ).
Komponen utama adalah Serving, yang menyediakan pengiriman, penskalaan otomatis, dan kontrol lalu lintas untuk aplikasi yang dikelola. Setelah menginstal Knative, akses penuh ke API Kubernetes masih dipertahankan, yang memungkinkan pengguna untuk mengelola aplikasi dengan cara biasa , dan juga berfungsi untuk men-debug layanan Knative dengan bekerja dengan primitif API yang sama yang digunakan layanan ini (modul, layanan, dll.).
Melayani juga mengotomatiskan perutean lalu lintas biru-hijau, menyediakan pemisahan lalu lintas antara versi baru dan lama aplikasi ketika pengguna memberikan versi aplikasi yang diperbarui.
Knative sendiri tergantung pada pemasangan pengendali masuknya yang kompatibel. Pada saat penulisan, Gloo API Gateway dan Istio Service Mesh didukung. Dia akan mengkonfigurasi masuknya tersedia untuk merutekan lalu lintas ke aplikasi yang digerakkan oleh Knative.
Istio Service Mesh dapat menjadi kecanduan 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 suka Gloo sebagai pintu gerbang ke Knative, yang menyediakan serangkaian fitur serupa dengan Istio (jika kita berbicara tentang tujuan menggunakan hanya Knative), serta menggunakan sumber daya yang jauh lebih sedikit dan menyediakan biaya operasi yang lebih rendah.
Mari kita periksa Knative yang sedang beraksi di stan. Saya akan menggunakan cluster yang baru diinstal yang berjalan di GKE:
kubectl get namespace NAME STATUS AGE default Active 21h kube-public Active 21h kube-system Active 21h
Kami melanjutkan untuk menginstal Knative dan Gloo. Ini dapat dilakukan dengan 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 # ...
Periksa apakah semua Pods dalam status "Running":
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 routing, mari kita buat layanan Knative scalable secara otomatis (sebut saja kservice) dan arahkan traffic ke sana.
Layanan Knative menyediakan cara yang lebih mudah untuk mengirimkan aplikasi ke Kubernetes - dibandingkan dengan model Deployment + Service + Ingress biasa. Kami akan bekerja dengan contoh seperti itu:
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 file, lalu menerapkannya ke kluster Kubernet saya dengan cara ini:
kubectl apply -f ksvc.yaml -n default
Kita dapat melihat sumber daya yang dibuat oleh Knative di kluster setelah pengiriman layanan 'helloworld-go' kami :
kubectl get pod -n default NAME READY STATUS RESTARTS AGE helloworld-go-fjp75-deployment-678b965ccb-sfpn8 2/2 Running 0 68s
Pod dengan gambar 'helloworld-go' kami dimulai ketika Anda menggunakan layanan. Jika tidak ada lalu lintas, jumlah polong akan dikurangi menjadi nol. Dan sebaliknya, jika jumlah permintaan simultan melebihi beberapa nilai ambang kustom, jumlah pod akan meningkat.
kubectl get ingresses.networking.internal.knative.dev -n default NAME READY REASON helloworld-go True
Knative mengkonfigurasi masuknya menggunakan sumber daya 'masuknya' khusus di API internal Knative. Gloo mengambil API ini sebagai konfigurasinya untuk mengekspos properti yang melekat dalam PaaS, termasuk model penyebaran biru-hijau, TLS otomatis, batas waktu, dan fitur perutean lanjutan lainnya.
Setelah beberapa waktu, kami melihat bahwa pod kami telah menghilang (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. Mendapatkan URL untuk Proxy Knative mudah dan mudah dengan glooctl
:
glooctl proxy url --name knative-external-proxy http://35.190.151.188:80
Tanpa glooctl
terpasang, glooctl
dapat memata-matai 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
Jalankan sedikit data dengan cURL:
curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188 Hello Knative user!
Knative menyediakan near-PaaS untuk pengembang di atas Kubernetes yang berbasis kotak, menggunakan gateway API Gloo yang berperforma tinggi dan berfitur lengkap. Catatan ini hanya sedikit menyentuh sejumlah besar fitur Knative yang tersedia untuk kustomisasi, serta fitur tambahan. Sama halnya dengan Gloo!
Terlepas dari kenyataan bahwa Knative masih merupakan proyek muda, timnya merilis versi baru setiap enam minggu, implementasi fungsi-fungsi lanjutan telah dimulai, misalnya, penyebaran TLS otomatis, penskalaan otomatis panel kontrol. Ada kemungkinan besar bahwa sebagai hasil kerja sama antara banyak perusahaan cloud, serta sebagai dasar tawaran Cloud Run baru dari Google, Knative dapat menjadi opsi utama untuk mengatur komputasi tanpa server dan PaaS di Kubernetes. Ikuti beritanya!
Dari SouthBridge
Pendapat pembaca penting bagi kami, jadi kami meminta Anda untuk ikut serta dalam survei kecil terkait artikel mendatang tentang Knative, Kubernetes, komputasi tanpa server: