
1) 【一句话结论】在Kubernetes中部署高可用服务,需通过Deployment管理无状态服务实例,结合Service实现服务发现,配置Liveness/Readiness探针保障健康,并使用HPA根据CPU等指标自动扩缩容,确保服务故障时能快速恢复且负载均衡。
2) 【原理/概念讲解】
服务发现:Kubernetes通过Service(如ClusterIP类型)为Pod提供稳定的网络标识,客户端通过Service名称解析到后端Pod的ClusterIP和端口,实现服务间通信(类比:公司的“部门电话总机”,客户端通过总机号码找到所有员工的电话,无需关心具体办公室)。
健康检查:通过Liveness和Readiness探针监控Pod状态。Liveness探针用于检测Pod是否应被重启(如内部死循环),若失败则K8s重启Pod;Readiness探针用于检测Pod是否准备好接收流量(如初始化完成),若失败则从Service端点移除(类比:“健康打卡”,Liveness是“是否需要叫醒(重启)”,Readiness是“是否可以接电话(接收流量)”)。
自动扩缩容(HPA):基于指标(如CPU使用率)自动调整Deployment的副本数,负载增加时扩容提升吞吐量,负载减少时缩容节省资源(类比:“自动招聘”,根据业务繁忙程度增减员工数量)。
无状态服务:不依赖共享状态或配置,所有实例可独立运行,通过Deployment管理多个副本,一个实例故障不影响其他实例,客户端通过Service负载均衡到健康实例。
3) 【对比与适用场景】
健康检查探针对比:
| 探针类型 | 定义 | 特性 | 使用场景 |
|---|---|---|---|
| Liveness | 检测Pod是否应被重启 | 若失败,K8s重启Pod | 防止Pod因内部错误(如死循环)导致服务不可用 |
| Readiness | 检测Pod是否准备好接收流量 | 若失败,从Service端点移除 | 确保流量只发送到健康实例,避免发送到未初始化完成的服务实例 |
HPA与手动扩容对比:
| 方式 | 定义 | 特性 | 适用场景 |
|---|---|---|---|
| 手动扩容 | 管理员手动调整Deployment副本数 | 需人工干预,响应慢 | 负载变化慢,或需要人工决策的场景 |
| HPA | 自动根据指标(如CPU)调整副本数 | 自动化,响应快,节省资源 | 负载波动大,需要快速适应的场景(如电商促销、直播) |
4) 【示例】(以Nginx Web服务为例,YAML配置):
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:1.21
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP # 内部服务发现,或NodePort/LoadBalancer(外部访问)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70 # CPU使用率超过70%时扩容
5) 【面试口播版答案】
在Kubernetes中部署高可用服务,核心是通过Deployment管理无状态服务实例,结合Service实现服务发现,配置Liveness/Readiness探针保障健康,并使用HPA根据CPU等指标自动扩缩容。具体来说,首先创建一个Deployment,定义多个Pod副本(如3个),每个Pod包含Liveness和Readiness探针(通过HTTP请求检查/healthz和/ready路径),确保只有健康实例接收流量。然后创建Service(如ClusterIP类型),客户端通过Service名称访问后端Pod。接着配置HPA,根据CPU使用率自动调整Deployment的副本数,当负载增加时增加副本提升吞吐量,负载减少时减少副本节省资源。这样,即使某个Pod故障,其他副本仍能提供服务,且负载会自动均衡,实现高可用。
6) 【追问清单】
7) 【常见坑/雷区】