Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto...

32
Introduzione a Kubernetes Cos’è, come funziona e a cosa serve Fabio Da Soghe - Cognitio

Transcript of Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto...

Page 1: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Introduzione a KubernetesCos’è, come funziona e a cosa serve

Fabio Da Soghe - Cognitio

Page 2: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Web Performance: 80-20

Client web

Server

Back-end

80% 20%

Page 3: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Web Performance: 80-20?

Fonte: https://www.speedawarenessmonth.com/when-8020-becomes-2080/

Page 4: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

A chi è rivolto il talk

● Non conosce o non ha ancora usato Kubernetes

● Usa o almeno conosce i container (Docker)

Page 5: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Virtual Machine Container

Page 6: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Cos’è Kubernetes

Orchestratore di container:

● Cluster di nodi (fisici o virtuali)

● Gestione dell’infrastruttura (computing e network)

● Automazione

Page 7: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Creato da Google

● Risultato di 15 anni di esperienza in Google

● Progetto Open Source donato da Google alla CNCF (Luglio 2015)

● Uno dei progetti Open Source più attivi

● Leader container orchestrator

Page 8: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Fonte: CNCFhttps://www.cncf.io/blog/2017/06/05/30-highest-velocity-open-source-projects/

Page 9: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Fonte: Portworx https://portworx.com/2017-container-adoption-survey/

Orchestratori usati in azienda Orchestratore usato più spesso in azienda

Page 10: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Benefici di Kubernetes

Paradigmadichiarativo

Distribuzione automatica

Gestione storageRollout erollback

Scaling orizzontale e

verticale

Self-Healing

Servicediscovery

Gestione secret e configurazione

Page 11: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Paradigma dichiarativo

● Descrizione dello stato desiderato dell’applicazione (YAML)

● Non come, ma cosa

● Definizione dell’intera infrastruttura necessaria all’applicazione in produzione

Page 12: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Distribuzione automatica● Collocamento automatico dei runtime sui nodi

● Rispetto di requirement e constraint

● Applicazione di politiche di massima disponibilità e bilanciamento del carico

nodoA2 vCore4 GB RAM

app3 vCore

6 GB RAM

nodoB4 vCore8 GB RAM

nodoA

region: EU

nodoB

region: US

app

region: EU

Page 13: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Scaling orizzontale e verticale● Aumento o diminuzione container in esecuzione

(scaling orizzontale)

● Aumento o diminuzione risorse cpu/ram(scaling verticale)

● Manuale e automatico, in base a soglie prestabilite

app2 vCore

1 GB RAM

app2 vCore

1 GB RAM

app2 vCore

1 GB RAM

app2 vCore

1 GB RAM

app2 vCore

1 GB RAM

app6 vCore

3 GB RAM

Page 14: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Rollout e rollback● Applicazione progressiva di modifiche e

aggiornamenti (supporto a canary release)

● Monitoraggio costante dello stato

● Processo automatico

● Rollback in caso di problemi

v1 v1 v1 v1 v1 v1 v2 v2 v2 v2

v1 v1 v2 v1 v1 v1 v2 v1 v1 v1

Page 15: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Gestione storage

● Supporto a diversi storage provider: locale, network (NFS, iSCSI, Gluster, Ceph, Cinder, Flocker, …), cloud (GCP, AWS, Azure)

● Estendibile da terze parti

● Manuale o auto-provisioned

Page 16: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Self-healing● Riavvio container in errore (possibile ricollocamento)

● Ricollocamento automatico in caso crash nodi

● Health check definiti dall’utente

nodoAwl1

wl8

nodoB

wl5

wl2

nodoC

wl7

wl6

nodoA

wl1

wl8

nodoB

wl5

wl2wl7 wl6

nodoC

wl7

wl6

Page 17: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Service discovery● Meccanismi built-in per pubblicazione servizi ed

endpoint

● DNS interno per assegnare ai container gli IP

● Networking virtuale sull’intero cluster

● Load Balancing dei servizi esposti

Service

replica1

replica2

replica3

10.2.12.7

10.2.5.72

10.2.28.33

web.myapp.svc.cluster.local

Page 18: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Gestione secret e configurazione

● Gestione esplicita informazioni sensibili (secret)

● Disaccoppiamento esplicito configurazione dai container

