Knative - sunucusuz desteğe sahip k8s tabanlı hizmet olarak platform

Knative - sunucusuz desteğe sahip k8s tabanlı hizmet olarak platform

Kubernetes şüphesiz konteyner dağıtımında baskın platform haline geldi. API'lerini ve API'lerini özel kaynaklarla genişleten özel denetleyicileri kullanarak neredeyse her şeyi kontrol etme yeteneği sağlar.

Ancak kullanıcının yine de uygulamaların tam olarak nasıl dağıtılacağı, yapılandırılacağı, yönetileceği ve ölçekleneceği konusunda ayrıntılı kararlar alması gerekir. Uygulama ölçeklendirme, koruma ve trafik akışı sorunları kullanıcının takdirindedir. Bu, Kubernetes'i Cloud Foundry ve Heroku gibi geleneksel hizmet olarak platformlardan (PaaS) ayırır.

Platformlar basitleştirilmiş bir kullanıcı arayüzüne sahiptir ve çoğunlukla bireysel uygulamaların kurulumuyla ilgilenen uygulama geliştiricilerine yöneliktir. Yönlendirme, dağıtım ve ölçümler, temel PaaS sistemi tarafından kullanıcıya şeffaf bir şekilde yönetilir.

Kaynaktan gemiye iş akışı, özel bir konteyner görüntüsü oluşturularak, dağıtılarak, gelen trafik için yeni bir rota ve DNS alt etki alanı ayarlanarak PaaS tarafından gerçekleştirilir. Bütün bunlar komut üzerine başlatılır git push.

Kubernetes (kasıtlı olarak) bu tür platformlar için yalnızca temel yapı taşlarını sağlar ve topluluğun işi kendi başına yapmasına izin verir. Nasıl Kelsey Hightower dedi ki:

Kubernetes, platform oluşturmaya yönelik bir platformdur. Başlamak için en iyi pozisyon, ancak bitirmek için değil.

Sonuç olarak, bir grup Kubernetes yapısının yanı sıra OpenShift ve Rancher gibi Kubernetes için PaaS oluşturmaya çalışan barındırma şirketlerini de görüyoruz. Büyüyen Kube-PaaS pazarının ortasında, Temmuz 2018'de Google ve Pivotal tarafından kurulan Knative de ringe giriyor.

Knative, IBM, RedHat ve Solo.im gibi diğer şirketlerin de biraz yardımıyla Google ile Pivotal arasındaki bir işbirliğiydi. Sunucusuz bilgi işlem tabanlı uygulamalar için birinci sınıf destekle Kubernetes'e benzer PaaS özellikleri sunar. Kubernetes yapılarından farklı olarak Knative, herhangi bir uyumlu Kubernetes kümesine eklenti olarak yüklenir ve kullanıcı kaynakları aracılığıyla yapılandırılır.

Knative nedir?

Knative, "Modern sunucusuz bilgi işlem kullanarak iş yüklerini sunmaya ve yönetmeye yönelik Kubernetes tabanlı bir platform" olarak tanımlanıyor. Knative, kendisini böyle bir platform olarak faturalandırırken, eşzamanlı HTTP istekleriyle orantılı olarak konteynerleri aktif olarak otomatik olarak ölçeklendirir. Kullanılmayan hizmetlerin ölçeği sonunda sıfıra inerek sunucusuz tarzda isteğe bağlı ölçeklendirme sağlanır.

Knative, herhangi bir Kubernetes kümesine yüklenen ve aşağıdaki yetenekleri sağlayan bir dizi denetleyiciden oluşur:

  • Kaynak kodundan konteynerli uygulamalar oluşturma (bileşen tarafından sağlanır) İnşa etmek),
  • uygulamalara gelen trafiğe erişim sağlanması (bileşen tarafından sağlanır) Servis),
  • talep üzerine uygulamaların teslimi ve otomatik ölçeklendirilmesi (ayrıca bileşen tarafından sağlanır) Servis),
  • Uygulamanın başlatılmasına yol açan olayların kaynaklarının belirlenmesi (bileşen tarafından sağlanır) Eventing).

Yönetilen uygulamalar için temel hazırlık, otomatik ölçeklendirme ve trafik yönetimi sağlayan Hizmet, önemli bir bileşendir. Knative'i yükledikten sonra Kubernetes API'sine hâlâ tam erişime sahip olursunuz ve bu da kullanıcıların uygulamaları yönetmesine olanak tanır sıradan Bu şekilde çalışır ve ayrıca Knative hizmetlerinde hata ayıklamaya hizmet eder ve bu hizmetlerin kullandığı API temel öğeleriyle (modüller, hizmetler vb.) çalışır.

Serving'in yardımıyla mavi-yeşil trafik yönlendirme de otomatikleştirilerek, kullanıcı uygulamanın güncellenmiş bir sürümünü sunduğunda trafiğin uygulamanın yeni ve eski sürümleri arasında bölünmesi sağlanır.

