kubernetes面试问题总结
# kubernetes pod监控怎么添加
在生产环境中,我通常使用 Prometheus Operator + Grafana + Alertmanager 监控 Kubernetes Pod。对于业务应用,我要求开发暴露 /metrics 接口,通过 ServiceMonitor 自动发现采集;对于集群资源监控,通过 cAdvisor、kube-state-metrics 和 Node Exporter 获取 Pod、Node、Deployment 等指标;Grafana 负责展示 CPU、内存、QPS、响应时间、重启次数等关键指标,并配置 Pod OOM、频繁重启、资源使用率超过80%等告警规则,通过企业微信或钉钉通知,实现业务运行状态的实时监控和故障预警。
# Kubernetes 污点(Taint)有哪几种模式?
Kubernetes 污点共有三种模式:
- NoSchedule:禁止没有容忍的 Pod 调度到节点,但不影响已运行 Pod。
- PreferNoSchedule:软限制,尽量不调度,如果没有其他节点仍可能调度过去。
- NoExecute:最严格,既禁止新 Pod 调度,也会驱逐当前节点上没有容忍配置的 Pod。
在生产环境中,我通常使用 NoSchedule 隔离数据库、Redis、ES 等专用节点,使用 NoExecute 处理节点故障和业务迁移场景。这样既能实现资源隔离,也能提高集群稳定性。****
Node Affinity 和 Taint 都是 Kubernetes 的调度策略,但方向不同。Node Affinity 是 Pod 主动选择节点,适用于业务分区、可用区部署、环境隔离等场景;Taint 是节点主动拒绝 Pod,适用于 GPU、数据库、日志平台等需要资源强隔离的场景。生产环境中我通常将两者结合使用:通过 Node Affinity 保证业务 Pod 调度到目标节点,通过 Taint/Toleration 防止其他业务误调度到这些节点,实现资源隔离和精准调度。例如 OpenSearch、VictoriaLogs、Redis 等基础设施节点都会采用 Label + Affinity + Taint 的组合方案。这样既能保证业务正确调度,又能避免资源争抢,提高集群稳定性。
|