Kubernetes入门:Pod与Service详解
·
Kubernetes入门:Pod与Service详解
1. Pod:最小部署单元
Pod是Kubernetes中最基础的调度单位,代表集群中运行的单个进程。
核心特性:
- 容器组:一个Pod包含1个或多个紧密耦合的容器(如应用容器+日志收集容器)
- 共享资源:同一Pod内容器共享:
- 网络命名空间(相同IP和端口空间)
- 存储卷(通过
volumeMounts挂载)
- 生命周期:Pod是瞬时对象,设计为"用完即弃",通过控制器(如Deployment)管理
典型场景:
# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
2. Service:网络抽象层
Service定义Pod组的访问策略,解决Pod动态IP带来的连接问题。
核心功能:
- 服务发现:通过标签选择器(Label Selector)关联后端Pod
- 负载均衡:自动将请求分发到健康Pod
- 稳定访问点:提供固定虚拟IP(ClusterIP)和DNS名称
服务类型对比:
| 类型 | 作用域 | 典型用例 |
|---|---|---|
| ClusterIP | 集群内部 | 微服务间通信 |
| NodePort | 节点级别 | 开发测试环境访问 |
| LoadBalancer | 云提供商 | 生产环境公网暴露 |
3. Pod与Service的协同关系
两者通过标签(Labels)建立连接:
$$ \text{Service} \xrightarrow{\text{Selector}} \text{Labeled Pods} $$
工作流程:
- Service定义标签选择器(如
app: web) - kube-proxy监听API Server,维护iptables/IPVS规则
- 请求到达Service VIP时,按规则转发到匹配Pod
示例联动:
# web-service.yaml
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web-server # 匹配Pod的标签
ports:
- protocol: TCP
port: 80 # Service端口
targetPort: 80 # Pod内容器端口
type: ClusterIP
4. 关键实践建议
- Pod设计原则:
- 单容器Pod:除非容器需紧密协作(如sidecar模式)
- 资源限制:始终设置
resources.requests/limits
- Service最佳实践:
- 使用Headless Service(
clusterIP: None)需直接Pod DNS的场景 - 会话保持:通过
sessionAffinity: ClientIP实现
- 使用Headless Service(
- 故障排查:
- 验证标签匹配:
kubectl get pods -l app=web-server - 检查端点:
kubectl describe endpoints web-service
- 验证标签匹配:
通过Pod封装应用实例,Service提供稳定访问入口,二者共同构成Kubernetes服务编排的基石。实际部署时建议结合Deployment管理Pod副本,确保高可用性。
更多推荐
所有评论(0)