Kubernetes Workloads¶
Un Pod esegue un singolo container o un piccolo gruppo di container. È l'unità minima di deploy su Kubernetes.
Un Deployment gestisce repliche e aggiornamenti automatici dei Pod, garantendo alta disponibilità.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
labels:
app: web
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:alpine
# --- CONFIGURAZIONE VARIABILI (IN MEMORIA) ---
envFrom:
- configMapRef:
name: app-config
env:
- name: APP_MODE
value: "production"
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
ports:
- containerPort: 80
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
# --- CONTROLLI DI STATO (PROBES) ---
livenessProbe: # Gestione auto-healing (restart se fallisce)
httpGet:
path: /
port: 80
initialDelaySeconds: 5 # Attesa prima del primo check
periodSeconds: 10 # Frequenza del controllo
readinessProbe: # Gestione traffico (isolamento se fallisce)
httpGet:
path: /
port: 80
initialDelaySeconds: 3 # Attesa prima di ricevere traffico
periodSeconds: 5 # Frequenza del controllo
volumeMounts:
- name: storage-volume
mountPath: /usr/share/nginx/html
- name: config-files
mountPath: /etc/nginx/conf.d
volumes:
- name: storage-volume
persistentVolumeClaim:
claimName: app-pvc
- name: config-files
configMap:
name: nginx-config
Uno StatefulSet gestisce pod con identità stabile e storage persistente, tipico per database.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx-stateful
spec:
serviceName: nginx-headless
replicas: 2
selector:
matchLabels:
app: nginx-stateful
template:
metadata:
labels:
app: nginx-stateful
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
volumeMounts:
- name: webdata
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: webdata
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: local-path
resources:
requests:
storage: 1Gi
Un DaemonSet fa girare un pod su ogni nodo del cluster, utile per agenti di monitoraggio o log.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ds-local-node
spec:
selector:
matchLabels:
app: ds-local-node
template:
metadata:
labels:
app: ds-local-node
spec:
containers:
- name: app
image: busybox
command: ["sh", "-c", "echo running on $(hostname); sleep 3600"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
hostPath:
path: /opt/local-path-provisioner/ds-local-node
type: DirectoryOrCreate
I Jobs gestiscono task a completamento singolo o programmato.
Job (Singolo)
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job
spec:
template:
spec:
containers:
- name: worker
image: busybox
command: ["sh", "-c", "echo job completed; sleep 5"]
restartPolicy: Never
backoffLimit: 3
CronJob (Programmato)