一、项目简介容器化已经成为后端服务交付的主流方式但 Kubernetes 这类平台的完整体系较重对于初学者来说直接理解集群、节点、工作负载、副本数、鉴权和接口协作并不容易。本文实现一个“基于 Python 的容器编排工具”全栈项目用较轻量的方式模拟容器编排平台的核心流程用户注册登录、创建集群、注册节点、部署工作负载、扩缩容和删除服务。项目定位不是替代 Kubernetes而是帮助读者掌握容器编排系统的基础业务建模和全栈落地方法。后端使用 FastAPI 提供 RESTful APISQLite 存储数据前端使用 Vue 3 Vite 构建管理控制台。二、技术栈后端框架FastAPI数据库SQLiteORMSQLAlchemy数据校验Pydantic认证方案密码哈希 JWT Bearer Token前端框架Vue 3前端构建工具Vite接口通信Fetch API 封装部署方式后端 Uvicorn前端 Vite 开发服务或构建后静态部署三、系统架构系统采用前后端分离架构浏览器 Vue 3 控制台 | | HTTP Bearer Token v FastAPI REST API | | SQLAlchemy ORM v SQLite 数据库后端负责用户认证、资源权限校验、集群/节点/工作负载管理前端负责登录状态维护、表单录入、资源列表展示和扩缩容操作。每个用户只能看到并管理自己创建的集群资源。四、功能模块1. 用户认证模块用户注册用户登录密码哈希存储JWT Token 签发登录状态查询核心业务接口鉴权保护2. 集群管理模块创建集群查看当前用户的集群列表保存集群区域、API Server 地址和状态3. 节点管理模块为指定集群注册节点记录节点 IP、CPU、内存和状态展示节点资源池4. 工作负载模块部署镜像工作负载设置副本数模拟运行状态支持扩容、缩容和停止支持删除工作负载5. 仪表盘模块展示集群数量展示节点数量展示工作负载总数展示运行中工作负载数量五、数据库/数据模型设计本项目使用 SQLite核心表如下表名说明users用户表保存账号、邮箱、密码哈希clusters集群表保存集群名称、区域、API 地址、所属用户nodes节点表保存节点 IP、CPU、内存、所属集群workloads工作负载表保存应用名称、镜像、副本数、状态models.py中的用户模型示例classUser(Base):__tablename__usersidmapped_column(Integer,primary_keyTrue,indexTrue)usernamemapped_column(String(50),uniqueTrue,indexTrue,nullableFalse)emailmapped_column(String(120),uniqueTrue,indexTrue,nullableFalse)hashed_passwordmapped_column(String(255),nullableFalse)集群通过owner_id关联用户节点和工作负载通过cluster_id关联集群这样可以自然地实现用户级资源隔离。六、后端接口设计后端接口统一以/api开头方法路径说明是否鉴权POST/api/auth/register注册用户否POST/api/auth/login登录获取 Token否GET/api/auth/me当前用户信息是GET/api/dashboard仪表盘统计是POST/api/clusters创建集群是GET/api/clusters查询集群是POST/api/clusters/{id}/nodes注册节点是GET/api/nodes查询节点是POST/api/workloads部署工作负载是GET/api/workloads查询工作负载是PATCH/api/workloads/{id}/scale扩缩容是DELETE/api/workloads/{id}删除工作负载是接口鉴权核心是 FastAPI 依赖注入defget_current_user(token:strDepends(oauth2_scheme),db:SessionDepends(get_db)):payloaddecode_access_token(token)ifnotpayloadornotpayload.get(sub):raiseHTTPException(status_code401,detail登录已失效)usercrud.get_user_by_username(db,payload[sub])ifnotuser:raiseHTTPException(status_code401,detail用户不存在)returnuser业务接口只要声明current_user: models.User Depends(get_current_user)就能自动要求前端携带 Bearer Token。七、前端页面设计前端使用 Vue 3 Vite主要页面集中在App.vue中适合教学项目阅读。页面分为两种状态未登录展示登录/注册 Tab 表单。已登录展示仪表盘、集群表单、节点表单、工作负载表单、资源列表和操作按钮。前端 API 封装在src/api.jsasyncfunctionrequest(path,options{}){constheaders{Content-Type:application/json,...(options.headers||{})}consttokengetToken()if(token)headers.AuthorizationBearer${token}constrespawaitfetch(${API_BASE}${path},{...options,headers})constdataawaitresp.json()if(!resp.ok)thrownewError(data?.detail||请求失败)returndata}登录成功后将 Token 存入localStorage之后所有鉴权请求都会自动带上 Authorization 头。八、核心代码讲解1. 密码哈希与 Tokensecurity.py使用 passlib 对密码进行哈希避免明文保存密码pwd_contextCryptContext(schemes[bcrypt],deprecatedauto)defget_password_hash(password:str)-str:returnpwd_context.hash(password)defverify_password(plain_password:str,hashed_password:str)-bool:returnpwd_context.verify(plain_password,hashed_password)登录成功后后端创建 JWTdefcreate_access_token(data:dict,expires_delta:timedelta|NoneNone)-str:to_encodedata.copy()expiredatetime.utcnow()(expires_deltaortimedelta(minutesACCESS_TOKEN_EXPIRE_MINUTES))to_encode.update({exp:expire})returnjwt.encode(to_encode,SECRET_KEY,algorithmALGORITHM)2. 工作负载部署工作负载部署并不真正启动容器而是模拟编排平台的声明式状态defcreate_workload(db:Session,workload:schemas.WorkloadCreate):db_workloadmodels.Workload(cluster_idworkload.cluster_id,nameworkload.name,imageworkload.image,replicasworkload.replicas,desired_replicasworkload.replicas,statusRunning,)db.add(db_workload)db.commit()db.refresh(db_workload)returndb_workload当用户扩缩容时系统更新实际副本和期望副本并根据副本数判断状态defscale_workload(db:Session,workload:models.Workload,replicas:int):workload.desired_replicasreplicas workload.replicasreplicas workload.statusStoppedifreplicas0elseRunningdb.commit()db.refresh(workload)returnworkload3. 前端扩缩容交互Vue 页面通过按钮调用后端接口asyncfunctionscale(w,replicas){awaitapi.scaleWorkload(w.id,replicas)awaitloadAll()}操作完成后重新加载仪表盘、节点和工作负载列表保证页面状态与后端一致。九、部署与运行步骤1. 启动后端cdproject/backend python3-mvenv .venvsource.venv/bin/activate pipinstall-rrequirements.txt uvicorn app.main:app--reload--host0.0.0.0--port8000后端默认地址为http://127.0.0.1:8000。2. 启动前端cdproject/frontendnpminstallnpmrun dev前端默认会请求http://127.0.0.1:8000/api。浏览器打开 Vite 输出的地址通常是http://127.0.0.1:5173。3. 初始化使用注册新用户。登录进入控制台。创建一个集群。为集群注册节点。部署镜像工作负载。使用扩容、缩容、删除按钮管理工作负载。十、项目总结本文完成了一个具备完整认证与鉴权的 Python 全栈项目基于 Python 的容器编排工具。它使用 FastAPI 构建 API使用 SQLite 持久化资源使用 Vue 3 Vite 构建前端控制台。虽然项目没有直接对接 Docker 或 Kubernetes API但已经覆盖容器编排平台最核心的业务抽象集群、节点、工作负载、副本和状态管理。读者可以在此基础上继续扩展接入 Docker SDK 实际创建容器、对接 Kubernetes Python Client、增加 YAML 模板导入、加入资源监控图表、实现多租户角色权限等。这个项目非常适合作为 Python 全栈、云原生入门和毕业设计原型。项目代码下载链接