Czy Serverless to uruchamianie prostych funkcji w chmurze? FaaS? To znacznie więcej! Serverless odnosi się do koncepcji budowania i uruchamiania aplikacji, które nie wymagają zarządzania serwerami.
Opisuje model wdrażania, w którym aplikacje, spakowane jako jedna lub więcej funkcji, są przesyłane na platformę, a następnie uruchamiane, skalowane i rozliczane w odpowiedzi na dokładnie potrzebne zapotrzebowanie w danym momencie.
Jak korzystać z Knative zarówno w Kubernetes, jak i na platformie OpenShift. Mam nadzieję, że zrozumiemy, dlaczego Twoja organizacja powinna rozważyć użycie Knative jako jednego z podstawowych modeli wdrażania w czasach chmury hybrydowej. Wszystko to w duchu otwartego oprogramowania!
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - WarsawJS #75
1. z użyciem OpenShift Serverless
Aplikacje natywne dla Kubernetes
Chris Suszyński
@ksuszynski /in/krzysztof-suszynski
WarsawJS #75
10 listopada 2020 r.
2. O mnie
2
Chris Suszyński
● Senior Software Quality Engineer
w Red Hat
● Pracuje nad OpenShift Serverless
● Entuzjasta Java i Go
● 15+ lat doświadczenia
● Oddycham Open Source:
≥ 70 oryginalnych otwartych repo
● Występuję na meetup’ach i
konferencjach
● Szczęśliwy ojciec i mąż
3. Agenda
1. Wprowadzenie
2. Czym jest Serverless?
3. OpenShift Serverless i Knative
4. Knative Serving
5. Knative Eventing
6. Aplikacje Kubernetes-native
7. Q&A
17. Potrzebujemy nowych pomysłów
17
“Nie możemy rozwiązywać
naszych problemów tym
samym sposobem myślenia,
który stosowaliśmy przy ich
tworzeniu.”
⸺ Albert Einstein
(Fizyk teoretyczny)
19. 19
Serverless computing
“Przetwarzanie bezserwerowe odnosi się do koncepcji budowania i
uruchamiania aplikacji, które nie wymagają zarządzania serwerem.
Opisuje model wdrożenia, w którym wdrażamy pakiet jednej lub więcej
funkcjonalności, na platformę, a następnie uruchamiamy, skalujemy i
rozliczamy w odpowiedzi na dokładne zapotrzebowanie w danym
momencie”
— CNCF Definition,
https://www.cncf.io/blog/2018/02/14/cncf-takes-first-step-towards-serverless-computing
20. Wzorzec “Serverless”
Zdarzenie Twoja aplikacja Wyniki
Żądania HTTP
Widomości Kafka
Upload zdjęcia
Nowe zamówienie
Logowanie się użytkownika
wzbudza produkuje
23. 23
Serverless - korzyści operacyjne
23
With Serverless
Za dużo zasobów
Koszty IT niewykorzystanych
zasobów
Za mało zasobów
Utrata dochodów
Niska jakość usług
Dostosowanie użycia
Bezpośrednia korelacja
pomiędzy kosztami IT a
przychodami z działalności
BEZ Serverless z Serverless
26. Eventing
Narzędzia do konsumpcji i
produkcji zdarzeń, które
będą stymulować aplikacje.
Serving
Model oparty na żądaniach,
który serwuje kontener z
aplikacją i może “skalować
się do zera”.
26
Elementy Knative
27. 27
Knative w OpenShift
● Knative to projekt Open Source (ufundowany w 2018 przez Google)
● Wspólnota napędzana przez wiele podmiotów
○ https://github.com/knative
○ https://knative.dev
○ Wspierany przez Google, Red Hat, IBM, VMware, TriggerMesh, SAP i więcej
● OpenShift Serverless: https://www.openshift.com/learn/topics/serverless
● W pełni wspierane wydanie 1.10.0 (Knative 0.16)
28. 28
Kontenery i funkcje bezserwerowe sterowane zdarzeniami
➤ Wdrażanie i uruchamianie kontenerów serverless
➤ Używanie dowolnego języka programowania
➤ Modernizacja istniejących aplikacji do modelu Serverless
➤ Bogaty ekosystem źródeł zdarzeń
➤ Zarządzanie aplikacjami serverless natywnie w Kubernetes
➤ W oparciu o projekt open source Knative
➤ Działa na każdej platformie wspieranej przez OpenShift
Generally Available
OPENSHIFT
OpenShift Serverless
SERVING EVENTING*
Red Hat Enterprise Linux CoreOS
Fizyczny Wirtualny Prywatna chmura Chmura publiczna
Aplikacje Zdarzenia
F
* Eventing na poziomie wsparcia Technology Preview
** Functions to obecnie inicjatywa w rozwoju
FUNCTIONS**
OpenShift Serverless
31. 31
● Autoskalowanie oparte na potrzebach, w tym
skalowanie do zera
● Oddzielenie kodu od konfiguracji
● Opiniotwórczy model wdrożenia dostosowany do
aplikacji bezstanowych
● Bogate możliwości podziału ruchu, umożliwiające
bezpieczne wprowadzanie nowych wersji
Koncepcje w Serving
33. 33
apiVersion: apps/v1
kind: Deployment
metadata:
name: random
spec:
replicas: 1
selector:
matchLabels:
app: random
template:
metadata:
labels:
app: random
spec:
containers:
- image: rhsummit2020/random:1.0
name: random
ports:
- containerPort: 8080
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: random
spec:
replicas: 1
selector:
matchLabels:
app: random
template:
metadata:
labels:
app: random
spec:
containers:
- image: rhsummit2020/random:1.0
name: random
ports:
- containerPort: 8080
Routing i autoscaling
out-of-the-box
… oraz K8s Service,
Route, Autoscaler
Migracja deployment do Knative
34. Serving
kn service
kn service create
kn service delete
kn service describe
kn service list
kn service update
Configuration
Revision 1
Revision 2
Revision 3
Application
(Knative Service)
Routes
Directs
traffic
Traffic splitting
kn revision
kn revision delete
kn revision describe
kn revision list
kn route
kn route describe
kn route list
● Od adresu do kontenera w kilka sekund
● Prostsze doświadczenie deweloperskie dla K8s
● Wbudowane wersjonowanie, podział ruchu i więcej
● Uproszczona lekka instalacji z użyciem Kourier
● Automatyczny TLS/SSL
34
37. Serverless Eventing
● Bazuje na CloudEvents (zwykłe HTTP, standard CNCF)
● Wymienialny transport zdarzeń: Channels
○ In-Memory (dev only)
○ Apache Kafka
○ Google Pub-Sub, …
● Elastyczne przesyłanie zdarzeń z Sources do Sinks
○ Source: Adapter integrujący systemy zewnętrzne i emitujący
CloudEvents
○ Sink: Adresowalny (HTTP) punkt końcowy odbierający
CloudEvents (może być Kn Service lub K8s Service)
37
38. 38
Źródła
Wbudowane źródła
PingSource Okresowo emituje statyczny CloudEvent
ApiServerSource Zgłasza zdarzenia K8s API Server jako CloudEvent
SinkBinding Łączy dowolny pod do Sink
Inne źródła
GitHubSource Zamienia webhooki GitHub na CloudEvents
KafkaSource Widomości Kafka jako CloudEvents
CamelKSource Komponenty Apache Camel jako źródła CE
and many more: https://knative.dev/docs/eventing/sources/
39. Source → Sink : Bezpośrednio
● Najprostszy sposób wysłania CloudEvent do usługi
● Wady:
○ Brak wsparcia kolejkowania, jeżeli usługa jest niedostępna
○ Brak mechanizmu back-pressure
○ Tylko jedna usługa może konsumować zdarzenia
○ Brak filtrowania, Sink zawsze dostanie wszystkie zdarzenia
sink:
39
40. Source → Sink : Broker i Trigger
Broker
● Eventing Mesh dla dostarczania zdarzeń
● Źródła adresują go jako Sink
Trigger
● Filtruje zdarzenia po ich atrybutach z
CloudEvents (np. type)
● Łączy Sink z Brokerem40