7.kubernetes deployment的特性

Kubernetes 的 Deployment 是管理 Pod 副本的核心控制器,提供声明式更新、滚动升级、回滚等能力,是部署无状态应用(如Web服务、API)的标准工具。以下是其核心特性及使用方法:


一、Deployment 的核心特点

特点说明
声明式配置通过 YAML 定义期望状态(如副本数、镜像版本),由 Kubernetes 自动同步实际状态。
副本管理自动创建和管理 ReplicaSet,确保指定数量的 Pod 副本始终运行。
滚动更新(Rolling Update)逐步替换旧版本 Pod,实现零停机更新。支持自定义更新策略(如批次间隔、最大不可用)。
版本回滚可快速回退到历史版本(通过 kubectl rollout undo)。
扩缩容手动或通过 HPA(Horizontal Pod Autoscaler)自动调整 Pod 副本数量。
状态监控查看 Deployment 的更新状态(kubectl rollout status)。

二、Deployment 的典型使用场景

  1. 部署无状态应用
    • 例如 Web 服务、API 服务、微服务等。

  2. 持续更新应用版本
    • 通过滚动更新逐步替换旧 Pod,保证服务不中断。

  3. 蓝绿部署(Blue-Green)或金丝雀发布(Canary)
    • 结合多个 Deployment 和 Service 流量切换实现。

  4. 弹性扩缩容
    • 根据 CPU/内存指标自动扩缩容(需配合 HPA)。


三、如何使用 Deployment?

1. 编写 Deployment YAML 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment   # Deployment 名称
  labels:
    app: nginx
spec:
  replicas: 3             # 副本数
  selector:
    matchLabels:
      app: nginx          # 匹配 Pod 标签
  template:               # Pod 模板
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.3  # 容器镜像
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
        livenessProbe:      # 存活探针
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10

2. 常用操作命令

操作命令
创建 Deploymentkubectl apply -f deployment.yaml
查看 Deployment 状态kubectl get deploymentskubectl describe deployment nginx-deployment
触发滚动更新(修改镜像版本)kubectl set image deployment/nginx-deployment nginx=nginx:1.25.4
查看更新进度kubectl rollout status deployment/nginx-deployment
回滚到上一版本kubectl rollout undo deployment/nginx-deployment
扩缩容副本数kubectl scale deployment nginx-deployment --replicas=5
删除 Deploymentkubectl delete -f deployment.yaml

四、Deployment 的更新策略
在 YAML 中通过 spec.strategy 定义:

spec:
  strategy:
    type: RollingUpdate     # 默认策略,可选 Recreate(先终止旧Pod再创建新Pod)
    rollingUpdate:
      maxSurge: 25%        # 更新期间允许超过期望副本数的最大比例
      maxUnavailable: 25%   # 更新期间不可用 Pod 的最大比例

五、最佳实践

  1. 标签选择器一致性
    spec.selector.matchLabels 必须与 Pod 模板的 metadata.labels 一致,否则会报错。

  2. 资源限制
    • 在 containers.resources 中定义 CPU/内存的请求(requests)和上限(limits),避免资源争抢。

  3. 健康检查
    • 配置 livenessProbereadinessProbe,确保 Pod 健康状态可被监控。

  4. 版本控制
    • 每次更新镜像时生成新标签(如 nginx:1.25.4),避免使用 latest 标签。


六、Deployment 与相关对象的关系

Deployment 
└─ 管理 ReplicaSet(记录版本历史)
   └─ 管理 Pod 副本
      └─ 通过 Service 暴露服务

总结
• Deployment 是 Kubernetes 部署无状态应用的“瑞士军刀”,提供自动化副本管理、滚动更新和版本回滚能力。

• 核心操作:通过 YAML 定义期望状态,使用 kubectl 命令管理生命周期。

• 适用场景:Web 服务、API、微服务等无需持久化本地数据的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值