Knative'in kendisi uyumlu bir giriş denetleyicisinin kurulmasına bağlıdır. Bu makalenin yazıldığı sırada desteklenmektedir Gloo API Ağ Geçidi и Istio Hizmet Ağı. Trafiği Knative tarafından yönetilen uygulamalara yönlendirmek için mevcut girişi yapılandıracaktır.

Istio Service Mesh, Knative yalnızca ağ geçidine bağlı olduğundan, Istio kontrol panelini kurmadan denemek isteyen Knative kullanıcıları için büyük bir bağımlılık olabilir.

Bu nedenle çoğu kullanıcı, Istio'ya benzer yetenekler sağlayan (yalnızca Knative'i kullanmak amacıyla), aynı zamanda önemli ölçüde daha az kaynak kullanan ve daha düşük işletme maliyetlerine sahip olan, Knative'e geçiş kapısı olarak Gloo'yu tercih ediyor.

Knative'i stand üzerinde çalışırken test edelim. GKE'de çalışan yeni yüklenmiş bir kümeyi kullanacağım:

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

Knative ve Gloo'yu yüklemeye başlayalım. Bu herhangi bir sırayla yapılabilir:

# ставим 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
# ...

Tüm Pod'ların "Çalışıyor" durumunda olup olmadığını kontrol ediyoruz:

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 yönlendirme için hazır, hadi otomatik ölçeklendirmeli bir Knative hizmeti oluşturalım (buna kservice diyelim) ve trafiği ona yönlendirelim.

Knative hizmetleri, uygulamaları Kubernetes'e ulaştırmak için geleneksel Dağıtım+Hizmet+Giriş modeline göre daha kolay bir yol sağlar. Bu örnekle çalışacağız:

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

Bunu bir dosyaya kopyaladım, ardından Kubernetes kümeme şu şekilde uyguladım:

kubectl apply -f ksvc.yaml -n default

'Helloworld-go'yu teslim ettikten sonra kümede Knative tarafından oluşturulan kaynakları görüntüleyebiliriz kservice:

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

'Merhaba dünya-go' imajımızı içeren bölme, kservice konuşlandırıldığında başlatılır. Trafik olmaması durumunda kapsül sayısı sıfıra indirilecektir. Tam tersi, eş zamanlı isteklerin sayısı belirli bir yapılandırılabilir eşiği aşarsa bölme sayısı artacaktır.

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

Knative, girişini dahili Knative API'sindeki özel bir 'giriş' kaynağını kullanarak yapılandırır. Gloo, mavi-yeşil dağıtım modeli, otomatik TLS uygulaması, zaman aşımları ve diğer gelişmiş yönlendirme özellikleri dahil olmak üzere PaaS benzeri özellikler sağlamak için bu API'yi yapılandırma olarak kullanır.

Bir süre sonra podlarımızın kaybolduğunu görüyoruz (çünkü gelen trafik yoktu):

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

Son olarak onlara ulaşmaya çalışacağız. Knative Proxy'nin URL'sini kullanarak kolayca ve kolayca alabilirsiniz. glooctl:

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

Kurulu olmadan glooctl kube hizmetinde adresi ve bağlantı noktasını görebilirsiniz:

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

CURL kullanarak bazı verileri inceleyelim:

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

Knative, Gloo'nun yüksek performanslı, tam yığın API ağ geçidini kullanarak kullanıma hazır Kubernetes'in yanı sıra geliştiriciler için neredeyse PaaS sağlar. Bu yazı Knative'in kapsamlı özelleştirme seçeneklerinin ve ek özelliklerinin yalnızca yüzeyini çizdi. Gloo'da da aynısı var!

Knative'in hala genç bir proje olmasına rağmen ekibi her altı haftada bir yeni sürümler yayınlıyor ve otomatik TLS dağıtımı, kontrol panelinin otomatik ölçeklendirilmesi gibi gelişmiş özelliklerin uygulanmasına başlandı. Birden fazla bulut şirketi arasındaki işbirliğinin bir sonucu olarak ve Google'ın yeni Cloud Run teklifinin temeli olarak Knative'in, sunucusuz bilgi işlem ve Kubernetes'te PaaS için birincil seçenek haline gelme ihtimali yüksektir. Haberleri takip edin!

SouthBridge Editörlerinden
Okuyucuların görüşleri bizim için önemli; bu nedenle sizden Knative, Kubernetes, sunucusuz bilgi işlem hakkında gelecekteki makalelerle ilgili kısa bir ankete katılmanızı rica ediyoruz:

Ankete sadece kayıtlı kullanıcılar katılabilir. Giriş yapLütfen.

Knative ve sunucusuz bilgi işlem hakkında makaleler ve kılavuzlar yazmaya devam etmeli miyim?

  • Evet lütfen.

  • Teşekkürler, yapma.

28 kullanıcı oy kullandı. 4 kullanıcı çekimser kaldı.

Kaynak: habr.com

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster