Короткий ответ
Deployment — это декларативный контроллер, который через ReplicaSet поддерживает заданное число реплик Pod, пересоздаёт их при сбоях и управляет обновлениями версии приложения; одиночный Pod такого самовосстановления не имеет.
Как это работает подробнее
Deployment описывает желаемое состояние (образ, число реплик, стратегию обновления), а контроллер в control plane постоянно сверяет фактическое состояние с желаемым и создаёт/удаляет Pod через ReplicaSet, чтобы их совпасть.
Пример кода
manifest.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
selector:
matchLabels: { app: web }
template:
metadata:
labels: { app: web }
spec:
containers:
- name: web
image: nginx:1.25Что использовать на практике
- Практика. Deployment используют для stateless-приложений, которым не важны порядок запуска и устойчивые идентификаторы. Обновление образа через
kubectl set imageили изменение манифеста запускает rolling update по заданной стратегии, а при проблеме можно откатиться командойkubectl rollout undo.
Подводные камни
- Риски. создавать "голый" Pod в проде и удивляться, что после падения узла он не восстанавливается; редактировать Pod, созданный Deployment'ом, напрямую — изменения будут перезаписаны контроллером при следующей сверке состояния; не указывать
resourcesи стратегию обновления, полагаясь на значения по умолчанию.