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à.
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.
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.
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.
# 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