Skip to content

Kubernetes Workloads

Un Pod esegue un singolo container o un piccolo gruppo di container. È l'unità minima di deploy su Kubernetes.

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  labels:
    app: sample
spec:
  containers:
    - name: app
      image: nginx:alpine
      ports:
        - containerPort: 80
      env:
        - name: ENV
          value: prod

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)

apiVersion: batch/v1
kind: CronJob
metadata:
  name: sample-cron
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: task
              image: busybox
              command: ["sh", "-c", "date"]
          restartPolicy: OnFailure