Deployment设计
- 微服务独立部署:
- 为每个微服务创建独立的Deployment。例如,对于用户服务,创建
user - service - deployment
,订单服务创建order - service - deployment
,支付服务创建payment - service - deployment
。
- 在Deployment的
spec.template.spec.containers
中指定微服务对应的容器镜像,如image: user - service - image:v1
,同时配置资源限制和请求,如resources: {requests: {cpu: "100m", memory: "256Mi"}, limits: {cpu: "200m", memory: "512Mi"}}
,以确保合理的资源分配。
- 副本管理:
- 根据微服务的负载情况和高可用性要求设置副本数。对于关键的用户服务,如果预计有较高的流量,可以初始设置
replicas: 3
。通过Horizontal Pod Autoscaler(HPA)动态调整副本数,例如根据CPU使用率,当CPU使用率超过80%时,自动增加副本数,低于50%时,减少副本数。
- 在Deployment的
spec.strategy
中设置更新策略,采用滚动更新strategy: {type: RollingUpdate, rollingUpdate: {maxSurge: 1, maxUnavailable: 0}}
,确保在更新过程中服务不中断,以维持高可用性。
Service设计
- 内部服务通信:
- 为每个微服务创建ClusterIP类型的Service。例如,为用户服务创建
user - service - cluster - ip - service
,订单服务创建order - service - cluster - ip - service
。ClusterIP类型的Service为微服务提供一个集群内部可访问的IP地址,使得其他微服务可以通过这个IP地址和端口进行通信。
- 在Service的
spec.selector
中指定对应的微服务的标签,如selector: {app: user - service}
,这样Service就能将流量正确转发到匹配标签的Pod上。ports
字段配置微服务的端口,如ports: [{name: http, port: 8080, targetPort: 8080}]
,port
是Service暴露的端口,targetPort
是Pod中容器实际监听的端口。
- 外部服务暴露:
- 对于需要暴露给外部的微服务(如网关服务等),可以创建NodePort类型或LoadBalancer类型的Service。如果使用NodePort类型,在Service的
spec.ports
中指定一个在节点上暴露的端口范围(默认30000 - 32767),例如ports: [{name: http, port: 80, targetPort: 8080, nodePort: 30080}]
,这样外部可以通过<节点IP>:30080
访问该微服务。
- 如果在支持LoadBalancer的云环境中,使用LoadBalancer类型的Service,Kubernetes会向云提供商申请一个外部负载均衡器,将流量转发到对应的微服务,如
spec.type: LoadBalancer
。
Ingress设计
- 入口管理:
- 部署一个Ingress Controller,如Nginx Ingress Controller。它负责监听Ingress资源的变化,并根据规则将外部流量转发到相应的Service。
- 创建Ingress资源对象,例如
app - ingress
。在Ingress的spec.rules
中定义路由规则,例如:
spec:
rules:
- host: app.example.com
http:
paths:
- path: /user
pathType: Prefix
backend:
service:
name: user - service - cluster - ip - service
port:
number: 8080
- path: /order
pathType: Prefix
backend:
service:
name: order - service - cluster - ip - service
port:
number: 8080
- 这样,当外部请求
app.example.com/user
时,Ingress会将请求转发到user - service - cluster - ip - service
对应的微服务,app.example.com/order
请求则转发到order - service - cluster - ip - service
对应的微服务,实现外部流量的正确路由和服务间的正确通信,同时通过多个副本和合理的负载均衡策略保证应用的高可用性和可扩展性。