LabHub
学习 学习路径 课程

CNPE — 云原生平台工程师

平台架构先定什么

在 LabHub 中继续学习

一句话总结

设计不是选择工具,而是决定允许哪些失败、保证什么。尤其要先于部署工具审查地址空间、数据所有权和故障时必须保留的容量。

分层图: 决定允许哪些失败、保证什么 · 同一节点的多个 Pod 可以使用同一卷。

为什么需要它

设想升级订单服务时,一个 Pod 一直 Pending。有人要增加节点,另一个人要把金丝雀改成蓝绿,但尚无人查看 Pod 事件和卷位置。若根因是卷的节点约束,增加 CPU 无效;若新旧版本不能同时写同一数据,仅改变流量切换方式也无效。

先写明前提:数据能否重建?新旧版本能否同时写?失去一个节点后是否仍须服务?没有答案,架构图中再多方框也产生不了恢复步骤。

工作原理

地址空间与候选节点

例如把 Pod 的 /16 按每节点 /24 分配,算术上有 256 个块。实际节点上限仍取决于 CNI、预留和集群设置,不能直接写成可运营节点数。还应检查 Service、Pod、公司网络与 VPN 地址是否重叠。CIDR 或 CNI 变更依实现可能需要迁移或重建,值得尽早调查。

Pod Pending 时,应先看调度器允许的候选节点和事件,而不是总 CPU。nodeSelector、affinity、taint/toleration、卷 topology、requests 会共同缩小候选范围。标签匹配不等于一定可调度。

kubectl get nodes --show-labels
kubectl -n team-a describe pod orders-canary
kubectl -n team-a get events --sort-by=.metadata.creationTimestamp
kubectl -n team-a get pvc

这里的 team-a 和 orders-canary 是示例名称。实际练习要替换为目标名称,并区分错误来自 scheduler,还是卷连接、挂载过程。

RWO 的 Once 并非一个 Pod

ReadWriteOnce(RWO)表示可在一个节点上读写,**同一节点的多个 Pod 可以使用同一卷。**只允许一个 Pod 的 ReadWriteOncePod(RWOP)是另一种模式,还要确认 CSI 等支持条件。即使支持 RWX,也不代表应用并发写安全。请阅读官方 PV 文档的访问模式,分别标明节点数、Pod 数和数据一致性。

观察情况 先检查 尚不能断定
两个 Pod 引用 RWO PVC 两个 Pod 所在节点与驱动限制 第二个 Pod 必然失败
在另一节点连接失败 事件、现有连接、topology 增加节点 CPU 即可解决
同一节点上两者均 Ready 应用锁、单 writer、模式兼容性 并发写也安全
改成蓝绿 预览版本写入、后台任务 只切流量即可保证单 writer

蓝绿发布不是数据访问控制。即使 Service 不发送流量,新版本的批处理也可能写入。必须设计应用单 writer、向新卷复制并验证、模式兼容性,必要时明确停机。选择取决于 RPO、RTO 和数据模型。

现场表现

订单团队需要回答两个不同问题。“新 Pod 能否启动?”由调度与卷事件回答;“新 Pod 是否应该启动?”由并发写契约与兼容性测试回答。不能通过第一个问题就跳过第二个。

设计备忘录应保留决定、前提、确认命令、失败替代方案四栏。例如在“共享 RWO”旁写明“可调度到同一节点”的前提,并另列“writer 只有一个”。这会把考试术语转化为运营判断。

下一步学习

接下来学习给租户的配额与真实容量预留有何不同。最后的测验会判断同一 RWO 在不同条件下为何结论不同。仅凭这里的阅读示例,不能声称已验证 CSI 多节点故障或数据恢复。