在云原生架构中,流量治理组件 Sentinel 的部署方式直接影响系统的稳定性和运维效率。Kubernetes 环境下主要有两种部署模式:Sidecar 模式和独立组件模式。这两种模式各有特点,适用于不同的业务场景。
Sentinel 是阿里巴巴开源的分布式系统流量治理组件,主要提供流量控制、熔断降级、系统保护等功能。在 Kubernetes 中部署时,需要考虑以下几个关键因素:
| 特性 | Sidecar 模式 | 独立组件模式 |
|---|---|---|
| 部署位置 | 与应用同Pod | 独立Pod |
| 资源消耗 | 较高 | 较低 |
| 管理复杂度 | 较高 | 较低 |
| 网络延迟 | 低 | 中高 |
| 故障隔离 | 好 | 差 |
| 适用场景 | 关键业务 | 普通业务 |
Sidecar 模式下,每个应用 Pod 都包含两个容器:
两者通过 localhost 通信,架构示意图如下:
code复制应用容器 → localhost → Sentinel容器
↑
↓
规则配置
推荐使用官方镜像定制:
dockerfile复制FROM openjdk:11-jre
COPY sentinel-dashboard-1.8.6.jar /app/
EXPOSE 8080 8719
ENTRYPOINT ["java","-jar","/app/sentinel-dashboard-1.8.6.jar"]
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
replicas: 3
template:
spec:
containers:
- name: app
image: order-service:1.0
ports:
- containerPort: 8080
- name: sentinel
image: sentinel-sidecar:1.8.6
ports:
- containerPort: 8719
resources:
limits:
memory: 256Mi
cpu: 200m
Spring Boot 配置示例:
properties复制# application.properties
spring.cloud.sentinel.transport.dashboard=localhost:8080
spring.cloud.sentinel.eager=true
注意:Sidecar 容器内存建议不低于 128MB,否则可能引发 OOM
独立组件模式采用中心化架构:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: sentinel-dashboard
spec:
replicas: 2
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
spec:
containers:
- name: dashboard
image: sentinel-dashboard:1.8.6
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /health
port: 8080
yaml复制apiVersion: v1
kind: Service
metadata:
name: sentinel
spec:
selector:
app: sentinel-dashboard
ports:
- port: 8080
targetPort: 8080
type: ClusterIP
对于大型系统,可以采用混合模式:
排查步骤:
优化方向:
关键监控指标:
Prometheus 配置示例:
yaml复制- job_name: 'sentinel'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['sentinel:8080']
某电商平台部署经验:
关键收获:
在实际生产环境中,我们验证了 Sidecar 模式在高并发场景下的稳定性。当单个商品页面的 QPS 突破 8000 时,Sidecar 模式的响应时间比独立组件模式低 15-20ms,这对于秒杀场景至关重要。不过这种优势的代价是每个 Pod 需要额外 200MB 内存开销,团队需要根据业务特点权衡选择。