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