Ответ
Deployment — основной объект Kubernetes для управления жизненным циклом stateless-приложений. Я использую его для декларативного описания желаемого состояния приложения и автоматизации развертываний.
Пример манифеста Deployment для веб-приложения:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-app
namespace: production
labels:
app: frontend
spec:
replicas: 3 # Желаемое количество подов
selector:
matchLabels:
app: frontend
tier: web
strategy:
type: RollingUpdate # Стратегия обновления по умолчанию
rollingUpdate:
maxSurge: 1 # Можно создать на 1 под больше желаемого количества
maxUnavailable: 0 # Минимум 3 пода должны оставаться доступными
template:
metadata:
labels:
app: frontend
tier: web
version: v1.2.0 # Метка версии для канареечных развертываний
spec:
containers:
- name: web-container
image: my-registry/frontend:v1.2.0
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: frontend-config
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
readinessProbe:
httpGet:
path: /ready
port: 8080
Типичные операции в работе:
# Деплой или обновление
kubectl apply -f frontend-deployment.yaml
# Мониторинг процесса обновления
kubectl rollout status deployment/frontend-app -n production
# Масштабирование вручную (обычно это делает HPA)
kubectl scale deployment frontend-app --replicas=5 -n production
# Откат к предыдущей ревизии, если что-то пошло не так
kubectl rollout undo deployment/frontend-app -n production
# История изменений
kubectl rollout history deployment/frontend-app -n production
Почему это важно: Deployment обеспечивает самовосстановление (если под падает, ReplicaSet создаст новый), позволяет проводить безопасные обновления без простоя (rolling update) и легко масштабировать приложение. В production это всегда используется вместе с Service и Ingress для маршрутизации трафика.