
在Kubernetes中,通过合理配置资源请求与限制(控制资源分配)、设置Pod优先级与抢占(优化调度优先级)、部署健康检查(liveness/readiness)实现自愈、以及配置PodDisruptionBudget(保障高可用)等机制,可有效优化资源调度效率与故障恢复能力,确保大数据平台在云原生环境下的稳定运行。
老师解释:
| 概念 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 资源请求(Requests) | 容器声明所需的最小资源 | 调度时必须满足 | 确保Pod被调度到有足够资源的节点 | 过低会导致调度失败 |
| 资源限制(Limits) | 容器可使用的最大资源 | 防止资源耗尽,触发OOMKILL | 限制容器资源使用上限 | 过高可能导致资源浪费 |
| Liveness探针 | 检查容器是否存活 | 失败则重启容器 | 防止容器僵死 | 频率不宜过高 |
| Readiness探针 | 检查容器是否准备好服务 | 未准备好的Pod不加入服务 | 确保服务可用性 | 频率不宜过高 |
假设部署一个大数据处理Pod,配置资源请求/限制、健康检查及PDB:
apiVersion: v1
kind: Pod
metadata:
name: bigdata-pod
spec:
containers:
- name: bigdata-container
image: bigdata-image:1.0
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "1Gi"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
restartPolicy: Always
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bigdata-deployment
spec:
replicas: 3
selector:
matchLabels:
app: bigdata
template:
metadata:
labels:
app: bigdata
spec:
containers:
- name: bigdata-container
image: bigdata-image:1.0
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "1Gi"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: bigdata-service
spec:
selector:
app: bigdata
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: bigdata-pdb
spec:
selector:
matchLabels:
app: bigdata
minAvailable: 2
解释:Deployment有3个副本,每个Pod的容器设置了资源请求(100m CPU、256Mi内存)和限制(500m CPU、1Gi内存),通过liveness和readiness探针确保容器健康,PodDisruptionBudget保证至少2个副本运行,实现故障自愈。
在云原生环境中部署大数据平台,优化资源调度和故障恢复的关键在于合理配置资源配额、健康检查和自愈机制。具体来说,通过为每个容器设置资源请求(确保调度时获得足够资源)和限制(防止资源耗尽),可以优化资源调度效率;利用Pod优先级与抢占机制,为关键任务(如数据同步)设置高优先级,确保资源优先分配;部署liveness和readiness健康检查,当容器异常时自动重启或从服务中移除,实现自愈;同时配置PodDisruptionBudget,限制Pod被驱逐的数量,保障高可用。例如,为大数据处理Pod设置资源请求和限制,结合健康检查,当节点故障时,Pod自动重启并重新加入服务,确保平台稳定运行。