伸缩性架构 学习笔记(第 5 部分)
5.2 核心编排能力
1. 服务发现
javascript
// Kubernetes 服务发现机制
const serviceDiscovery = {
// 1. DNS 服务发现
dns: {
mechanism: 'CoreDNS 自动解析',
format: '<service-name>.<namespace>.svc.cluster.local',
example: 'frontend-service.default.svc.cluster.local'
},
// 2. 环境变量发现
envVariables: {
mechanism: 'Kubernetes 自动注入',
example: {
FRONTEND_SERVICE_SERVICE_HOST: '10.96.0.1',
FRONTEND_SERVICE_SERVICE_PORT: '80'
}
},
// 3. Service 对象
service: {
types: ['ClusterIP', 'NodePort', 'LoadBalancer', 'ExternalName'],
selector: '通过标签选择器关联 Pod'
}
}2. 负载均衡
yaml
# Kubernetes Service 负载均衡配置
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector:
app: backend
ports:
- port: 8080
targetPort: 8080
# 负载均衡策略
sessionAffinity: None # 或 ClientIP
# 外部流量策略
externalTrafficPolicy: Local # 或 Cluster3. 故障恢复
yaml
# 健康检查配置
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 3
startupProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 0
periodSeconds: 10
failureThreshold: 304. 配置管理
yaml
# ConfigMap 配置
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "postgresql://db:5432/mydb"
redis_url: "redis://redis:6379"
log_level: "info"
---
# Secret 敏感配置
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
database_password: cGFzc3dvcmQxMjM= # base64 编码
api_key: YWJjZGVmZ2hpamtsbW5vcA==
---
# 在 Pod 中使用配置
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app
image: my-app:v1
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: app-secret5. 存储管理
yaml
# PersistentVolume 持久化存储
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-storage
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: standard
hostPath:
path: /mnt/data
---
# PersistentVolumeClaim 存储声明
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
---
# 在 Pod 中挂载存储
apiVersion: v1
kind: Pod
metadata:
name: app-with-storage
spec:
containers:
- name: app
image: my-app:v1
volumeMounts:
- mountPath: /app/data
name: data-volume
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: pvc-storage六、伸缩性架构最佳实践
6.1 伸缩策略设计
javascript
// 伸缩策略配置
const scalingStrategy = {
// 1. 预测性伸缩
predictive: {
method: '基于历史数据预测',
scenarios: ['定时任务', '促销活动', '节假日'],
implementation: 'CronJob + HPA'
},
// 2. 响应式伸缩
reactive: {
method: '基于实时指标伸缩',
metrics: ['CPU', '内存', 'QPS', '自定义指标'],
implementation: 'HPA + VPA'
},
// 3. 混合伸缩
hybrid: {
method: '预测 + 响应式结合',
advantage: '应对突发流量,减少延迟',
implementation: 'KEDA + HPA'
}
}