使命的验收是"minikube 起本地集群,用 YAML 部署一个应用"。 但直接开集群容易变成"照抄 YAML 然后看它跑起来",什么也没学到。 先把三个核心对象各自的职责分清,后面每个 YAML 字段才有归属。
先确认工具在(不需要集群):
kubectl version --client
# Client Version: v1.34.1
# Kustomize Version: v5.7.1
任务一:画链路图(写进 10-项目/2027-掌握Kubernetes/K8s核心对象.md)。
按下面这条链,每一环写一句"它负责什么、它管着谁":
kubectl apply -f app.yaml
│
▼
Deployment ──创建并维持──▶ ReplicaSet ──创建并维持──▶ Pod(1..N)
(期望副本数/镜像) (副本数量) (真正跑容器)
▲
Service(标签选择器)───┘
(稳定入口:名字 + 虚拟 IP)
▲
Ingress / NodePort ───┘
(把流量从集群外引进来)
任务二:写出 YAML 骨架(先不 apply,集群还没起)。关键是把"哪个字段属于哪个对象"写对:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3 # ← 期望副本数:Deployment 管
selector:
matchLabels: { app: web } # ← 它按这个标签找自己管哪些 Pod
template: # ← 下面这段就是"Pod 模板"
metadata:
labels: { app: web } # ← 必须与上面的 selector 对上
spec:
containers:
- name: web
image: nginx:alpine
ports: [{ containerPort: 80 }]
---
apiVersion: v1
kind: Service
metadata:
name: web
spec:
selector: { app: web } # ← Service 按标签找到那 3 个 Pod
ports: [{ port: 80, targetPort: 80 }]
type: ClusterIP # ← 先只做集群内可达;对外暴露下一节再改
自检问题(先自己答,下一节验证):① 如果我把 Deployment 的 replicas 从 3 改成 5,会发生什么?
② 如果我删掉一个 Pod,谁会把它补回来?③ 如果 Pod 的标签与 Service 的 selector 不一致,会发生什么?
1. K8s 调度的最小单位是什么?
对。调度单位是 Pod:一个 Pod 里可以有多个容器,它们共享网络与存储命名空间。K8s 不直接调度"裸容器"。
2. 你删掉一个 Pod,是谁把它补回来?
对。Deployment → ReplicaSet 的职责就是"维持期望副本数" —— 现实与期望不符时,它创建新的 Pod。这正是"声明式"的含义。
3. Service 的 selector 与 Pod 的 labels 不一致会怎样?
对。Service 靠标签选择器找后端,匹配不上就是"零个端点" —— 请求会失败,但 K8s 不会替你纠正。这类问题要用 kubectl get endpoints 才能看到。