Knative - platform-sebagai-perkhidmatan berasaskan k8s dengan sokongan tanpa pelayan

Knative - platform-sebagai-perkhidmatan berasaskan k8s dengan sokongan tanpa pelayan

Kubernetes sudah pasti telah menjadi platform dominan untuk penggunaan kontena. Ia menyediakan keupayaan untuk mengawal hampir semua perkara menggunakan API dan pengawal tersuainya yang memanjangkan APInya dengan sumber tersuai.

Walau bagaimanapun, pengguna masih perlu membuat keputusan terperinci tentang cara menggunakan, mengkonfigurasi, mengurus dan menskalakan aplikasi dengan tepat. Isu penskalaan aplikasi, perlindungan dan aliran trafik kekal mengikut budi bicara pengguna. Ini membezakan Kubernetes daripada platform konvensional sebagai perkhidmatan (PaaS), seperti Cloud Foundry dan Heroku.

Platform ini mempunyai antara muka pengguna yang dipermudahkan dan ditujukan kepada pembangun aplikasi yang paling kerap terlibat dalam menyediakan aplikasi individu. Penghalaan, penggunaan dan metrik diuruskan secara telus kepada pengguna oleh sistem PaaS yang mendasari.

Aliran kerja sumber-ke-kapal dikendalikan oleh PaaS dengan mencipta imej kontena tersuai, mengaturnya, menyediakan laluan baharu dan subdomain DNS untuk trafik masuk. Semua ini dilancarkan atas arahan git push.

Kubernetes (sengaja) hanya menyediakan blok binaan teras untuk platform sedemikian, menjadikan komuniti bebas untuk melakukan kerja itu sendiri. Bagaimana Kelsey Hightower berkata:

Kubernetes ialah platform untuk membina platform. Kedudukan terbaik untuk memulakan, tetapi tidak menamatkan.

Akibatnya, kami melihat sekumpulan binaan Kubernetes, serta syarikat pengehosan yang cuba mencipta PaaS untuk Kubernetes, seperti OpenShift dan Rancher. Di tengah-tengah pasaran Kube-PaaS yang semakin berkembang, Knative, yang diasaskan pada Julai 2018 oleh Google dan Pivotal, memasuki gelanggang.

Knative ialah kerjasama antara Google dan Pivotal, dengan sedikit bantuan daripada syarikat lain seperti IBM, RedHat dan Solo.im. Ia menawarkan perkara PaaS yang serupa kepada Kubernetes dengan sokongan terkemuka untuk aplikasi berasaskan pengkomputeran tanpa pelayan. Tidak seperti binaan Kubernetes, Knative dipasang sebagai alat tambah pada mana-mana kluster Kubernetes yang serasi dan dikonfigurasikan melalui sumber pengguna.

Apa itu Knative?

Knative digambarkan sebagai "Platform berasaskan Kubernetes untuk menyampaikan dan mengurus beban kerja menggunakan pengkomputeran tanpa pelayan moden." Knative, sambil mengebil dirinya sebagai platform sedemikian, secara aktif menskalakan kontena mengikut kadar permintaan HTTP serentak. Perkhidmatan yang tidak digunakan akhirnya diturunkan kepada sifar, memberikan penskalaan atas permintaan gaya tanpa pelayan.

Knative terdiri daripada satu set pengawal yang dipasang dalam mana-mana kelompok Kubernetes dan menyediakan keupayaan berikut:

  • membina aplikasi kontena daripada kod sumber (disediakan oleh komponen Membina),
  • menyediakan akses kepada trafik masuk ke aplikasi (disediakan oleh komponen Berkhidmat),
  • penghantaran dan penskalaan automatik aplikasi atas permintaan (juga disediakan oleh komponen Berkhidmat),
  • mengenal pasti sumber peristiwa yang membawa kepada pelancaran aplikasi (disediakan oleh komponen Acara).

Komponen utama ialah Serving, yang menyediakan peruntukan, penskalaan automatik dan pengurusan trafik untuk aplikasi terurus. Selepas memasang Knative, anda masih mempunyai akses penuh kepada API Kubernetes, membenarkan pengguna mengurus aplikasi biasa cara, dan juga berfungsi untuk menyahpepijat perkhidmatan Knative, bekerja dengan primitif API yang sama yang digunakan oleh perkhidmatan ini (modul, perkhidmatan, dll.).

