三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Kubernetes自动化运维与监控告警:构建智能化运维体系

Kubernetes自动化运维与监控告警:构建智能化运维体系

Kubernetes自动化运维与监控告警:构建智能化运维体系

一、自动化运维概述

自动化运维是指通过自动化工具和流程来管理Kubernetes集群的日常运维工作,包括监控、告警、故障处理和资源管理。

1.1 自动化运维组件

组件功能工具
监控收集指标数据Prometheus
告警发送告警通知Alertmanager
自动化自动处理任务KEDA、CronJob
日志收集和分析日志Loki

1.2 自动化运维架构

监控数据 │ ┌─────────────────┼─────────────────┐ │ │ │ ▼ ▼ ▼ Prometheus Loki Alertmanager │ │ │ └─────────────────┼─────────────────┘ │ ┌─────▼─────┐ │ Grafana │ └───────────┘

二、监控配置

2.1 Prometheus部署

apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus namespace: monitoring spec: replicas: 2 resources: requests: memory: 4Gi serviceAccountName: prometheus serviceMonitorSelector: matchLabels: app: prometheus alerting: alertmanagers: - namespace: monitoring name: alertmanager port: web

2.2 ServiceMonitor配置

apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: node-exporter namespace: monitoring spec: selector: matchLabels: app: node-exporter endpoints: - port: metrics interval: 30s

三、告警配置

3.1 Alertmanager配置

apiVersion: monitoring.coreos.com/v1 kind: Alertmanager metadata: name: alertmanager namespace: monitoring spec: replicas: 2 serviceAccountName: alertmanager config: global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'webhook' receivers: - name: 'webhook' webhook_configs: - url: 'http://alert-webhook:8080/webhook'

3.2 告警规则

apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: cluster-alerts namespace: monitoring spec: groups: - name: node.rules rules: - alert: NodeHighCPU expr: avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.2 for: 10m labels: severity: critical annotations: summary: "Node {{ $labels.instance }} CPU usage is high" - alert: NodeHighMemory expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.2 for: 10m labels: severity: critical annotations: summary: "Node {{ $labels.instance }} memory usage is high"

四、自动化任务配置

4.1 CronJob配置

apiVersion: batch/v1 kind: CronJob metadata: name: daily-cleanup namespace: kube-system spec: schedule: "0 2 * * *" jobTemplate: spec: template: spec: containers: - name: cleanup image: busybox:latest command: - /bin/sh - -c - "kubectl delete pods --field-selector=status.phase=Succeeded -A" restartPolicy: OnFailure

4.2 KEDA配置

apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: kafka-scaler namespace: default spec: scaleTargetRef: name: kafka-consumer minReplicaCount: 1 maxReplicaCount: 10 triggers: - type: kafka metadata: bootstrapServers: kafka:9092 topic: order-events consumerGroup: order-consumer-group lagThreshold: "50"

五、日志管理

5.1 Loki配置

apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: loki namespace: monitoring spec: size: 1x.small storage: schemas: - version: v13 effectiveDate: "2024-01-01" secret: name: loki-storage

5.2 Fluentd配置

apiVersion: v1 kind: ConfigMap metadata: name: fluentd-config namespace: logging data: fluent.conf: | <source> @type tail path /var/log/containers/*.log pos_file /var/log/fluentd-containers.log.pos tag kubernetes.* read_from_head true </source> <filter kubernetes.**> @type kubernetes_metadata </filter> <match kubernetes.**> @type loki url http://loki:3100 </match>

六、可视化配置

6.1 Grafana部署

apiVersion: grafana.integreatly.org/v1beta1 kind: Grafana metadata: name: grafana namespace: monitoring spec: config: log: mode: "console" datasources: - name: Prometheus type: prometheus access: proxy url: http://prometheus:9090 - name: Loki type: loki access: proxy url: http://loki:3100

6.2 自定义仪表盘

{ "title": "Cluster Overview", "panels": [ { "type": "graph", "title": "CPU Usage", "targets": [ { "expr": "sum(node_cpu_seconds_total{mode!=\"idle\"})", "legendFormat": "CPU" } ] }, { "type": "graph", "title": "Memory Usage", "targets": [ { "expr": "sum(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)", "legendFormat": "Memory" } ] } ] }

七、自动化运维最佳实践

7.1 自动扩缩容

apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: app-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-app minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70

7.2 自动清理

apiVersion: batch/v1 kind: CronJob metadata: name: cleanup-job spec: schedule: "0 0 * * *" jobTemplate: spec: template: spec: containers: - name: cleanup image: busybox:latest command: - /bin/sh - -c - "find /tmp -type f -mtime +7 -delete" restartPolicy: OnFailure

八、总结

自动化运维可以实现:

  1. 自动化监控:实时监控集群状态
  2. 智能告警:及时发现和通知问题
  3. 自动扩缩容:根据负载自动调整资源
  4. 自动清理:定期清理无用资源

建议建立完善的自动化运维体系,提高运维效率和集群可靠性。


参考资料

  • Prometheus文档
  • Loki文档
  • KEDA文档
← 返回列表