Page 19: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Architettura generale

MasterA P

I

Kubectl

Web UI Dashboard

3th party client

Worker

Worker

Worker

Storage

Storage

Storage

Page 20: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Oggetti Kubernetes

Workload:

● Deployment● Replica Set● Stateful Set● Daemon Set● Job / Cron Job● Pod

Networking:

● Service● Ingress

Configuration:

● Namespace● Secret● Config Map

Storage:

● Volume● Persistent Volume● Persistent Volume

Claim

Page 21: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Pod: l’unità di elaborazione

Pod

Container

Volume

NetworkIP address

Page 22: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Pod: l’unità di elaborazione

Pod

Container ContainerLocalhostNetwork

IP address

Volume

Page 23: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Replica Set

Master

Struttura (core) di un’applicazione

Deployment Replica Set

Client

Worker

Storage Provider

Worker

Persistent Volume Claim

PodContainer

BContainer

C

Spawn

Spawn

Spawn

Volume

Declare

Declare Provision

Mount

Deployment Spawn

PodContainer

A

PodContainer

A

Spawn

Declare

Page 24: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

It’s demo time!

Applicazione web:

● Frontend web Meteor (-> Node.js)

● Database MongoDB

Page 25: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

DatabaseFrontend Web

Architettura logica K8s Demo

Deployment

Service

Ingress Service

Stateful SetPersistent

Volume Claim

Volume

InternetProvision

Mount

HTTP

Page 26: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

YAML frontend web (1/2)kind: IngressapiVersion: extensions/v1beta1metadata: name: k8s-demospec: backend: serviceName: k8s-demo servicePort: 80

kind: ServiceapiVersion: v1metadata: name: k8s-demospec: type: NodePort ports: - port: 80 targetPort: http selector: app: k8s-demo

Page 27: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

YAML frontend web (2/2) containers: - image: "eu.gcr.io/myrepo/k8s-demo" name: nodejs resources: limits: cpu: "0.1" requests: cpu: "0.01" env: - name: MONGO_URL value: " mongodb://mongo-0.mongo:27017/k8s-demo?replicaSet=rs0" - [...] ports: - containerPort: 3000 name: http readinessProbe: httpGet: path: /rest/data/add?size=10&numDocs=0&work=0 port: 3000 initialDelaySeconds: 10 periodSeconds: 1 failureThreshold: 1

kind: DeploymentapiVersion: apps/v1beta1metadata: name: nodejsspec: replicas: 1 strategy: type: RollingUpdate rollingUpdate: maxSurge: 2 maxUnavailable: 1 template: metadata: labels: app: k8s-demo spec:

Page 28: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

YAML database (1/3)kind: ServiceapiVersion: v1metadata: name: mongo labels: name: mongospec: ports: - port: 27017 targetPort: 27017 clusterIP: None selector: role: mongo

Page 29: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

kind: StatefulSetapiVersion: apps/v1beta1metadata: name: mongospec: serviceName: "mongo" replicas: 1 updateStrategy: type: RollingUpdate template: metadata: labels: role: mongo spec: terminationGracePeriodSeconds: 10 containers:

- name: mongo image: mongo resources: limits: cpu: "0.1" requests: cpu: "0.01" command: - "mongod" - "--replSet" - "rs0" - "--smallfiles" - "--noprealloc" ports: - containerPort: 27017 volumeMounts: - name: mongo-persistent-storage mountPath: /data/db

YAML database (2/3)

Page 30: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

- name: mongo-sidecar image: cvallance/mongo-k8s-sidecar env: - name: MONGO_SIDECAR_POD_LABELS value: "role=mongo" - name: KUBERNETES_MONGO_SERVICE_NAME value: "mongo"

volumeClaimTemplates: - metadata: name: mongo-persistent-storage annotations: volume.beta.kubernetes.io/storage-class: "standard" spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 10Gi

YAML database (3/3)

Page 31: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source

Kubernetes in Cognitio

Plenus: Platform-as-a-Service basato su Kubernetes

www.plenus.cloud

Page 32: Introduzione a Kubernetes...Creato da Google Risultato di 15 anni di esperienza in Google Progetto Open Source donato da Google alla CNCF (Luglio 2015) Uno dei progetti Open Source