💻 Software kubernetes Avanzato ⏱ 240 min 👁 16 visualizzazioni

Kubernetes da Zero a Produzione: Architettura, Componenti e Primo Cluster

Sara Ferraro @Sara_SelfHost · 24/05/2026 · aggiornato 2 giorni fa

🧰 Materiali necessari

  • 6 VM Ubuntu 22.04 LTS
  • kubeadm v1.30+
  • kubelet v1.30+
  • kubectl v1.30+
  • containerd 1.7+
  • Calico CNI v3.27+
  • HAProxy o NGINX per load balancer
  • keepalived per VIP
  • metrics-server
  • local-path-provisioner o CSI driver cloud
  • etcdctl per backup
  • crictl per debug runtime
  • Storage esterno per backup (S3 o NFS)
  • Documentazione ufficiale kubernetes.io
Kubernetes rappresenta lo standard de facto per l'orchestrazione di container in ambienti enterprise. Nato da Borg, il sistema interno di Google, Kubernetes e' stato rilasciato open source nel 2014 e mantenuto dalla Cloud Native Computing Foundation (CNCF). Questo tutorial copre l'architettura compl...
🔐

Contenuto riservato ai membri

Registrati gratis per accedere al corso completo, ai quiz e ai PDF scaricabili.

Crea account gratis → Ho già un account

