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} $$

工作流程

  1. Service定义标签选择器(如app: web
  2. kube-proxy监听API Server,维护iptables/IPVS规则
  3. 请求到达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实现
  • 故障排查
    • 验证标签匹配:kubectl get pods -l app=web-server
    • 检查端点:kubectl describe endpoints web-service

通过Pod封装应用实例,Service提供稳定访问入口,二者共同构成Kubernetes服务编排的基石。实际部署时建议结合Deployment管理Pod副本,确保高可用性。

更多推荐