容量规划与管理
容量规划与管理
容量规划原则
- 预测需求:基于历史数据和业务预测
- 保留缓冲:预留20-30%的余量
- 定期评估:每月/季度审查容量
- 自动化伸缩:使用HPA和Cluster Autoscaler
容量指标
# 容量指标定义
capacity_metrics:
compute:
cpu_utilization: "目标<70%"
memory_utilization: "目标<80%"
storage:
disk_utilization: "目标<80%"
iops_utilization: "目标<70%"
network:
bandwidth_utilization: "目标<60%"
connection_count: "监控趋势"
预测分析
趋势预测
import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as np
# 历史数据
data = pd.DataFrame({
'month': range(1, 13),
'requests': [100000, 120000, 150000, 180000, 220000, 280000,
350000, 420000, 500000, 600000, 720000, 860000]
})
# 线性回归预测
X = data['month'](/notes/month)
y = data['requests']
model = LinearRegression()
model.fit(X, y)
# 预测未来3个月
future_months = np.array([[13], [14], [15]])
predictions = model.predict(future_months)
print(f"未来3个月预测: {predictions}")
季节性分析
from statsmodels.tsa.seasonal import seasonal_decompose
# 季节性分解
result = seasonal_decompose(data['requests'], model='additive', period=12)
trend = result.trend
seasonal = result.seasonal
residual = result.resid
Kubernetes容量规划
# 资源配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: production
spec:
hard:
requests.cpu: "20"
requests.memory: 40Gi
limits.cpu: "40"
limits.memory: 80Gi
pods: "100"
---
# HPA配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 3
maxReplicas: 50
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
---
# Cluster Autoscaler
apiVersion: apps/v1
kind: Deployment
metadata:
name: cluster-autoscaler
namespace: kube-system
spec:
template:
spec:
containers:
- name: cluster-autoscaler
command:
- ./cluster-autoscaler
- --scale-down-enabled=true
- --scale-down-delay-after-add=10m
- --scale-down-unneeded-time=10m
- --max-node-provision-time=15m
- --min-nodes=3
- --max-nodes=50
实践:容量规划脚本
#!/bin/bash
echo "=== 容量规划报告 ==="
# 1. 当前资源使用
echo ""
echo "--- 当前资源使用 ---"
kubectl top nodes
kubectl top pods --all-namespaces
# 2. 资源请求 vs 实际使用
echo ""
echo "--- 资源效率 ---"
kubectl get pods --all-namespaces -o json | jq -r '
.items[] |
{
namespace: .metadata.namespace,
pod: .metadata.name,
cpu_request: .spec.containers[].resources.requests.cpu,
cpu_limit: .spec.containers[].resources.limits.cpu
}'
# 3. 历史趋势
echo ""
echo "--- 资源趋势 ---"
kubectl top nodes --sort-by=cpu | head -10
# 4. 容量建议
echo ""
echo "--- 容量建议 ---"
echo "基于当前使用率,建议:"
echo "- 扩容节点池: +2节点"
echo "- 调整HPA: maxReplicas=50"
容量报告模板
# 容量规划报告
## 摘要
- 报告周期: 2024年1月
- 当前容量: 80%
- 预测容量需求: +30%
- 建议操作: 扩容
## 详细分析
### 计算资源
- CPU使用率: 65%
- 内存使用率: 72%
- 预计增长: 25%
### 存储资源
- 磁盘使用率: 58%
- 预计增长: 40%
### 网络资源
- 带宽使用率: 45%
- 预计增长: 30%
## 建议
1. 扩容节点池: +5节点
2. 增加存储: +500GB
3. 升级网络: 1Gbps → 10Gbps
最佳实践
- 建立基线
- 持续监控
- 定期审查
- 预测分析
- 自动化伸缩
总结
容量规划是确保系统稳定运行的关键。通过数据驱动的预测和自动化伸缩,可以有效管理资源容量。