温馨提示×

如何监控Debian上的Kubernetes集群

小樊
35
2025-12-17 02:24:46
栏目: 智能运维

在 Debian 上监控 Kubernetes 的实用方案

一 快速巡检与日志排查

  • 使用 kubectl 查看集群与资源状态:
    • 查看集群连通性:kubectl cluster-info
    • 查看节点健康:kubectl get nodes
    • 查看全命名空间 Pod:kubectl get pods --all-namespaces
    • 查看事件:kubectl get events --all-namespaces
  • 查看控制面与节点组件日志(systemd):
    • kubelet:sudo journalctl -u kubelet -f
    • kube-proxy:sudo journalctl -u kube-proxy -f
  • 节点资源与进程快速检查(在节点上执行):
    • 资源:top / htop、free -m、df -h、iostat -x 1
    • 网络:ss -tulpen | grep :6443conntrack -S
  • 可视化辅助:
    • Kubernetes Dashboard:kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml,本地代理访问:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

二 指标监控与可视化推荐

  • 核心组件与数据流

    • 采集侧:Node Exporter(节点级指标)、kube-state-metrics(资源对象状态)、cAdvisor(容器资源,通常内置在 Kubelet)、应用自定义 Exporter。
    • 存储与查询:Prometheus 负责拉取与存储,使用 PromQL 查询。
    • 可视化与告警:Grafana 做面板展示;Alertmanager 负责分组、抑制与路由告警。
    • 交付方式:使用 Prometheus Operator / kube-prometheus-stack 以 CRD 方式声明式管理抓取目标(ServiceMonitor/PodMonitor)。
  • 快速部署步骤(Helm)

    1. 准备命名空间与工具
      • kubectl create namespace monitoring
      • 安装 Helm(如未安装)
    2. 添加仓库并安装 kube-prometheus-stack
      • helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
      • helm repo update
      • helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace
    3. 外部访问(按需)
      • 查看服务:kubectl get svc -n monitoring
      • GrafanaPrometheus Service 类型改为 NodePort/LoadBalancer,或使用 Ingress
    4. Grafana 初始化
      • 登录默认账号(常见为 admin/admin),添加数据源 Prometheus(地址如 http://prometheus-server.monitoring.svc.cluster.local:9090
      • 导入面板:推荐 Kubernetes / Compute Resources / Cluster(模板 ID 8588)等现成仪表板。

三 关键告警规则示例

  • 节点资源压力
    • CPUThrottlingHigh:sum by (container, pod, namespace) (rate(container_cpu_cfs_throttled_seconds_total{container!=“”, container!=“POD”}[5m])) / sum by (container, pod, namespace) (rate(container_cpu_usage_seconds_total{container!=“”, container!=“POD”}[5m])) > 0.25
    • NodeMemoryPressure:kube_node_status_condition{condition=“MemoryPressure”,status=“true”} == 1
  • 工作负载稳定性
    • PodCrashLooping:rate(kube_pod_container_status_restarts_total[15m]) > 0
    • PodNotReady:sum by (namespace, pod) (kube_pod_status_ready{condition=“true”} == 0) > 0
  • 控制面可用性
    • APIServerDown:up{job=“apiserver”} == 0
    • SchedulerDown:up{job=“kube-scheduler”} == 0
    • ControllerManagerDown:up{job=“kube-controller-manager”} == 0
  • 建议将上述规则写入 PrometheusRule CR,并按团队渠道配置 Alertmanager 路由与通知(如 Slack、企业微信、邮件)。

四 日志与追踪的补充方案

  • 集中式日志
    • 方案:EFK(Elasticsearch + Fluent Bit/Fluentd + Kibana)Loki + Promtail + Grafana
    • 实践:Fluent Bit 以 DaemonSet 部署采集节点与容器日志,写入 ES 或 Loki;在 Kibana/Grafana 中构建日志查询与可视化面板。
  • 分布式追踪
    • 方案:JaegerOpenTelemetry,为关键业务接入埋点与采样,分析链路延迟与错误根因。
  • 主机与内核
    • 在 Debian 节点保留 journaldauditd 日志,结合日志平台进行审计与故障复盘。

五 日常巡检清单与排障要点

  • 每日/每周巡检
    • 节点状态与资源:kubectl get nodes;节点 CPU/内存/磁盘/IO 使用趋势
    • 核心组件:kube-apiserver、kube-controller-manager、kube-scheduler、etcd 健康与延迟
    • 工作负载:Pod CrashLoopBackOff、Pending、Evicted 数量与原因
    • 网络:ServiceEndpoints 一致性、DNS 解析可用性
    • 存储:PVC/PV 状态、使用量与绑定情况
  • 快速排障路径
    • Pod 异常:kubectl describe pod -n → 查看 Events、资源限制、镜像拉取、就绪探针
    • 节点 NotReady:检查 kubelet 与容器运行时、磁盘压力(kubelet 驱逐阈值)、网络插件(如 Calico/Flannel)
    • 应用性能:Prometheus 查询 请求量/延迟/错误率,结合 Grafana 面板与 日志/追踪 定位瓶颈。

0