Kubernetes and CNCF
Landscape 101
Giulio Roggero
Founder and CTO Mia-Platform
2https://landscape.cncf.io/
3https://landscape.cncf.io/
4https://landscape.cncf.io/
5https://landscape.cncf.io/
Process
6
Un sistema operativo gestisce
processi, schedulandoli e
fornendogli le risorse per
funzionare in modo corretto
Process
7
Cosa ha bisogno di un processo per girare?
Process
8
CPU per far girare le logiche
Process
9
Memoria per gestire i dati in
modo veloce
Process
10
Disco per salvare i dati in modo
persistente
Process
11
Networking per poter
comunicare con l’esterno
Process ProcessProcess
12
I processi
sono più di
uno alla vota,
centinaia!
A B C
Se avessi più macchine?
A B C
Process ProcessProcess
… e volessi
distribuire i
processi su
più macchine
A B C
Process ProcessProcess
Ho bisogno di 2
repliche
Ho bisogno di 4
repliche
Ho bisogno di 3
repliche
… e volessi
replicarli?
A B C
Process
Orchestration
Process
Scheduling
A B C
Process
Orchestration
2 instances
Process
Scheduling
A B C
Process
Orchestration
2 instances
Process
Scheduling
Go on
A and B
ProcessProcess
A B C
Process
Orchestration
2 instances
Process
Scheduling
Go on
A and B
Process Process ProcessProcess Process
A B C
Process
Orchestration
2 instances 3 instances
Process
Scheduling
Go on
A and B
Go on
A and B
Process Process ProcessProcessProcess ProcessProcess ProcessProcess
A B C
Process
Orchestration
2 instances 3 instances 4 instances
Process
Scheduling
Go on
A and B
Go on
A and B
Go on
A and C
Process Process ProcessProcessProcess ProcessProcess ProcessProcess
A is broken! B C
Process
Orchestration
2 instances 3 instances 4 instances
Process
Scheduling
Go on
A and B
Go on
A and B
Go on
A and C
Process Process ProcessProcessProcess ProcessProcessProcess Process
A is broken! B C
Process
Orchestration
2 instances 3 instances 4 instances
Process
Scheduling
Go on
B
Go on
B and C
Go on
B and C
I processi sono
rischedulati in
automatico e in
modo trasparente
24
Come funziona nel dettaglio
25
26
Per maggiori dettagli si rimanda alla documentazione ufficiale di Kubernetes
https://kubernetes.io/docs/concepts/overview/components/
Un cluster k8s è
27
A B C
Virtualization
A B C
Virtualization
Master Master
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
A B C
Kubernetes
Virtualization
Master Master
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
A B C
Kubernetes
Virtualization
Master Master
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Namespaces
A B C
Kubernetes
Virtualization
Master Master
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Namespaces
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
A B C
Kubernetes
Virtualization
Master Master
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Namespaces
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Pod
Container
Container
Microservice
Sidecar
Container Runtime API
A B C
35
Distro, Hosting, Installer e PaaS di K8S
https://landscape.cncf.io/
36
Distro, Hosting, Installer e PaaS di K8S
https://landscape.cncf.io/
Come configuro un pod su k8s?
37
38
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
39
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
40
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
41
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
42
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Docker Registry
redis
43
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Docker Registry
redis
pull
44
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
redis
Docker Registry
redis
pull
45
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
46
https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/
Kubernetes
Namespace
Pod
redis
Container
redis
Worker
Node
Worker
Node
Worker
Node
47
https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Worker
Node
48
https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Worker
Node
49
https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Deployment
nginx-deployment
50
https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Deployment
nginx-deployment
Pod
Pod
51
https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Worker
Node
Deployment
nginx-deployment
Pod
Pod
52
https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
Kubernetes
Namespace
Pod
nginx-....-7o5ns
Container
Nginx
Worker
Node
Worker
Node
Worker
Node
nginx-....-r18az
Container
Nginx
Pod
Deployment
nginx-deployment
Worker
Node
53Tutte le risorse: https://kubernetes.io/docs/reference/kubectl/overview/
54Tutte le risorse: https://kubernetes.io/docs/reference/kubectl/overview/
55
56
Rilasciare su k8s
57
58
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Git Repo
Code
59
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Git Repo
Code Pipeline
Docker Registry
Image
60
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Git Repo
Code Pipeline
Docker Registry
Image
yaml conf
61
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Git Repo
Code
yaml conf
Pipeline
Docker Registry
Image
Pipeline apply -f .yaml
62
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Git Repo
Code
Yaml conf
Pipeline
Docker Registry
Image
Pipeline apply -f .yaml
pull
63
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Git Repo
Code
Yaml conf
Pipeline
Docker Registry
Image
Pipeline apply -f .yaml
Pod
64
65
Rotte di salute
66
67
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
È pronto per ricevere traffico?
readinessProbe
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
68
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
La readiness dice ok!
readinessProbe
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
69
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
Il service manda il traffico al Pod!
readinessProbe
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
70
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
Se ci mette molto tempo è consigliabile aggiungere la
startup Probe che aspetta anche minuti prima che si avvii il
servizio e poi passa alla readiness
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
startupProbe
71
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz È in salute?
livenessProbe
Quando è tutto funzionante è bene chiedersi se il servizio è
sempre attivo e risponde nei tempi
72
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz
Al momento sì! La liveness probe
funziona correttamente
livenessProbe
73
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz Se smette di rispondere va in KO
livenessProbe
74
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz k8s riavvia il Pod
Restart!
livenessProbe
75
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz
e il traffico non è più indirizzato
Restart!
livenessProbe
76
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz
Tutte le rotte non rispondono
restarting...
livenessProbe
77
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz
È pronto
livenessProbe
78
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz
indirizza il traffico
livenessProbe
79
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
/-/ready
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/healthz
Tutto di nuovo funzionante
livenessProbe
Metriche
80
81
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/metrics
Possiamo esporre delle misure che
vengono prese in pull da un servizio
che le salva su DB e consente di
graficare nel tempo le metriche. Es:
● Messaggi scodati
● Pagamenti effettuati
● Utenti attivi
● ecc...
82
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/metrics
Possiamo esporre delle misure che
vengono prese in pull da un servizio
che le salva su DB e consente di
graficare nel tempo le metriche. Es:
● Messaggi scodati
● Pagamenti effettuati
● Utenti attivi
● ecc...
Metric
Collector DB
83
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/metrics
Possiamo esporre delle misure che
vengono prese in pull da un servizio
che le salva su DB e consente di
graficare nel tempo le metriche. Es:
● Messaggi scodati
● Pagamenti effettuati
● Utenti attivi
● ecc...
Metric
Collector DB
Dashboards
84
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/metrics
Metric
Collector DB
Dashboards
Posso costruire degli allarmi sulle
metriche applicando anche tecniche
di Machine Learning.
Msg in queue >
1000
85
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/metrics
Metric
Collector DB
Dashboards
E posso decidere di far scalare i pod
nel caso è necessario scodare di più
Msg in queue >
1000
scale!
Pod
86
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/metrics
Metric
Collector DB
Dashboards
Msg in queue >
1000
PodPod
scale!
E posso decidere di far scalare i pod
nel caso è necessario scodare di più
87
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
/-/metrics
Metric
Collector DB
Dashboards
Msg in queue >
1000
PodPod
E l’allarme rientra
88
89
Logs
90
91
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
I log vanno su stdout
log stdout
92
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
Logs
collector DB
Possono essere mandati ad un
collettore che li salva ordinati su un
db per fare analisi e allarmi.
log stdout
93
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
Logs
collector DB
Dashboards
Possono essere aggregati in
dashboard per capire il
comportamento degli applicativi
log stdout
94
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
Logs
collector DB
Dashboards
499 response code
E si possono definire allarmi sui log
log stdout
95
96
Tracing
97
98
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
Se voglio vedere tutte le chiamate
interne ad un servizio utilizzo il
tracing
99
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
instrumentation
Instrumento il codice con delle
librerie
100
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
Collector
DBinstrumentation Dashboards
E a questo punto posso raccogliere
tutte le informazioni di tracing di
tutte le chiamate tra servizi e tutti i
metodi interni dei servizi.
101
102
Canary Release
103
104
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Purchase Namespace
Cart Payment
Gateway
Pricing Namespace
Pricing
105
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Purchase Namespace
Cart Payment
Gateway
Pricing Namespace
Pricing
106
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Purchase Namespace
Cart Payment
Gateway
Pricing Namespace
Pricing
107
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Purchase Namespace
Cart Payment
Gateway
Pricing Namespace
Pricing
108
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Purchase Namespace
Cart Payment
Gateway
Pricing Namespace
Pricing v1
Pricing v2Come farli
convivere?
109
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Proxy
Purchase Namespace
Cart
Proxy
Payment
Gateway
Proxy
Pricing Namespace
Pricing v1
Proxy
Pricing v2
Proxy
110
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Proxy
Purchase Namespace
Cart
Proxy
Payment
Gateway
Proxy
Pricing Namespace
Pricing v1
Proxy
Pricing v2
Proxy
111
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Proxy
Purchase Namespace
Cart
Proxy
Payment
Gateway
Proxy
Pricing Namespace
Pricing v1
Proxy
Pricing v2
Proxy90%
112
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Proxy
Purchase Namespace
Cart
Proxy
Payment
Gateway
Proxy
Pricing Namespace
Pricing v1
Proxy
Pricing v2
Proxy
10%
90%
113
Canary Deploy
Gateway
/api/*
Products Namespace
Catalogue
Proxy
Purchase Namespace
Cart
Proxy
Payment
Gateway
Proxy
Pricing Namespace
Pricing v1
Proxy
Pricing v2
Proxy
User-agent
iPhone
User-agent
Android
114
115
Lo schema finale
116
117
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
Kubernetes Distro
Sidecars
118
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
Kubernetes Distro
Sidecars
Git
Pipelines
Docker
Registry
119
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
Kubernetes Distro
Sidecars
Git
Pipelines
Docker
Registry
Tracing
Metrics
Logs
120
Kubernetes
Namespace
Worker
Node
Worker
Node
Worker
Node
Pod
Service
Git
Pipelines
Docker
Registry
Metrics
Logs
APIs
Kubernetes Distro
Sidecars
Tracing
Da dove posso iniziare?
121
122
https://kubernetes.io/docs/home/
https://www.cncf.io/
https://landscape.cncf.io/
123
https://sessionize.com/giulio-roggero/

Kubernetes and CNCF Landscape 101