一、容器化基础设施搭建
1.1 Kubernetes集群高可用部署
容器化监控体系的基础是稳定运行的K8s集群。推荐采用三节点控制平面架构,通过Keepalived+HAProxy实现API Server的高可用负载均衡。具体步骤如下:
- 节点初始化配置:禁用Swap分区,配置内核参数
net.bridge.bridge-nf-call-iptables=1 - 容器运行时选择:对比Containerd与CRI-O特性,推荐使用Containerd 1.6+版本
- 证书管理方案:采用cfssl工具生成集群证书,设置合理的证书有效期(建议2年)
- 节点加入流程:通过
kubeadm join命令动态扩展工作节点,支持滚动升级
典型配置示例:
# kubeadm-config.yamlapiVersion: kubeadm.k8s.io/v1beta3controlPlaneEndpoint: "api.k8s.local:6443"etcd:local:imageRepository: registry.k8s.ioimageTag: v3.5.4-0networking:podSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/12
1.2 核心资源调度机制
掌握Pod调度原理是优化集群性能的关键:
- 调度策略:默认使用
DefaultScheduler,可通过scheduler-framework扩展自定义策略 - 亲和性配置:
affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disktypeoperator: Invalues: ["ssd"]podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues: ["nginx"]
- 拓扑感知:通过
topologySpreadConstraints实现跨故障域分布
二、服务暴露与流量管理
2.1 Service与Ingress实践
- Service类型选择:
- ClusterIP:内部服务通信(默认)
- NodePort:开发测试环境快速暴露
- LoadBalancer:云环境集成(需底层支持)
- Ingress高级配置:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:annotations:nginx.ingress.kubernetes.io/rewrite-target: /spec:rules:- host: app.example.comhttp:paths:- path: /apipathType: Prefixbackend:service:name: backend-serviceport:number: 8080
2.2 Kube-Proxy模式对比
| 模式 | 优势 | 适用场景 |
|---|---|---|
| iptables | 稳定可靠 | 小规模集群 |
| IPVS | 高性能(O(1)复杂度) | 千节点以上大规模集群 |
| userspace | 兼容旧版本 | 特殊调试场景 |
三、数据持久化方案
3.1 存储卷类型选择
- 临时存储:emptyDir(适合无状态应用缓存)
- 持久存储:
- hostPath:单节点开发测试
- 本地卷:高性能场景(需手动管理)
- 网络存储:CSI驱动集成(推荐生产环境使用)
3.2 StorageClass动态供给
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: fast-ssdprovisioner: kubernetes.io/aws-ebsparameters:type: gp3fsType: ext4reclaimPolicy: Delete
四、Prometheus监控体系搭建
4.1 监控组件架构
[Exporters] → [Prometheus Server] → [AlertManager]↓[Grafana Dashboard]
4.2 核心组件配置
Prometheus配置示例:
global:scrape_interval: 15sevaluation_interval: 15sscrape_configs:- job_name: 'kubernetes-nodes'static_configs:- targets: ['10.0.0.1:9100', '10.0.0.2:9100']- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true
告警规则示例:
groups:- name: node-alertrules:- alert: NodeCPUUsageexpr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 80for: 5mlabels:severity: warningannotations:summary: "CPU使用率过高 {{ $labels.instance }}"description: "当前值: {{ $value }}%"
4.3 主流组件监控集成
| 组件 | 监控方式 | 关键指标 |
|---|---|---|
| MySQL | mysqld_exporter | QPS、连接数、慢查询 |
| Redis | redis_exporter | 命中率、内存使用、键数量 |
| Nginx | nginx-module-vts + exporter | 请求速率、状态码分布 |
| Java应用 | JMX Exporter | JVM内存、GC次数、线程数 |
五、生产环境优化建议
- 监控数据存储:配置远程存储(如对象存储)实现长期保留
- 高可用部署:采用Thanos或Cortex方案实现全局视图
- 告警收敛策略:设置合理的
group_wait和group_interval - 安全加固:启用TLS加密和RBAC权限控制
- 资源控制:为Prometheus Pod设置合理的requests/limits
常见问题解答
Q1:如何选择监控数据保留周期?
A:短期数据(7-30天)存储在本地,长期数据(1年以上)归档到对象存储,通过--storage.tsdb.retention.time参数配置
Q2:多集群监控方案如何选择?
A:中小规模推荐使用Prometheus Federation,大规模建议采用Thanos或Cortex架构
Q3:如何降低监控系统资源消耗?
A:优化采集间隔(建议15-60s),使用recording rules预计算常用指标,合理设置--web.max-connections参数
本实践方案经过多个生产环境验证,完整代码和配置模板可在配套资源包中获取。建议读者在测试环境先行验证,再逐步迁移到生产环境。