Docker Kubernetes — Cheat Sheet

Tag: docker, kubernetes, containers, orchestration, devops, k8s, pod, deployment

Livello: intermedio

TL;DR: Orchestrazione e gestione di container su scala. Docker pacchettizza l'applicazione in immagini isolate, Kubernetes ne gestisce il ciclo di vita, il networking e la scalabilità.

Concetti chiave

Docker costruisce, distribuisce ed esegue container isolati usando un container runtime.

Kubernetes (K8s) orchestra i container, assicurando alta disponibilità, self-healing e bilanciamento del carico.

Un Pod è l'unità di deploy minima in K8s, contenente uno o più container strettamente accoppiati.

Il Deployment gestisce la creazione e l'aggiornamento dei Pod, garantendo sempre lo stato desiderato (repliche).

Il Service espone i Pod in rete fornendo un IP stabile, agendo da load balancer interno o esterno.

L'Ingress gestisce l'accesso esterno (solitamente HTTP/HTTPS) ai servizi nel cluster tramite regole di routing.

ConfigMap e Secret permettono di separare la configurazione e i dati sensibili dal codice dell'immagine.

I Volume astraggono lo storage, garantendo la persistenza dei dati oltre il ciclo di vita del singolo Pod.

Domande tipiche e risposte pronte

Q: Qual è la differenza tra Docker e Kubernetes?R: Docker è lo strumento per creare, pacchettizzare ed eseguire i singoli container. Kubernetes è l'orchestratore che decide su quali nodi farli girare, come scalarli e mantenerli sani.

Q: Come garantisci che un'applicazione in Kubernetes sia sempre disponibile?R: Uso i Deployment per mantenere il numero corretto di repliche e configuro liveness e readiness probe. In questo modo K8s riavvia i Pod bloccati e invia traffico solo a quelli pronti.

Q: Perché è importante impostare Request e Limit nei manifest di K8s?R: Le Request aiutano lo scheduler a posizionare il Pod sul nodo giusto. I Limit evitano che un singolo container saturi CPU e RAM dell'intero nodo.

Insidie e errori comuni

Creare immagini Docker enormi e monolitiche senza sfruttare le multi-stage build.

Omettere le configurazioni di resource request e limit, causando evictions improvvise e instabilità del cluster.

Usare il tag latest per le immagini in produzione, portando a comportamenti imprevedibili ai successivi riavvii.

Configurare in modo errato le liveness probe, scatenando un loop infinito di riavvii del Pod sotto carico.

Esporre porte o dashboard sensibili su interfacce pubbliche senza adeguata autenticazione e RBAC.

Snippet e comandi

# Docker: build, tag e run di base
docker build -t my-app:v1.0.0 .
docker run -d -p 8080:80 my-app:v1.0.0
docker exec -it container_id /bin/sh

# Kubernetes: applicazione manifest e troubleshooting
kubectl apply -f deployment.yaml
kubectl get pods,svc,ingress -n my-namespace
kubectl describe pod my-pod-name
kubectl logs my-pod-name --follow
kubectl port-forward svc/my-service 8080:80
Jarvis Interviews
Jarvis