Kubernetes与Prometheus技术面试核心问题解析

一、Kubernetes核心组件与调度机制

在容器编排领域,Kubernetes(简称k8s)已成为事实标准,其核心组件的协同工作机制是面试高频考点。

1.1 集群控制平面架构

  • kube-apiserver:作为集群的统一入口,提供RESTful API服务。所有管理操作(如Pod创建、服务暴露)均通过该组件完成,采用RBAC权限模型进行细粒度访问控制。典型面试问题包括:如何实现API的限流保护?答案通常涉及--etcd-servers参数配置与client-ca-file证书校验机制。
  • etcd存储层:采用Raft协议实现高可用分布式键值存储,保存集群状态、网络配置等关键数据。生产环境建议配置3节点以上集群,并通过etcdctl工具定期进行数据备份与压缩操作。
  • 控制器管理器:包含Deployment控制器、StatefulSet控制器等20+内置控制器,通过Leader Election机制实现高可用。以Deployment为例,其通过replicaset-controller维护Pod副本数,支持RollingUpdateRecreate两种更新策略。

1.2 调度与资源管理

  • kube-scheduler:采用两阶段调度算法,先通过Predicate过滤不符合条件的节点(如资源不足、污点排斥),再通过Priority计算节点权重(如CPU利用率、节点标签匹配度)。开发者需理解Request/Limit资源模型与Quality of Service(QoS)等级的关联关系。
  • kubelet:运行在每个工作节点上的代理程序,负责Pod生命周期管理(如镜像拉取、容器启停)、健康检查(livenessProbe/readinessProbe)及日志收集。其通过cAdvisor组件实现容器级资源监控,数据周期性上报至metrics-server。

1.3 服务暴露与网络模型

  • Service类型对比
    • ClusterIP:默认类型,通过集群内部DNS解析实现服务发现,适用于后端服务间通信。
    • NodePort:在每个节点监听静态端口(默认30000-32767),通过iptables/ipvs实现流量转发,适合测试环境。
    • LoadBalancer:与主流云服务商的负载均衡器集成,自动分配外部IP,需配置spec.type=LoadBalancer
  • Ingress控制器:作为7层反向代理,支持基于路径、域名的路由规则。常见实现方案包括Nginx Ingress、Traefik等,需配置IngressClass资源指定控制器类型。

二、Prometheus监控体系构建

作为CNCF毕业项目,Prometheus凭借其多维数据模型与强大的查询语言,成为容器化环境监控的首选方案。

2.1 数据采集与存储

  • 指标暴露方式
    • Pushgateway:适用于短生命周期任务(如CronJob),通过HTTP接口主动推送指标。
    • Service Discovery:支持Kubernetes、Consul等动态服务发现机制,自动发现监控目标。以K8s为例,需配置kubernetes_sd_configs并指定role: podrole: endpoints
  • 时序数据库优化:Prometheus采用本地时序数据库(TSDB),默认保留15天数据。生产环境建议配置--storage.tsdb.retention.time=30d,并通过ThanosCortex实现全局视图与长期存储。

2.2 告警规则设计

  • Recording Rules:预计算高频查询表达式,减少查询延迟。例如:
    ```yaml
    groups:
  • name: http_requests_total
    rules:
    • record: job:http_requests:rate5m
      expr: rate(http_requests_total[5m]) by (job)
      ```
  • Alerting Rules:定义告警触发条件与严重等级。以CPU使用率为例:
    ```yaml
  • alert: HighCpuUsage
    expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=”idle”}[5m])) * 100) > 80
    for: 10m
    labels:
    severity: critical
    annotations:
    summary: “Instance {{ $labels.instance }} CPU usage high”
    ```

2.3 可视化与告警通知

  • Grafana集成:通过PromQL实现自定义仪表盘,支持标记、注释等高级功能。例如监控Pod重启次数:
    1. sum(changes(kube_pod_container_status_restarts_total[1h])) by (pod)
  • Alertmanager路由:配置多级告警路由策略,支持邮件、Webhook、Slack等通知渠道。关键参数包括group_by(告警分组)、repeat_interval(重复通知间隔)等。

三、典型故障排查场景

3.1 Pod调度失败

  • 现象:Pod状态持续PendingEvents显示0/1 nodes are available
  • 排查步骤
    1. 检查节点资源是否充足:kubectl describe nodes | grep -A 10 Allocated
    2. 验证污点配置:kubectl get nodes -o json | jq '.items[].spec.taints'
    3. 检查调度器日志:journalctl -u kube-scheduler -n 100

3.2 Prometheus数据丢失

  • 常见原因
    • 磁盘空间不足触发WAL压缩
    • 配置错误导致--storage.tsdb.path指向无效目录
    • 集群时间不同步引发数据写入冲突
  • 解决方案
    • 配置--web.enable-admin-api并通过/api/v1/admin/tsdb/snapshot创建快照
    • 使用promtool工具验证配置文件:promtool check config prometheus.yml

四、最佳实践建议

  1. K8s资源配额管理:通过ResourceQuotaLimitRange限制命名空间资源使用,避免单个应用占用过多集群资源。
  2. Prometheus联邦集群:对于大规模部署,采用federation机制实现分层监控,上层Prometheus聚合下层数据。
  3. 监控指标标准化:遵循RED(Rate/Errors/Duration)与USE(Utilization/Saturation/Errors)方法论设计指标体系。

掌握上述知识体系,开发者不仅能从容应对技术面试,更可构建高可用的容器化监控平台,为企业数字化转型提供坚实基础。