Skip to content

Workload

Pods

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

Deployments

Un Deployment gestisce repliche e aggiornamenti automatici dei Pod, garantendo alta disponibilità. Liveness probe serve a capire se il container è "vivo" - Se fallisce, Kubernetes lo riavvia. Readiness probe serve a capire se il container è pronto a servire traffico - Se fallisce, il Pod viene temporaneamente tolto dal Service

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deploy
  labels:
    app: web
    component: frontend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
        tier: frontend
    spec:
      containers:
        - name: web
          image: nginx:alpine
          ports:
            - containerPort: 80
            - containerPort: 8080
          resources:
            requests:
              cpu: 50m      #(50 millicore)
              memory: 64Mi  
            limits:
              cpu: 200m     
              memory: 128Mi 
          livenessProbe:
            httpGet:
              path: /      
              port: 80      
            initialDelaySeconds: 5  # attesa iniziale prima del primo probe
            periodSeconds: 10       # intervallo tra i probe successivi
          readinessProbe:
            httpGet:
              path: /       
              port: 80      
            initialDelaySeconds: 3  
            periodSeconds: 5        
          volumeMounts:
            - name: webdata
              mountPath: /usr/share/nginx/html
      volumes:
        - name: webdata
          persistentVolumeClaim:
            claimName: webapp-pvc

StatefulSets

Uno StatefulSet gestisce pod con identità stabile e storage persistente, tipico per database o servizi con stato.

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

DaemonSets

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

Jobs

Un Job esegue un task a completamento, assicurando che venga portato a termine anche in caso di errori.

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

Un CronJob esegue job programmati a intervalli regolari, simile ai cron system delle linux box.

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