📋 Passi

  1. 1
    Preparazione infrastruttura e prerequisiti
    {"step":1,"title":"Preparazione infrastruttura e prerequisiti","description":"Provisiona 3 VM master e 3 VM worker su Ubuntu 22.04 LTS. Specifiche minime: master 2 vCPU 4GB RAM 50GB SSD, worker 4 vCPU 8GB RAM 50GB SSD. Configura hostname univoci e popola \/etc\/hosts su tutti i nodi con IP e hostname. Disabilita swap permanentemente con swapoff -a e commenta la riga in \/etc\/fstab. Kubernetes richiede swap disabilitato per scheduling deterministico."}
  2. 2
    Configurazione kernel e moduli necessari
    {"step":2,"title":"Configurazione kernel e moduli necessari","description":"Carica moduli kernel necessari: aggiungi overlay e br_netfilter in \/etc\/modules-load.d\/k8s.conf, poi esegui modprobe per ognuno. Configura parametri sysctl in \/etc\/sysctl.d\/k8s.conf: net.bridge.bridge-nf-call-iptables=1, net.ipv4.ip_forward=1. Applica con sysctl --system. Verifica con lsmod e sysctl che le configurazioni siano attive e persistenti al riavvio."}
  3. 3
    Installazione container runtime containerd
    {"step":3,"title":"Installazione container runtime containerd","description":"Installa containerd con apt-get install -y containerd. Genera configurazione default con containerd config default salvata in \/etc\/containerd\/config.toml. Modifica config.toml impostando SystemdCgroup = true nella sezione runtimes runc options per compatibilita con kubelet. Restart e enable il servizio. Verifica con crictl info che il runtime risponda correttamente."}
  4. 4
    Installazione kubeadm kubelet kubectl
    {"step":4,"title":"Installazione kubeadm kubelet kubectl","description":"Aggiungi repository ufficiale Kubernetes con chiave GPG appropriata. Installa versione specifica: apt-get install -y kubelet=1.30.0-1.1 kubeadm=1.30.0-1.1 kubectl=1.30.0-1.1. Metti in hold i pacchetti con apt-mark hold per prevenire upgrade automatici non pianificati. Verifica versioni installate con kubeadm version e kubectl version --client."}
  5. 5
    Setup load balancer per control plane HA
    {"step":5,"title":"Setup load balancer per control plane HA","description":"Installa HAProxy come load balancer su nodo dedicato. Configura \/etc\/haproxy\/haproxy.cfg con frontend su porta 6443 e backend con i tre master in modalita tcp con health check. Implementa keepalived per VIP se necessaria alta disponibilita del load balancer stesso. Testa connettivita con netcat prima di procedere al bootstrap."}
  6. 6
    Bootstrap primo master con kubeadm init
    {"step":6,"title":"Bootstrap primo master con kubeadm init","description":"Esegui kubeadm init con: --control-plane-endpoint VIP:6443 --upload-certs --pod-network-cidr=192.168.0.0\/16 --service-cidr=10.96.0.0\/12 --kubernetes-version=v1.30.0. Salva output completo con comandi join per master e worker (token validi 24 ore, certificate-key valido 2 ore). Configura kubectl copiando admin.conf. Verifica con kubectl get nodes (stato NotReady atteso fino a installazione CNI)."}
  7. 7
    Installazione CNI plugin Calico
    {"step":7,"title":"Installazione CNI plugin Calico","description":"Applica manifest Calico: kubectl create -f tigera-operator. Crea custom resource Installation con CIDR matching il pod-network-cidr usato in init. Attendi rollout completo con kubectl get pods -n calico-system. Verifica che il nodo master passi in stato Ready con kubectl get nodes. Testa networking con pod debug usando immagine nicolaka\/netshoot."}
  8. 8
    Join secondo e terzo master
    {"step":8,"title":"Join secondo e terzo master","description":"Sul secondo e terzo master esegui il comando join control plane salvato durante kubeadm init. Include token, hash CA, e certificate-key per join HA. Configura kubectl localmente su ognuno copiando admin.conf. Verifica con kubectl get nodes che tre master siano Ready. Controlla health etcd con etcdctl member list eseguito nel pod etcd sul DC."}
  9. 9
    Join worker node
    {"step":9,"title":"Join worker node","description":"Su ognuno dei worker esegui il comando join standard senza flag control-plane. Se token scaduto (validita 24 ore) generane uno nuovo con kubeadm token create --print-join-command. Verifica con kubectl get nodes -o wide che tutti i nodi siano Ready con ruoli corretti. Etichetta i worker con kubectl label node worker-role se necessario per node selector."}
  10. 10
    Deploy primo workload e test resilienza
    {"step":10,"title":"Deploy primo workload e test resilienza","description":"Deploy nginx con kubectl create deployment nginx --image=nginx:1.25 --replicas=3. Esponi con kubectl expose deployment nginx --port=80 --type=NodePort. Verifica distribuzione pod su worker differenti con kubectl get pods -o wide. Testa resilienza: drain di un worker con kubectl drain e --ignore-daemonsets, verifica reschedule automatico sugli altri nodi."}
  11. 11
    Configurazione storage e StorageClass
    {"step":11,"title":"Configurazione storage e StorageClass","description":"Installa local-path-provisioner per testing in lab. Imposta come StorageClass default con kubectl patch storageclass. Testa creando PersistentVolumeClaim e pod che monta il volume, verifica che il volume persista dopo restart del pod. Per produzione cloud installa il CSI driver del provider specifico seguendo la documentazione ufficiale."}
  12. 12
    Setup metrics-server per resource monitoring
    {"step":12,"title":"Setup metrics-server per resource monitoring","description":"Installa metrics-server dal release ufficiale. In lab aggiungi --kubelet-insecure-tls al deployment se necessario per ambienti senza certificati validi. Verifica con kubectl top nodes e kubectl top pods -A. Configura HPA esempio: kubectl autoscale deployment nginx --cpu-percent=70 --min=2 --max=10. Genera carico e osserva scaling automatico."}
  13. 13
    Backup etcd automatizzato
    {"step":13,"title":"Backup etcd automatizzato","description":"Crea script bash per backup etcd con etcdctl snapshot save usando i certificati del cluster (\/etc\/kubernetes\/pki\/etcd\/). Schedula via cron ogni 4 ore. Sincronizza backup verso storage esterno (S3 o NFS) con rsync o aws s3 sync. Testa periodicamente il restore in lab separato: crea cluster vuoto, applica snapshot, verifica integrita di tutti gli oggetti K8s."}
  14. 14
    Hardening security e audit logging
    {"step":14,"title":"Hardening security e audit logging","description":"Abilita audit logging modificando il manifest statico di kube-apiserver: aggiungi flag audit-log-path, audit-log-maxage, audit-policy-file. Crea policy file appropriata. Configura encryption at rest per secret con EncryptionConfiguration e provider aescbc. Dopo riavvio apiserver, ri-encrypta secret esistenti con kubectl get secrets -A -o json e kubectl replace."}
  15. 15
    Documentazione runbook e disaster recovery
    {"step":15,"title":"Documentazione runbook e disaster recovery","description":"Crea documentazione operativa completa: inventario nodi con IP e ruoli, procedure per join nodo e rotazione certificati, runbook per incident response, piano disaster recovery con restore da backup etcd. Committa in repository git con versioning. Pianifica disaster recovery drill trimestrale con tempi documentati per validare le procedure."}

💬 Commenti (0)

Nessun commento ancora. Sii il primo!

Accedi per commentare.