2. PaaS架构设计:整体架构与分层设计

聊到PaaS平台架构,我习惯先画一张分层图。说白了,PaaS就是把底层基础设施的复杂性给屏蔽掉,让开发者只关心业务代码。你想想看,如果没有PaaS,每次部署都要自己搭Kubernetes、配网络、搞存储,那得多累?

我个人习惯把PaaS分成四层:基础设施层、容器编排层、应用服务层、开发者门户层。每一层都有明确的职责边界。嗯,这里要注意,层与层之间不能耦合太紧,否则后期维护会非常痛苦。

2.1 基础设施层:地基要稳

这一层是PaaS的物理基础。包括计算、存储、网络三大块。我在项目中遇到过,有些团队为了省钱,直接用裸金属服务器跑容器,结果网络性能惨不忍睹。

基础设施层的关键点:

  • 计算资源:物理机或虚拟机,建议用标准化硬件
  • 存储资源:分布式存储(Ceph、GlusterFS)或云盘
  • 网络资源:VPC、负载均衡、DNS
避坑指南:我曾经在项目里吃过亏,存储选型时没考虑IOPS上限,结果业务高峰期数据库容器频繁OOM。后来我们统一用了SSD云盘,才把问题解决。

2.2 容器编排层:PaaS的心脏

这一层是整个PaaS的核心。说白了,就是Kubernetes集群的管理层。我建议把Kubernetes的控制平面组件单独部署,不要跟业务节点混在一起。

容器编排层的关键组件:

组件 职责 我的经验
API Server 所有操作的入口,提供RESTful接口 一定要做限流,否则并发高时容易挂
Scheduler 负责Pod调度到合适的Node上 默认调度策略不一定适合你的场景
Controller Manager 维护集群状态,执行控制器逻辑 注意控制器的循环频率,别太频繁
etcd 分布式键值存储,保存集群状态 etcd的磁盘IO性能直接影响集群稳定性

2.2.1 API Server:PaaS的守门员

API Server是PaaS平台唯一对外暴露的组件。所有操作——创建Pod、查询状态、删除资源——都得经过它。我个人习惯在API Server前面加一层网关,做认证、鉴权和限流。

为什么会这样?因为API Server本身没有认证能力,全靠插件。我曾经见过一个团队,API Server直接暴露在公网上,结果被人扫到了etcd的端口,数据全丢了。嗯,这是个血泪教训。

2.2.2 Scheduler:资源分配的决策者

Scheduler负责决定Pod跑在哪台机器上。默认的调度策略是轮询,但实际场景中,你可能需要自定义调度策略。比如,GPU节点要优先分配给AI训练任务。

我记得有一次,业务方反馈说Pod总是调度到同一台机器上,导致那台机器负载过高。查了半天,发现是Scheduler的节点亲和性配置写错了。你想想看,这种问题排查起来多费劲。

2.2.3 Controller Manager:集群的管家

Controller Manager里跑着各种控制器:Deployment Controller、ReplicaSet Controller、Node Controller等等。每个控制器都在不停地检查当前状态和期望状态是否一致。

这里有个坑:控制器的循环频率不能太快。我曾经把ReplicaSet Controller的同步间隔设成了100毫秒,结果集群CPU直接飙到90%。后来改成了5秒,一切正常。

2.2.4 etcd:集群的数据库

etcd存储了PaaS平台的所有状态信息。包括Pod的IP、Node的标签、ConfigMap的内容等等。etcd的性能直接决定了整个PaaS的稳定性。

我的建议:etcd集群至少3个节点,用SSD盘,网络延迟要低。我曾经见过一个项目,etcd和业务容器混跑,结果业务容器把磁盘IO吃满了,etcd直接挂了,整个集群瘫痪。

2.3 应用服务层:开发者的工具箱

这一层提供各种中间件和服务:数据库、消息队列、缓存、日志收集、监控告警等等。说白了,就是让开发者不用自己搭这些基础设施。

应用服务层的设计原则:

  • 标准化:所有中间件都用统一版本,避免兼容性问题
  • 自动化:创建、扩容、备份都要自动化
  • 可观测:每个服务都要有日志、指标和链路追踪

我在项目中遇到过,开发者自己装了个MySQL 5.7,但平台默认是8.0,结果数据迁移时出了大问题。后来我们强制统一版本,才避免了这种麻烦。

2.4 开发者门户层:用户的第一印象

这一层是开发者直接接触的界面。包括Web控制台、CLI工具、API文档等等。我建议门户层要做得简单易用,因为开发者没耐心看长篇大论的文档。

开发者门户层的关键功能:

  • 项目管理:创建项目、管理成员、设置权限
  • 应用管理:部署、回滚、扩缩容
  • 日志查看:实时日志、历史日志搜索
  • 监控告警:CPU、内存、网络、磁盘的实时监控
核心观点:PaaS架构设计的关键在于「分层解耦」。每一层只关心自己的事,不要越界。基础设施层别管业务逻辑,容器编排层别管用户界面。这样后期维护和升级才会轻松。

嗯,以上就是PaaS平台的整体架构和分层设计。下一章我们会深入聊聊容器编排层的具体实现,包括Kubernetes的安装、配置和调优。到时候我会分享一些我在生产环境踩过的坑,希望对你有帮助。