K8s Deployment 副本控制器详解

Deployment 是 Kubernetes 中用于管理无状态应用的核心控制器,负责声明式地定义 Pod 模板并确保指定数量的副本(Replicas)持续运行。以下是关键特性和使用方法:


Deployment 核心功能

滚动更新与回滚
通过 spec.strategy 字段定义更新策略(RollingUpdate/Recreate),默认采用滚动更新逐步替换旧 Pod,确保服务不中断。使用 kubectl rollout history 可查看版本历史并回滚到指定版本。

副本数维护
通过 spec.replicas 指定期望的 Pod 数量,Deployment 的控制器(Controller)会通过 ReplicaSet 自动创建或删除 Pod 以满足预期状态。

健康检查与自愈
结合 Readiness Probe 和 Liveness Probe 实现 Pod 健康状态监控,故障时自动重启或替换 Pod。


典型 YAML 配置示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19.1
        ports:
        - containerPort: 80
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

常用操作命令

部署管理

kubectl apply -f deployment.yaml  # 创建/更新 Deployment
kubectl get deployments           # 查看 Deployment 状态
kubectl describe deployment <name> # 查看详情

版本控制

kubectl rollout status deployment/nginx-deployment  # 查看更新状态
kubectl rollout undo deployment/nginx-deployment --to-revision=2  # 回滚到版本2

扩缩容

kubectl scale deployment nginx-deployment --replicas=5  # 手动扩缩容

高级特性

暂停与恢复更新
使用 kubectl rollout pause/resume 可暂停更新过程,适用于多次修改后统一发布。

资源配额与节点调度
通过 resources 字段限制 CPU/内存,配合 affinitynodeSelector 控制 Pod 调度位置。

HPA 自动扩缩容
结合 HorizontalPodAutoscaler 根据 CPU/内存等指标动态调整副本数。


与原生的 ReplicaSet 对比

Deployment 在 ReplicaSet 基础上增加了更新策略、版本历史记录等高级功能,实际生产中推荐使用 Deployment 而非直接操作 ReplicaSet。

通过以上功能,Deployment 成为 Kubernetes 中管理无状态服务的标准方案,兼顾了灵活性与可靠性。

更多推荐