下面以一个 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 里的 template 是 Pod 的蓝图,所有 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)确保管理范围。