25 KiB
25 KiB
Kubernetes 集群优化执行计划
创建时间: 2025-12-30 执行周期: 4 周 预计总工时: 约 20 小时 目标: 从企业级良好 (⭐⭐⭐⭐) 提升到企业级卓越 (⭐⭐⭐⭐⭐)
📋 总览
优化范围
- P0 关键修复: 5 项 (必须立即完成)
- P1 高优先级: 4 项 (本周完成)
- P2 中优先级: 5 项 (2周内完成)
- P3 低优先级: 4 项 (4周内完成)
预期成果
- ✅ HPA 自动弹性伸缩恢复工作
- ✅ 关键服务高可用 (2-3副本)
- ✅ 资源利用率提升 2-3 倍
- ✅ 存储成本降低 30-50%
- ✅ 集群完整备份能力
- ✅ 自动化安全扫描
- ✅ 零信任网络架构
第 1 天 - P0 关键修复 (2 小时)
任务 1: 修复 HPA Metrics 收集问题 ⚠️ 【最高优先级】
问题: 所有 6 个 HPA 显示 cpu: <unknown>/70%,无法自动扩缩容
执行步骤:
# === 步骤 1: 诊断问题 ===
# 1.1 验证 metrics-server 工作正常
kubectl get deployment metrics-server -n kube-system
kubectl get apiservice v1beta1.metrics.k8s.io
kubectl logs -n kube-system deployment/metrics-server --tail=50
# 1.2 检查各个 HPA 目标
kubectl get hpa --all-namespaces -o wide
# 1.3 检查目标 Deployment 的 resource requests
echo "=== Checking Prometheus ==="
kubectl get deployment prometheus -n monitoring -o jsonpath='{.spec.template.spec.containers[0].resources}' | jq .
echo "=== Checking Grafana ==="
kubectl get deployment grafana -n monitoring -o jsonpath='{.spec.template.spec.containers[0].resources}' | jq .
echo "=== Checking ArgoCD Server ==="
kubectl get deployment argocd-server -n argocd -o jsonpath='{.spec.template.spec.containers[0].resources}' | jq .
echo "=== Checking Ingress NGINX ==="
kubectl get deployment ingress-nginx-controller -n infra -o jsonpath='{.spec.template.spec.containers[0].resources}' | jq .
echo "=== Checking Gitea Runner ==="
kubectl get deployment gitea-runner -n gitea-runner -o jsonpath='{.spec.template.spec.containers[0].resources}' | jq .
echo "=== Checking Stock Backend ==="
kubectl get deployment claude-stock-backend -n ljwx-stock -o jsonpath='{.spec.template.spec.containers[0].resources}' | jq .
# === 步骤 2: 修复问题 ===
# 2.1 为缺少 resource requests 的 Deployment 添加配置
# 创建补丁脚本
cat > /tmp/fix-hpa-resources.sh << 'SCRIPT'
#!/bin/bash
# 修复 Grafana
if ! kubectl get deployment grafana -n monitoring -o jsonpath='{.spec.template.spec.containers[0].resources.requests}' | grep -q "cpu"; then
echo "Adding resource requests to Grafana..."
kubectl patch deployment grafana -n monitoring --type='json' -p='[
{
"op": "add",
"path": "/spec/template/spec/containers/0/resources/requests",
"value": {"cpu": "100m", "memory": "128Mi"}
}
]'
fi
# 修复 ArgoCD Server
if ! kubectl get deployment argocd-server -n argocd -o jsonpath='{.spec.template.spec.containers[0].resources.requests}' | grep -q "cpu"; then
echo "Adding resource requests to ArgoCD Server..."
kubectl patch deployment argocd-server -n argocd --type='json' -p='[
{
"op": "add",
"path": "/spec/template/spec/containers/0/resources/requests",
"value": {"cpu": "100m", "memory": "128Mi"}
}
]'
fi
# 修复 Ingress NGINX
if ! kubectl get deployment ingress-nginx-controller -n infra -o jsonpath='{.spec.template.spec.containers[0].resources.requests}' | grep -q "cpu"; then
echo "Adding resource requests to Ingress NGINX..."
kubectl patch deployment ingress-nginx-controller -n infra --type='json' -p='[
{
"op": "add",
"path": "/spec/template/spec/containers/0/resources/requests",
"value": {"cpu": "100m", "memory": "128Mi"}
}
]'
fi
# 修复 Gitea Runner
if ! kubectl get deployment gitea-runner -n gitea-runner -o jsonpath='{.spec.template.spec.containers[0].resources.requests}' | grep -q "cpu"; then
echo "Adding resource requests to Gitea Runner..."
kubectl patch deployment gitea-runner -n gitea-runner --type='json' -p='[
{
"op": "add",
"path": "/spec/template/spec/containers/0/resources/requests",
"value": {"cpu": "100m", "memory": "128Mi"}
}
]'
fi
# 修复 Stock Backend
if ! kubectl get deployment claude-stock-backend -n ljwx-stock -o jsonpath='{.spec.template.spec.containers[0].resources.requests}' | grep -q "cpu"; then
echo "Adding resource requests to Stock Backend..."
kubectl patch deployment claude-stock-backend -n ljwx-stock --type='json' -p='[
{
"op": "add",
"path": "/spec/template/spec/containers/0/resources/requests",
"value": {"cpu": "100m", "memory": "128Mi"}
}
]'
fi
echo "All resource requests added!"
SCRIPT
chmod +x /tmp/fix-hpa-resources.sh
/tmp/fix-hpa-resources.sh
# === 步骤 3: 等待 Pod 重启并验证 ===
echo "Waiting for Pods to restart..."
sleep 60
# 验证 metrics 可以正常收集
kubectl top pods -n monitoring
kubectl top pods -n argocd
kubectl top pods -n infra
kubectl top pods -n gitea-runner
kubectl top pods -n ljwx-stock
# === 步骤 4: 验证 HPA 工作正常 ===
echo "Checking HPA status..."
kubectl get hpa --all-namespaces
# 应该看到具体的 CPU 百分比,而不是 <unknown>
# 例如: cpu: 15%/70%
验证标准:
- ✅
kubectl get hpa --all-namespaces显示具体的 CPU 百分比 - ✅
kubectl top pods可以正常显示资源使用 - ✅ HPA events 中没有错误信息
预计时间: 30 分钟
任务 2: 补全缺失的监控配置
执行步骤:
# === 步骤 1: 检查现有配置 ===
# 列出所有 ServiceMonitor
echo "=== ServiceMonitors (应该有 16 个) ==="
kubectl get servicemonitor --all-namespaces
kubectl get servicemonitor --all-namespaces --no-headers | wc -l
# 列出所有 PrometheusRule
echo "=== PrometheusRules (应该有 34 个) ==="
kubectl get prometheusrule --all-namespaces
kubectl get prometheusrule --all-namespaces --no-headers | wc -l
# === 步骤 2: 对比文档找出缺失项 ===
# 文档中声明的 16 个 ServiceMonitor:
# 1. prometheus
# 2. grafana
# 3. alertmanager
# 4. kube-state-metrics
# 5. node-exporter
# 6. mysql-exporter
# 7. postgres-exporter
# 8. redis-exporter
# 9. loki
# 10. tempo
# 11. otel-collector
# 12. ingress-nginx
# 13. argocd-metrics
# 14. argocd-server-metrics
# 15. argocd-repo-server-metrics
# 16. cert-manager
# 检查每个 ServiceMonitor 是否存在
for sm in prometheus grafana alertmanager kube-state-metrics node-exporter \
mysql-exporter postgres-exporter redis-exporter \
loki tempo otel-collector ingress-nginx \
argocd-metrics argocd-server-metrics argocd-repo-server-metrics cert-manager; do
if kubectl get servicemonitor $sm --all-namespaces 2>/dev/null; then
echo "✅ $sm exists"
else
echo "❌ $sm missing"
fi
done
# === 步骤 3: 创建缺失的 ServiceMonitor ===
# 假设缺少 cert-manager 的 ServiceMonitor
cat > /tmp/cert-manager-servicemonitor.yaml << 'EOF'
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: cert-manager
namespace: cert-manager
labels:
app: cert-manager
spec:
selector:
matchLabels:
app: cert-manager
endpoints:
- port: tcp-prometheus-servicemonitor
interval: 30s
path: /metrics
EOF
# 应用配置(如果确实缺失)
# kubectl apply -f /tmp/cert-manager-servicemonitor.yaml
# === 步骤 4: 检查并补全 PrometheusRule ===
# 类似地检查 PrometheusRule
kubectl get prometheusrule --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name
# 对比文档中的 34 条规则,找出缺失项
验证标准:
- ✅
kubectl get servicemonitor --all-namespaces | wc -l显示 16 - ✅
kubectl get prometheusrule --all-namespaces | wc -l显示 34 - ✅ Prometheus Targets 页面显示所有目标都是 UP 状态
预计时间: 15 分钟
第 1 天总结:
- ✅ HPA 恢复正常工作,可以自动扩缩容
- ✅ 监控覆盖 100% 完整
- ✅ 耗时: 约 45 分钟
第 2-3 天 - P1 高优先级优化 (4 小时)
任务 3: 部署 VPA (Vertical Pod Autoscaler)
目标: 自动优化 Pod 资源配置,减少 50-70% 资源浪费
执行步骤:
# === 步骤 1: 安装 VPA ===
cd /tmp
git clone https://github.com/kubernetes/autoscaler.git
cd autoscaler/vertical-pod-autoscaler
# 部署 VPA 组件
./hack/vpa-up.sh
# 验证部署
kubectl get deployment -n kube-system | grep vpa
# 应该看到:
# vpa-admission-controller
# vpa-recommender
# vpa-updater
# === 步骤 2: 为 Prometheus 创建 VPA ===
cat > /tmp/vpa-prometheus.yaml << 'EOF'
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: prometheus-vpa
namespace: monitoring
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: prometheus
updatePolicy:
updateMode: "Auto" # 自动更新资源配置
resourcePolicy:
containerPolicies:
- containerName: prometheus
minAllowed:
cpu: 100m
memory: 256Mi
maxAllowed:
cpu: 4
memory: 8Gi
controlledResources: ["cpu", "memory"]
EOF
kubectl apply -f /tmp/vpa-prometheus.yaml
# === 步骤 3: 为 Grafana 创建 VPA ===
cat > /tmp/vpa-grafana.yaml << 'EOF'
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: grafana-vpa
namespace: monitoring
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: grafana
updatePolicy:
updateMode: "Auto"
resourcePolicy:
containerPolicies:
- containerName: grafana
minAllowed:
cpu: 50m
memory: 128Mi
maxAllowed:
cpu: 2
memory: 4Gi
EOF
kubectl apply -f /tmp/vpa-grafana.yaml
# === 步骤 4: 为数据库创建 VPA (Initial 模式,避免频繁重启) ===
# MySQL VPA
cat > /tmp/vpa-mysql.yaml << 'EOF'
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: mysql-vpa
namespace: infra
spec:
targetRef:
apiVersion: apps/v1
kind: StatefulSet
name: mysql
updatePolicy:
updateMode: "Initial" # 仅在 Pod 创建时设置,避免重启
resourcePolicy:
containerPolicies:
- containerName: mysql
minAllowed:
cpu: 100m
memory: 512Mi
maxAllowed:
cpu: 4
memory: 8Gi
EOF
kubectl apply -f /tmp/vpa-mysql.yaml
# PostgreSQL VPA
cat > /tmp/vpa-postgres.yaml << 'EOF'
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: postgres-vpa
namespace: data
spec:
targetRef:
apiVersion: apps/v1
kind: StatefulSet
name: postgresql
updatePolicy:
updateMode: "Initial"
resourcePolicy:
containerPolicies:
- containerName: postgresql
minAllowed:
cpu: 100m
memory: 256Mi
maxAllowed:
cpu: 4
memory: 8Gi
EOF
kubectl apply -f /tmp/vpa-postgres.yaml
# Redis VPA
cat > /tmp/vpa-redis.yaml << 'EOF'
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: redis-vpa
namespace: data
spec:
targetRef:
apiVersion: apps/v1
kind: StatefulSet
name: redis-master
updatePolicy:
updateMode: "Initial"
resourcePolicy:
containerPolicies:
- containerName: redis
minAllowed:
cpu: 50m
memory: 128Mi
maxAllowed:
cpu: 2
memory: 4Gi
EOF
kubectl apply -f /tmp/vpa-redis.yaml
# === 步骤 5: 验证 VPA 工作 ===
# 查看 VPA 推荐
kubectl get vpa --all-namespaces
# 查看详细推荐
kubectl describe vpa prometheus-vpa -n monitoring
kubectl describe vpa grafana-vpa -n monitoring
# 等待 24 小时后查看推荐是否生效
验证标准:
- ✅ VPA 组件正常运行
- ✅ VPA 资源对象创建成功
- ✅ 24 小时后 Pod 资源配置自动优化
预计时间: 1 小时
任务 4: 优化 Prometheus 存储策略
执行步骤:
# === 步骤 1: 检查当前配置 ===
kubectl get deployment prometheus -n monitoring -o yaml | grep -A 5 "args:"
# === 步骤 2: 编辑 Prometheus 配置 ===
kubectl edit deployment prometheus -n monitoring
# 在 args 部分添加/修改:
# - --storage.tsdb.retention.time=7d
# - --storage.tsdb.retention.size=50GB
# - --storage.tsdb.wal-compression
# 完整示例:
# args:
# - --config.file=/etc/prometheus/prometheus.yml
# - --storage.tsdb.path=/prometheus
# - --storage.tsdb.retention.time=7d
# - --storage.tsdb.retention.size=50GB
# - --storage.tsdb.wal-compression
# - --web.enable-lifecycle
# === 步骤 3: 等待 Pod 重启 ===
kubectl rollout status deployment prometheus -n monitoring
# === 步骤 4: 验证配置 ===
# 访问 Prometheus UI
kubectl port-forward -n monitoring svc/prometheus 9090:9090 &
open http://localhost:9090/config
# 检查 Runtime & Build Information
# 确认保留期为 7d
# === 步骤 5: 监控存储使用 ===
# 检查 PVC 使用情况
kubectl get pvc -n monitoring
kubectl exec -n monitoring deployment/prometheus -- df -h /prometheus
验证标准:
- ✅ Prometheus 保留期设置为 7 天
- ✅ WAL 压缩已启用
- ✅ 存储占用减少
预计时间: 30 分钟
任务 5: 关键服务多副本部署
执行步骤:
# === 步骤 1: 扩展 Grafana 到 2 副本 ===
kubectl scale deployment grafana -n monitoring --replicas=2
# 验证
kubectl get pods -n monitoring -l app=grafana
kubectl get hpa grafana-hpa -n monitoring
# === 步骤 2: 扩展 ArgoCD Server 到 2 副本 ===
kubectl scale deployment argocd-server -n argocd --replicas=2
# 验证
kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server
kubectl get hpa argocd-server-hpa -n argocd
# === 步骤 3: 扩展 Ingress NGINX 到 2 副本 ===
kubectl scale deployment ingress-nginx-controller -n infra --replicas=2
# 验证
kubectl get pods -n infra -l app.kubernetes.io/name=ingress-nginx
kubectl get hpa ingress-nginx-hpa -n infra
# === 步骤 4: (可选) Redis 高可用部署 ===
# 使用 Bitnami Redis Helm Chart 部署 Redis Sentinel
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# 检查当前 Redis 配置
kubectl get all -n data -l app.kubernetes.io/name=redis
# 如果需要重新部署为高可用模式:
# helm upgrade redis bitnami/redis \
# --set architecture=replication \
# --set master.persistence.enabled=true \
# --set replica.replicaCount=2 \
# --set sentinel.enabled=true \
# -n data
# === 步骤 5: 验证多副本工作正常 ===
# 检查所有副本是否 Running
kubectl get pods -n monitoring -l app=grafana
kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server
kubectl get pods -n infra -l app.kubernetes.io/name=ingress-nginx
# 检查 Service 负载均衡
kubectl describe svc grafana -n monitoring
kubectl describe svc argocd-server -n argocd
kubectl describe svc ingress-nginx-controller -n infra
# 测试滚动更新(应该零停机)
kubectl set image deployment/grafana -n monitoring grafana=grafana/grafana:11.4.0 --record
kubectl rollout status deployment/grafana -n monitoring
验证标准:
- ✅ 关键服务都有 2 个以上副本
- ✅ 所有 Pod 都是 Running 状态
- ✅ Service 正确负载均衡到所有副本
- ✅ 滚动更新零停机
预计时间: 1.5 小时
第 2-3 天总结:
- ✅ VPA 自动优化资源配置
- ✅ Prometheus 存储优化,减少 30-50% 占用
- ✅ 关键服务高可用,支持零停机更新
- ✅ 耗时: 约 3 小时
第 4-7 天 - P2 中优先级优化 (6 小时)
任务 6: 部署 Velero 集群备份
执行步骤:
# === 步骤 1: 安装 Velero CLI ===
brew install velero
# === 步骤 2: 准备 MinIO 凭证 ===
cat > /tmp/credentials-velero << EOF
[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin123
EOF
# === 步骤 3: 在 MinIO 创建 bucket ===
# 访问 MinIO Console 创建 bucket: velero-backups
# 或使用 mc 命令:
# mc alias set minio http://minio.data.svc.cluster.local:9000 minioadmin minioadmin123
# mc mb minio/velero-backups
# === 步骤 4: 安装 Velero ===
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.9.0 \
--bucket velero-backups \
--secret-file /tmp/credentials-velero \
--use-volume-snapshots=false \
--backup-location-config \
region=minio,s3ForcePathStyle="true",s3Url=http://minio.data.svc.cluster.local:9000
# === 步骤 5: 验证部署 ===
kubectl get deployment -n velero
kubectl get pods -n velero
# === 步骤 6: 创建测试备份 ===
velero backup create test-backup \
--include-namespaces monitoring \
--wait
# 检查备份状态
velero backup describe test-backup
velero backup logs test-backup
# === 步骤 7: 创建定期备份计划 ===
# 每日全量备份 (2:00 AM)
velero schedule create daily-full-backup \
--schedule="0 2 * * *" \
--include-namespaces=data,monitoring,logging,tracing,argocd,infra,cert-manager \
--ttl 168h
# 每周归档备份 (Sunday 3:00 AM)
velero schedule create weekly-archive-backup \
--schedule="0 3 * * 0" \
--include-namespaces=data,monitoring,logging,tracing,argocd,infra,cert-manager \
--ttl 720h
# === 步骤 8: 测试恢复 ===
# 创建测试命名空间
kubectl create namespace test-restore
# 恢复备份到测试命名空间
velero restore create test-restore \
--from-backup test-backup \
--namespace-mappings monitoring:test-restore
# 验证恢复
kubectl get all -n test-restore
# 清理测试
kubectl delete namespace test-restore
验证标准:
- ✅ Velero 组件运行正常
- ✅ 测试备份成功
- ✅ 定期备份计划已创建
- ✅ 恢复测试成功
预计时间: 2 小时
任务 7: 部署 Trivy Operator 安全扫描
执行步骤:
# === 步骤 1: 添加 Helm repo ===
helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm repo update
# === 步骤 2: 安装 Trivy Operator ===
helm install trivy-operator aqua/trivy-operator \
--namespace trivy-system \
--create-namespace \
--set="trivy.ignoreUnfixed=true" \
--set="compliance.enable=true" \
--set="scanJobsConcurrentLimit=3"
# === 步骤 3: 验证部署 ===
kubectl get deployment -n trivy-system
kubectl get pods -n trivy-system
# === 步骤 4: 等待扫描完成 ===
# Trivy Operator 会自动扫描所有命名空间的镜像
# 等待 5-10 分钟后查看结果
sleep 300
# === 步骤 5: 查看漏洞报告 ===
# 查看所有漏洞报告
kubectl get vulnerabilityreports --all-namespaces
# 查看特定 Pod 的漏洞
kubectl get vulnerabilityreports -n monitoring
# 查看详细漏洞信息
kubectl describe vulnerabilityreports -n monitoring | grep -A 10 "CRITICAL\|HIGH"
# === 步骤 6: 查看配置审计报告 ===
kubectl get configauditreports --all-namespaces
# 查看详细配置问题
kubectl describe configauditreports -n monitoring
# === 步骤 7: 查看合规报告 ===
kubectl get clustercompliancereports
# === 步骤 8: 创建仪表板监控 ===
# 在 Grafana 中导入 Trivy Dashboard
# Dashboard ID: 16337
验证标准:
- ✅ Trivy Operator 正常运行
- ✅ 漏洞报告已生成
- ✅ 配置审计报告已生成
- ✅ 可以查看 CRITICAL/HIGH 漏洞
预计时间: 1 小时
任务 8: 增强 Network Policies
执行步骤:
# === 步骤 1: 创建默认拒绝策略 ===
cat > /tmp/default-deny-all.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
EOF
# 应用到所有关键命名空间
for ns in data monitoring logging tracing argocd infra; do
kubectl apply -f /tmp/default-deny-all.yaml -n $ns
done
# === 步骤 2: 允许 DNS 查询 ===
cat > /tmp/allow-dns.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
EOF
for ns in data monitoring logging tracing argocd infra; do
kubectl apply -f /tmp/allow-dns.yaml -n $ns
done
# === 步骤 3: 允许 Prometheus 采集指标 ===
cat > /tmp/allow-prometheus-scrape.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-prometheus-scrape
namespace: data
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: monitoring
- podSelector:
matchLabels:
app: prometheus
ports:
- protocol: TCP
port: 9104 # MySQL Exporter
- protocol: TCP
port: 9187 # Postgres Exporter
- protocol: TCP
port: 9121 # Redis Exporter
EOF
kubectl apply -f /tmp/allow-prometheus-scrape.yaml
# === 步骤 4: 允许 Loki 收集日志 ===
cat > /tmp/allow-loki.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-loki
namespace: logging
spec:
podSelector:
matchLabels:
app: loki
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector: {}
- podSelector:
matchLabels:
app: promtail
ports:
- protocol: TCP
port: 3100
EOF
kubectl apply -f /tmp/allow-loki.yaml
# === 步骤 5: 允许 Ingress 流量 ===
cat > /tmp/allow-ingress.yaml << 'EOF'
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: infra
- podSelector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
EOF
# 应用到需要暴露的命名空间
for ns in monitoring argocd; do
kubectl apply -f /tmp/allow-ingress.yaml -n $ns
done
# === 步骤 6: 验证 Network Policies ===
kubectl get networkpolicy --all-namespaces
# 测试连接性
kubectl run test-curl --image=curlimages/curl -i --rm --restart=Never -- \
curl -m 5 http://grafana.monitoring.svc.cluster.local:3000
# 如果被拒绝,说明 Network Policy 工作正常
验证标准:
- ✅ 每个关键命名空间都有默认拒绝策略
- ✅ DNS 查询正常工作
- ✅ Prometheus 可以采集指标
- ✅ Loki 可以收集日志
- ✅ Ingress 流量正常
预计时间: 2-3 小时
第 4-7 天总结:
- ✅ 集群完整备份能力
- ✅ 自动化安全扫描
- ✅ 零信任网络架构
- ✅ 耗时: 约 5-6 小时
第 8-14 天 - P3 低优先级优化 (6.5 小时)
任务 9: 优化资源配额
# 基于实际使用调整配额
# data: 550m → 5 cores
# monitoring: 1150m → 5 cores
# logging: 150m → 2 cores
kubectl edit resourcequota data-quota -n data
kubectl edit resourcequota monitoring-quota -n monitoring
kubectl edit resourcequota logging-quota -n logging
预计时间: 30 分钟
任务 10: 部署 Thanos 长期存储
# 安装 Thanos 实现 Prometheus 长期存储
helm install thanos bitnami/thanos \
--set query.enabled=true \
--set compactor.enabled=true \
--set storegateway.enabled=true \
-n monitoring
预计时间: 3 小时
任务 11: 配置 AlertManager 通知
# 配置钉钉 Webhook 通知
kubectl edit configmap alertmanager-config -n monitoring
# 部署 dingtalk-webhook-proxy
预计时间: 1 小时
任务 12: 压力测试验证
# 创建负载生成器测试 HPA
kubectl create deployment load-generator \
--image=busybox \
-- /bin/sh -c "while true; do wget -q -O- http://grafana.monitoring.svc.cluster.local; done"
# 观察 HPA 自动扩容
watch kubectl get hpa -n monitoring
预计时间: 1 小时
📊 进度跟踪
完成情况
| 阶段 | 任务数 | 完成 | 进度 |
|---|---|---|---|
| 第 1 天 (P0) | 2 | 0 | ⬜⬜⬜⬜⬜ 0% |
| 第 2-3 天 (P1) | 3 | 0 | ⬜⬜⬜⬜⬜ 0% |
| 第 4-7 天 (P2) | 3 | 0 | ⬜⬜⬜⬜⬜ 0% |
| 第 8-14 天 (P3) | 4 | 0 | ⬜⬜⬜⬜⬜ 0% |
里程碑
- 里程碑 1: P0 完成 - HPA 正常工作
- 里程碑 2: P1 完成 - VPA + 多副本 + 存储优化
- 里程碑 3: P2 完成 - Velero + Trivy + Network Policies
- 里程碑 4: P3 完成 - 所有优化完成
🎯 成功标准
技术指标
- ✅ HPA: 6/6 正常工作(显示具体百分比)
- ✅ 监控覆盖: 16 ServiceMonitor, 34 PrometheusRule
- ✅ VPA: 5+ VPA 自动优化资源
- ✅ 高可用: 关键服务 2-3 副本
- ✅ 备份: 每日自动备份
- ✅ 安全: Trivy 自动扫描
- ✅ 网络: 零信任架构
性能指标
- ✅ 资源利用率: CPU 5-10%, Memory 40-50%
- ✅ 存储优化: 减少 30-50%
- ✅ 服务可用性: 99.9%+
📝 注意事项
执行前检查
- 备份当前集群配置
- 确认有足够的资源空间
- 准备回滚计划
- 通知相关团队
风险管理
- 低风险: P0, P3 优化(只读操作或增强功能)
- 中风险: P1 优化(多副本部署,可能短暂重启)
- 中高风险: P2 Network Policies(可能影响连接性)
回滚计划
每个任务执行前:
# 备份当前配置
kubectl get all -n <namespace> -o yaml > backup-<namespace>-$(date +%Y%m%d).yaml
📚 相关文档
- 优化分析报告: K8S-OPTIMIZATION-ANALYSIS.md
- 企业级实施报告: ENTERPRISE-K8S-IMPLEMENTATION-REPORT.md
- 可观测性指南: OBSERVABILITY-GUIDE.md
- 部署指南: README.md
计划创建: 2025-12-30 执行开始: 待定 预计完成: 4 周后 负责人: DevOps Team