Cosa é
- Gestisce dei containers (pods) in un cluster
- E’ capace di distribuire il carico a cui è soggetta una struttura in funzione delle risorse allocate al cluster
- Open-source dal 2014 (by Google)
- Piattaforma Cloud portabile
- Spesso le operazioni svolte in Azure, in realtà dietro hanno Kubernetes
- Può essere installato sul proprio computer
- Non è legato ad un singolo cloud providere (funziona su AWS, Azure..)
- Non è semplice
- Spesso è più opportuno utilizzare le funzionalità buited-in nelle più diffuse piattaforme di cloud piuttosco che cerca di implementare la stessa funzionalità direttamente in Kubernetes
- Current state <> Desire state
- E’ possibile settare Kubernetes per avere un certo numero di istanze della mia applicazioni attive.
- Può succedere poi che lo stato attuale non corrisponda con quello ottimale impostato (es: un server è in manutenzione)
- Container-centric
-
- E’ costruito sul container standard di Linux
-
- K8s => E’ l’abbreviazione di Kubernetes (k + 8 letttere + s)
Componenti
- Master server
- API Server
- Risponde a delle richieste HTTP
- ETCD
- Il database dove Kubernetes immagazzina i propri dati
- Scheduler
- API Server
- Nodes
- L’architettura più semplice è un Master + un nodo che risiedono sullo stesso computer
- Ogni nodo ha una serie di servizi in esecuzione
- Kubelet (assicura che il nodo sia in esecuzione e
- Network proxy
- Permette la comunicazione tra i nodi del kubernetes cluster
- kubectl
- CLI per interagire con le API di gestione di Kubernetes
- Sostituisce ciò che normalmente è possibile fare con Postman
- Auto-completion e aliases
- Proxy
- E’ possibile poter riferirsi al cluter come se fosse sulla propria macchina (localhost) e senza dover fornire ad ogni richiesta il token di accesso
- E’ il proxy che reindirezzara la richiesta verso il giusto indirizzo del server dove il cluster kubenetes è deploiato, aggiungendoci il JWT token di autenticazione
- kubelogin
- Open ID Connect
- JWT (json web token)
- Namespaces
- E’ possibile separare i cluster in namespace per evitare conflitti con gli altri utilizzatore del cluster
- ReplicaSet o ReplicationController
- Numero di repliche per un pod
- Desire state e current state
- Services
- NodePort (tale servizio mi permette di esporre una app e renderla disponibile in qualsiasi nodo del cluster, non solo là dove è deploiata)
- Deployments
- Replication controller + rolling update
- Quando faccio un nuovo deploy su un pod (nodo), Kuberbetes ha delle policy per gestire l’update di tale modifica su tutte le repliche disponibili del nostro pod
- Comunicazione tra nodi
- In un cluster ogni pod è raggiungibili non tramite un indirizzo ip o un domain name ma tramite coppie chiave-valore.. una sorta di tag.
- Label selector
- Ingress controller
- E’ responsabile per il traffico in ingresso al cluster K8s
File .yml
- In realtà raramente si interagirà direttamente con la linea di comando kubectl
- Piuttosto si programmerà il funzionamento del nostro cluster kubernetes tramite file .yml
- Similarmente a come avviene con il dockerfile
-
//file pod-sample.yml kind: Pod [creo un nuovo pod] apiVersion: v1 metadata: name: nginx-pod [il nome del nuovo pod è nginx-pod] labels: name: nginx-pod app: workshop spec: containers: - name: nginx-pod [il pod contiene un container con l'immagine nginx] image: nginx ports: - containerPort: 80 name: http protocol: TCP --- kubectl apply -f pod-sample.yml [eseguo il file pod-sample.yml]
Comandi
-
kubectl run <nginx> --image=nginx:alpine --port:80 kubectl get pods kubectl get all kubectl run my-shell --rm -it --image debian --bash [lancio un'immagine debian e accedo alla shell in modo interativo --rm indica di eliminare il pod quando esco] kubectl describe pod <nginx> kubectl delete pod <nginx>
Risorse
- JWT
- Decoding Json web token
- Visual Studio Code
- Kubernetes extension
- Kubernetes package manager
- https://microk8s.io