Dengan bantuan Serving, penghalaan trafik biru-hijau turut diautomatikkan, memastikan pemisahan trafik antara versi baharu dan lama aplikasi apabila pengguna menghantar versi aplikasi yang dikemas kini.

Knative sendiri bergantung pada pemasangan pengawal kemasukan yang serasi. Pada masa penulisan artikel ini disokong Gerbang API Gloo ΠΈ Mesh Perkhidmatan Istio. Ia akan mengkonfigurasi kemasukan yang tersedia untuk menghalakan trafik ke aplikasi yang diuruskan Knative.

Mesh Perkhidmatan Istio boleh menjadi pergantungan yang besar untuk pengguna Knative yang ingin mencubanya tanpa memasang panel kawalan Istio, kerana Knative hanya bergantung pada get laluan.

Atas sebab ini, kebanyakan pengguna memilih Gloo sebagai pintu masuk kepada Knative, menyediakan set keupayaan yang serupa kepada Istio (untuk tujuan menggunakan Knative sahaja), sementara juga menggunakan sumber yang jauh lebih sedikit dan mempunyai kos operasi yang lebih rendah.

Mari kita uji Knative beraksi di tempat duduk. Saya akan menggunakan kluster yang baru dipasang yang berjalan dalam GKE:

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

Mari mulakan memasang Knative dan Gloo. Ini boleh dilakukan dalam sebarang urutan:

# ставим 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 menyemak bahawa 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 sudah bersedia untuk penghalaan, mari buat perkhidmatan Knative penskalaan automatik (mari panggil ia kservice) dan halakan trafik ke sana.

Perkhidmatan Knative menyediakan laluan yang lebih mudah untuk menyampaikan aplikasi kepada Kubernetes berbanding 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 fail, kemudian menggunakannya pada kelompok Kubernetes saya dengan cara ini:

kubectl apply -f ksvc.yaml -n default

Kami boleh melihat sumber yang dicipta oleh Knative dalam kelompok selepas menyampaikan 'helloworld-go' kami kservice:

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

Pod dengan imej 'helloworld-go' kami dilancarkan apabila kservice digunakan. Jika tiada trafik, bilangan pod akan dikurangkan kepada sifar. Dan sebaliknya, jika bilangan permintaan serentak melebihi ambang boleh dikonfigurasikan tertentu, bilangan pod akan meningkat.

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

Knative mengkonfigurasi kemasukannya menggunakan sumber 'kemasukan' khas dalam API Knative dalaman. Gloo menggunakan API ini sebagai konfigurasinya untuk menyediakan ciri seperti PaaS, termasuk model penggunaan biru-hijau, penguatkuasaan TLS automatik, tamat masa dan ciri penghalaan lanjutan yang lain.

Selepas beberapa lama, kami melihat bahawa pod kami telah hilang (kerana tiada trafik 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 cuba menghubungi mereka. Anda boleh 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 dipasang glooctl anda boleh melihat alamat dan port dalam perkhidmatan 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 pembangun selain daripada Kubernetes yang luar biasa menggunakan gerbang API berprestasi tinggi dan berciri penuh Gloo. Siaran ini hanya menconteng permukaan pilihan penyesuaian meluas Knative dan ciri tambahan. Begitu juga dengan Gloo!

Walaupun pada hakikatnya Knative masih merupakan projek muda, pasukannya mengeluarkan versi baharu setiap enam minggu, dan pelaksanaan ciri lanjutan telah bermula, seperti penggunaan TLS automatik, penskalaan automatik panel kawalan. Terdapat peluang yang baik bahawa, hasil kerjasama antara beberapa syarikat awan, dan sebagai asas tawaran Cloud Run baharu Google, Knative boleh menjadi pilihan utama untuk pengkomputeran tanpa pelayan dan PaaS pada Kubernetes. Ikuti berita!

Daripada Editor SouthBridge
Pendapat pembaca adalah penting bagi kami, jadi kami meminta anda untuk mengambil bahagian dalam tinjauan ringkas yang berkaitan dengan artikel akan datang tentang Knative, Kubernetes, pengkomputeran tanpa pelayan:

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Perlukah saya terus menulis artikel dan panduan tentang pengkomputeran Knative dan tanpa pelayan?

  • Ya sila.

  • Tidak, Terima kasih.

28 pengguna mengundi. 4 pengguna berpantang.

Sumber: www.habr.com

Tambah komen