理解 Kubernetes 最重要的是分清数据面和控制面:用户请求沿网络组件进入 Pod;Scheduler 和自动扩缩容控制器负责调整系统状态,它们不转发每一条 HTTP 请求。
请求如何进入 Pod
1 | 用户 |
SLB/ALB 提供集群外入口和云网络能力;Ingress 或 Gateway 根据域名、路径等规则选择 Service;Service 提供稳定虚拟地址,并把流量送往动态变化的后端 Pod。
Ingress 资源只是规则,真正执行规则的是 Ingress Controller。当前 Kubernetes 官方建议新能力优先考虑 Gateway API,Ingress API 仍可用但已冻结演进。
Pod 是怎样放到 Node 上的
1 | Deployment 期望 3 个副本 |
Scheduler 调度 Pod,不调度用户请求。Pod 反亲和性可以尽量把副本分散到不同 Node 或可用区,减少单节点故障的影响。
HPA、KEDA 与节点扩容
| 组件 | 观察什么 | 改变什么 |
|---|---|---|
| HPA | CPU、内存或自定义指标 | 工作负载副本数 |
| KEDA | 队列 Lag、事件源等 | 工作负载副本数 |
| Node Autoscaler | 无法调度的 Pod 与节点利用 | Node 数量 |
完整链路:
1 | 流量或 Lag 上升 |
Node 故障后的两条恢复线
数据面会把不健康后端从可用端点中移除;控制面则发现期望副本不足并在其他节点重建 Pod。若应用使用本地临时数据,Pod 重建并不等于数据恢复,因此状态服务还需要持久卷、复制和备份策略。
常见误区
- LoadBalancer 不会按“哪台服务器最闲”做出万能判断,算法与健康检查取决于实现。
- Service 不是一个业务进程,而是稳定访问一组后端的网络抽象。
- HPA 增加 Pod 不代表数据库也获得更多容量。
- 存活探针失败会触发重启,就绪探针失败主要影响接流量,应分别设计。