尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python全栈项目--基于Python的容器编排工具

Python全栈项目--基于Python的容器编排工具
📅 发布时间:2026/7/31 9:29:07

一、项目简介

容器化已经成为后端服务交付的主流方式,但 Kubernetes 这类平台的完整体系较重,对于初学者来说直接理解集群、节点、工作负载、副本数、鉴权和接口协作并不容易。本文实现一个“基于 Python 的容器编排工具”全栈项目,用较轻量的方式模拟容器编排平台的核心流程:用户注册登录、创建集群、注册节点、部署工作负载、扩缩容和删除服务。

项目定位不是替代 Kubernetes,而是帮助读者掌握容器编排系统的基础业务建模和全栈落地方法。后端使用 FastAPI 提供 RESTful API,SQLite 存储数据,前端使用 Vue 3 + Vite 构建管理控制台。

二、技术栈

  • 后端框架:FastAPI
  • 数据库:SQLite
  • ORM:SQLAlchemy
  • 数据校验: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__="users"id=mapped_column(Integer,primary_key=True,index=True)username=mapped_column(String(50),unique=True,index=True,nullable=False)email=mapped_column(String(120),unique=True,index=True,nullable=False)hashed_password=mapped_column(String(255),nullable=False)

集群通过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:str=Depends(oauth2_scheme),db:Session=Depends(get_db)):payload=decode_access_token(token)ifnotpayloadornotpayload.get("sub"):raiseHTTPException(status_code=401,detail="登录已失效")user=crud.get_user_by_username(db,payload["sub"])ifnotuser:raiseHTTPException(status_code=401,detail="用户不存在")returnuser

业务接口只要声明current_user: models.User = Depends(get_current_user),就能自动要求前端携带 Bearer Token。

七、前端页面设计

前端使用 Vue 3 + Vite,主要页面集中在App.vue中,适合教学项目阅读。页面分为两种状态:

  1. 未登录:展示登录/注册 Tab 表单。
  2. 已登录:展示仪表盘、集群表单、节点表单、工作负载表单、资源列表和操作按钮。

前端 API 封装在src/api.js:

asyncfunctionrequest(path,options={}){constheaders={'Content-Type':'application/json',...(options.headers||{})}consttoken=getToken()if(token)headers.Authorization=`Bearer${token}`constresp=awaitfetch(`${API_BASE}${path}`,{...options,headers})constdata=awaitresp.json()if(!resp.ok)thrownewError(data?.detail||'请求失败')returndata}

登录成功后将 Token 存入localStorage,之后所有鉴权请求都会自动带上 Authorization 头。

八、核心代码讲解

1. 密码哈希与 Token

security.py使用 passlib 对密码进行哈希,避免明文保存密码:

pwd_context=CryptContext(schemes=["bcrypt"],deprecated="auto")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)

登录成功后,后端创建 JWT:

defcreate_access_token(data:dict,expires_delta:timedelta|None=None)->str:to_encode=data.copy()expire=datetime.utcnow()+(expires_deltaortimedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))to_encode.update({"exp":expire})returnjwt.encode(to_encode,SECRET_KEY,algorithm=ALGORITHM)

2. 工作负载部署

工作负载部署并不真正启动容器,而是模拟编排平台的声明式状态:

defcreate_workload(db:Session,workload:schemas.WorkloadCreate):db_workload=models.Workload(cluster_id=workload.cluster_id,name=workload.name,image=workload.image,replicas=workload.replicas,desired_replicas=workload.replicas,status="Running",)db.add(db_workload)db.commit()db.refresh(db_workload)returndb_workload

当用户扩缩容时,系统更新实际副本和期望副本,并根据副本数判断状态:

defscale_workload(db:Session,workload:models.Workload,replicas:int):workload.desired_replicas=replicas workload.replicas=replicas workload.status="Stopped"ifreplicas==0else"Running"db.commit()db.refresh(workload)returnworkload

3. 前端扩缩容交互

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. 初始化使用

  1. 注册新用户。
  2. 登录进入控制台。
  3. 创建一个集群。
  4. 为集群注册节点。
  5. 部署镜像工作负载。
  6. 使用扩容、缩容、删除按钮管理工作负载。

十、项目总结

本文完成了一个具备完整认证与鉴权的 Python 全栈项目:基于 Python 的容器编排工具。它使用 FastAPI 构建 API,使用 SQLite 持久化资源,使用 Vue 3 + Vite 构建前端控制台。虽然项目没有直接对接 Docker 或 Kubernetes API,但已经覆盖容器编排平台最核心的业务抽象:集群、节点、工作负载、副本和状态管理。

读者可以在此基础上继续扩展:接入 Docker SDK 实际创建容器、对接 Kubernetes Python Client、增加 YAML 模板导入、加入资源监控图表、实现多租户角色权限等。这个项目非常适合作为 Python 全栈、云原生入门和毕业设计原型。

项目代码

下载链接

相关新闻

  • 2026 年济南历下区无人机维修 无人机培训,本地飞手实测靠谱服务商 - LYL仔仔
  • ABAP 7.40+新语法深度解析:从内表操作到字符串处理的现代化革新
  • [具身智能-696]:为什么称为直流减速电机?减速体现在什么地方?

最新新闻

  • 终极指南:如何用阴阳师百鬼夜行AI自动化脚本快速收集式神碎片
  • 2026 合肥适合求婚场地推荐|室内包厢 户外草坪场地大全 - 星际AI
  • 云浮彩色陶瓷路面厂家推荐、透水混凝土保护剂厂家哪家好怎么选不踩坑?厂家推荐这份避坑指南 - mobible
  • 一次 MyBatis 统计查询引发的 ClassCastException:Long 不能强转为 Integer
  • 小米运动自动刷步数:5分钟搭建你的智能健康数据管家
  • 2026昭通黄金回收白银回收铂金回收市民首选无隐形扣费正规备案回收门店联系方式推荐

日新闻

  • 7步掌握KMS智能激活工具:Windows和Office永久激活完整方案
  • 如何在Windows上运行iOS应用:ipasim跨平台模拟器终极指南
  • 2026年重庆工伤赔偿律师口碑推荐:洪家木律师用专业赢得信赖 - 本地品牌推荐

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号