题目
解释 Kubernetes 中 Pod、Deployment 和 Service 的作用及关系
信息
- 类型:问答
- 难度:⭐
考点
Pod概念,Deployment作用,Service功能,核心组件关系
快速回答
Kubernetes 核心组件的作用及协作关系:
- Pod:最小调度单元,包含一个或多个容器
- Deployment:管理 Pod 副本和更新策略
- Service:为 Pod 提供稳定网络访问端点
三者关系:Deployment 创建并管理 Pod,Service 将流量路由到这些 Pod。
解析
1. 核心概念原理说明
Pod:
- Kubernetes 最小部署单元,包含 1 个或多个共享网络/存储的容器
- 生命周期短暂,故障后不会自动恢复
- 示例:Web 应用容器 + 日志收集 sidecar 容器
Deployment:
- 声明式管理 Pod 副本集(ReplicaSet)
- 核心功能:
- 滚动更新(Rolling Update)
- 副本伸缩(Scaling)
- 回滚(Rollback)
Service:
- 抽象层,为动态 Pod 提供固定访问端点
- 通过 Label Selector 关联 Pod
- 支持 ClusterIP(集群内访问)、NodePort(节点端口)、LoadBalancer(云负载均衡)等类型
2. 协作关系示意图
┌───────────┐ ┌───────────┐ ┌─────────┐
│ Deployment │──管理─▶│ Pod │──被代理─▶│ Service │
└───────────┘ └───────────┘ └─────────┘
│ 创建副本 ▲ │
▼ │ ▼
┌───────────┐ 通过Label匹配 用户访问
│ ReplicaSet│───────────────────────────────▶流量
└───────────┘3. 代码示例
Deployment 定义(nginx-deploy.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80Service 定义(nginx-svc.yaml):
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx # 匹配Deployment中的Pod标签
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP4. 最佳实践
- 始终通过 Deployment 管理 Pod,而非直接创建 Pod
- Service 的 selector 需与 Pod 标签严格匹配
- 使用 readinessProbe 确保流量只到达就绪的 Pod
- 生产环境推荐:Deployment + Service + Ingress 组合
5. 常见错误
- 错误1:直接创建裸 Pod → 导致无自愈能力
- 错误2:Service selector 与 Pod 标签不匹配 → 流量无法路由
- 错误3:忘记配置 containerPort → Service 无法发现 Pod
6. 扩展知识
- ReplicaSet:Deployment 实际通过 ReplicaSet 控制副本数量
- Label 机制:组件通过标签(如 app: nginx)建立关联
- Endpoint 对象:Service 自动创建 Endpoint 记录 Pod IP