21·Deployment进阶

Deployment 是什么

kubernetesdeploymentconcept

Deployment 是什么

学习目标

  1. 理解 Deployment 的作用和职责
  2. 理解 Deployment 与 Pod 的关系
  3. 掌握 Deployment 的核心特性

核心概念

一句话解释

Deployment 是 Kubernetes 中用于声明式管理无状态应用的控制器,确保指定数量的 Pod 副本始终运行。

Deployment 解决什么问题

手动管理 Pod 的问题:
┌─────────────────────────────────────┐
│  手动创建 Pod                       │
│  - Pod 挂了谁来重启?               │
│  - 怎么保证一直有 3 个副本?        │
│  - 怎么更新到新版本?               │
│  - 更新出问题怎么回滚?             │
└─────────────────────────────────────┘

Deployment 解决方案:
┌─────────────────────────────────────┐
│  Deployment(声明期望状态)         │
│  "我要 3 个 nginx Pod"              │
│                                     │
│  → ReplicaSet(确保副本数量)       │
│    → Pod 1                          │
│    → Pod 2                          │
│    → Pod 3                          │
└─────────────────────────────────────┘
自动维护期望状态,自动处理故障恢复

Deployment 的核心职责

职责说明
副本管理确保指定数量的 Pod 副本运行
滚动更新逐步替换旧版本 Pod
回滚快速回到之前的版本
扩缩容动态调整 Pod 数量
自愈Pod 挂掉自动重建

Deployment 架构

Deployment
    │
    ├── ReplicaSet (v1)  ← 当前版本
    │      ├── Pod 1
    │      ├── Pod 2
    │      └── Pod 3
    │
    └── ReplicaSet (v0)  ← 旧版本(更新后保留)
           └── Pod (0)

Deployment 管理 ReplicaSet,ReplicaSet 管理 Pod

Deployment vs 直接创建 Pod

方面直接创建 Pod使用 Deployment
自动重启
副本管理手动自动
滚动更新不支持支持
回滚不支持支持
扩缩容手动命令/自动

声明式 vs 命令式

命令式(告诉 K8s 做什么):
$ kubectl run nginx --image=nginx
$ kubectl scale deployment nginx --replicas=3

声明式(告诉 K8s 要什么):
apiVersion: apps/v1
kind: Deployment
spec:
  replicas: 3       # 我要 3 个副本
  template:
    spec:
      containers:
      - name: nginx
        image: nginx  # 用这个镜像

K8s 负责实现,你只描述期望状态

实践练习

练习 1:理解概念

回答以下问题:

  1. Deployment 和 Pod 的关系是什么?
  2. Deployment 如何实现自愈?
  3. 声明式和命令式的区别是什么?

练习 2:画图画架构

画出 Deployment → ReplicaSet → Pod 的层级关系

常见误解

1. Deployment 不直接管理 Pod

错误理解:Deployment 直接创建 Pod
正确理解:Deployment → ReplicaSet → Pod

Deployment 通过 ReplicaSet 间接管理 Pod
这样可以保留旧版本 ReplicaSet 用于回滚

2. Deployment 适合无状态应用

无状态应用:Web 服务、API 服务
有状态应用:数据库、消息队列

有状态应用应该用 StatefulSet

小结

要点说明
Deployment声明式管理无状态应用
核心职责副本管理、滚动更新、回滚、扩缩容、自愈
层级关系Deployment → ReplicaSet → Pod
声明式描述期望状态,K8s 负责实现
适用场景无状态应用(Web、API 等)

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「Deployment YAML 配置」 以巩固所学知识。