[]

  1. Cosa é
  2. Componenti
  3. File yml
  4. Comandi
  5. Risorse

 

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
  • 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