Kubernetes Deployment 字段详解

下面以一个 Nginx Deployment 的配置为例,逐行解释各字段的作用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3   # 副本数
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx   # 换成你自己的镜像
          ports:
            - containerPort: 80
          resources:                # 可选,限制资源
            limits:
              cpu: "500m"
              memory: "256Mi"
            requests:
              cpu: "250m"
              memory: "128Mi"

1. 基本信息

apiVersion: apps/v1

  • 表示该配置文件使用 Kubernetes API 的 apps/v1 版本

  • apps/v1 是管理 Deployment、StatefulSet、DaemonSet 等应用型资源的稳定版本。

  • 作用:告诉 API Server 按照哪套规则解析这个对象。

kind: Deployment

  • 定义该对象的类型。

  • Deployment 是 Kubernetes 用来管理 Pod 副本数和滚动升级的控制器。

  • 作用:保证指定数量的 Pod 始终运行,并支持无中断更新。

2. 元数据(metadata)

metadata.name: nginx-deployment

  • Deployment 的名字。

  • 在同一个 namespace 中必须唯一。

  • 作用:便于用户和系统标识资源。

metadata.labels:

labels:
  app: nginx
  • 给这个 Deployment 打上标签 app=nginx

  • 作用:标签用来分组和筛选资源,后续的 selector 会用到。

3. 规范(spec)

spec.replicas: 3

  • 指定要运行的 Pod 副本数(这里是 3 个)。

  • 作用:Deployment 会保证始终有 3 个 Pod 存活,如果有 Pod 崩掉,会自动拉起新的。

spec.selector

selector:
  matchLabels:
    app: nginx
  • 定义 Pod 的选择器。

  • matchLabels: app=nginx 表示 Deployment 只管理带有 app=nginx 标签的 Pod。

  • 作用:Deployment 根据标签确定哪些 Pod 属于自己管辖范围。

4. Pod 模板(template)

Deployment 里的 templatePod 的蓝图,所有 Pod 都会按照这个模板生成。

template.metadata.labels

labels:
  app: nginx
  • 给 Pod 打上标签。

  • 必须和上面的 selector.matchLabels 匹配,否则 Deployment 找不到 Pod。

template.spec.containers

containers:
  - name: nginx
    image: nginx
    ports:
      - containerPort: 80

containers

  • 定义 Pod 中运行的容器(可以有多个,这里只有一个 Nginx 容器)。

name: nginx

  • 容器的名字。

  • 在 Pod 内必须唯一。

image: nginx

  • 使用的镜像(这里是官方的 nginx)。

  • 作用:决定容器启动时运行什么应用。

  • 可以换成你自己的镜像,例如:myrepo/myapp:1.0

ports.containerPort: 80

  • 声明容器开放的端口(这里是 80)。

  • 作用:让 Service 或其他容器知道这个容器对外提供服务的端口。

5. 资源限制(resources)

resources:
  limits:
    cpu: "500m"
    memory: "256Mi"
  requests:
    cpu: "250m"
    memory: "128Mi"
  • requests:最小资源需求。调度器会保证 Pod 至少能拿到这些资源。

    • CPU:250m = 0.25 核心

    • 内存:128Mi = 128 MiB

  • limits:最大资源限制。容器不能超过这个值。

    • CPU:500m = 0.5 核心

    • 内存:256Mi = 256 MiB

作用:防止某个容器无限制占用节点资源,保证集群资源公平分配。

📌 总结

  • apiVersion / kind → 定义对象的类型和版本

  • metadata → 身份信息(名字、标签)

  • spec → 期望状态(多少副本、如何选择 Pod、Pod 模板)

  • template → Pod 的蓝图

  • resources → 控制容器的资源使用

Deployment 的核心逻辑:
👉 照着 Pod 模板(template),保持一定数量(replicas)的 Pod,标签匹配(selector)确保管理范围