Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Cloud Operator

Cloud Operator 是 ZJUSCT Cloud 的虚拟机控制器:在 Kubernetes 中管理持久 CloudVM,创建 launcher Pod 并复用默认 scheduler。VM 的系统盘使用独立 PVC,当前实验接入现有 Ceph RBD。

当前为 v0.1 后端验收版。已在 m600 隔离环境跑通 Ubuntu 24.04、SSH、持久盘、启停和离线备份恢复;门户、正式租户管理及服务发布仍在设计中。

架构与职责

门户 / Cloud API(计划中:身份、授权、配额)
        ↓
CloudVM → cloud-operator Deployment → launcher Pod 定义
                                            ↓
                                  Kubernetes 默认 scheduler
                                            ↓
                          launcher → Firecracker / KVM → guest
                                            ↕
                                    Ceph CSI / RBD PVC
  • Operator: 调谐 CloudVM 和 launcher Pod、检查根盘归属、记录 VM 生命周期状态。
  • Kubernetes: 默认 scheduler 根据 Pod 资源请求和节点约束调度;CSI 提供持久块设备。
  • Launcher: 按版本化配置在 Pod 内运行一台 Firecracker VM,处理 TAP、停止和退出结果;源码独立维护。
  • 门户/API(计划): 登录、用户与资源归属、配额和产品接口。可以与本仓库协作开发,作为独立服务运行。

Operator 与 launcher 没有跨仓库 Go 模块依赖;接口以协议文档为准,不兼容变更需要版本化并同步两端。

当前进度

能力 状态
实例生命周期 CloudVM CRD、显式启动/停止、Pod 状态及 SSH 就绪已在实验环境验证
系统与磁盘 Ubuntu 24.04、固定 ZJU Mirror 镜像、独立 Ceph RBD 系统盘;停止后保留数据
访问与网络 实验环境通过 m600 跳板、Service 和 launcher SSH relay 登录;有 Pod NAT、DNS 和隔离策略
备份恢复 支持停机后备份到 m600 本地、恢复到新 PVC 并启动;异机备份和正式策略待完善
门户与用户入口 尚未接入;共享 SSH 网关、Git OAuth 绑定与网站域名方案正在讨论
密度实验 10 / 20 台各 1 vCPU、512 MiB 的 VM 共享一个逻辑 CPU,详见下文与实验报告

端到端验收使用 1 vCPU / 1 GiB / 8 GiB 的 Ubuntu VM。实验版 launcher Pod 使用 privileged 和只读 hostPath,正式部署需要继续收敛权限。

CloudVM 模型

资源定义见 API 类型、CRD 和示例。主要字段:

字段 用途
owner 稳定用户标识,创建后不可变
rootVolumeClaim 同命名空间的独立 raw block PVC,创建后不可变
vcpus / memoryMiB guest 规格;当前允许 1–4 vCPU、128–4096 MiB
powerState Running 或 Stopped
bootID 递增的显式启动请求;相同 bootID 的重试保持幂等

状态包含 Pending、Running、Stopping、Stopped、Failed、Blocked、Unknown,以及原因、Pod、节点等信息。启用实验网络时,Running 等待 guest SSH banner 就绪。guest 正常退出后保持停止;重新启动需要新的 bootID。当前 guest 内 reboot 也结束本次运行,平台 restart 使用停止后重新启动。

PVC 的 owner 和 claim 标记由可信控制面维护。删除 CloudVM 保留根盘及其预约;释放卷之前要确认旧 writer 已停止。已观测 Pod 丢失或旧 Pod 仍在终止时,控制器先报告状态;跨节点接管需要补齐 fencing。普通用户通过未来的平台 API 操作资源,由 API 负责授权。

本地开发

需要 Go 1.25 或更新版本。两个仓库建议放在同级目录:

git clone git@github.com:ZJUSCT/cloud-operator.git
git clone git@github.com:ZJUSCT/cloud-launcher.git
make -C cloud-launcher test build
make -C cloud-operator test build

在 Operator 仓库内执行:

make test
make build
make generate  # 修改 API 后重新生成 DeepCopy 和 CRD

当前 go.mod 和内部 import 使用 github.com/Sushidesu486/cloud-operator;组织仓库迁移及 module 路径调整由仓库所有者处理。Go 本地测试验证控制逻辑与协议;真实调度、KVM 和 Ceph 行为需在隔离 Linux 集群验证。

m600 验收与实验

先阅读 Ubuntu 验收说明。当前保留的验收环境支持以下只读查询及 SSH 体验:

python3 hack/acceptance.py status
python3 hack/acceptance.py ssh alice
python3 hack/acceptance.py ssh bob

启动、停止、创建、备份、恢复等操作见验收说明,运行前先了解这些命令对现有实例与 PVC 的影响。早期 BusyBox 生命周期实验在 hack/lab.py;其 cleanup 会删除对应实验 namespace、PVC 和 CRD,适用于明确可回收的环境。实验资源不由生产 Argo 管理。

共享 CPU 密度实验以一个逻辑 CPU 作为整组 VM 的预算:轻量 HTTP 总计 100 RPS 下,10 台 P95 为 8.6 ms、20 台为 11 ms。实验中的 Pod 资源和 CPU affinity 是单独设置;当前 Operator 仍按 vCPU 设置 Pod CPU request / limit,需先改造资源配置才能用于日常超售。实验条件与结果

代码目录

api/v1alpha1/          CloudVM 类型与生成的 DeepCopy
config/crd/            CRD
config/samples/        CloudVM 示例
cmd/cloud-operator/    控制器入口
internal/controller/   调谐、Pod 创建与状态逻辑
images/                镜像目录、根盘构建与卷传输
hack/                  实验、验收和密度测试脚本
docs/                  launcher 协议、验收与压测报告
evidence/              已记录的实验结果

后续协作重点

  1. 调度与资源: 拆分 guest vCPU 与 Pod CPU request / limit,明确内存开销和资源配额,在隔离节点验证默认调度与共享 CPU。
  2. 生命周期和恢复: 完善退出结果、guest reboot、Operator / 节点重启后的状态恢复;跨节点自动接管前处理 fencing 与卷单写。
  3. 存储与镜像: 完善版本化模板、克隆、磁盘归属、备份保留及异机恢复;逐个验证并开放 OS 镜像。
  4. 门户与产品 API: 设计 Git OAuth / 静态用户、实例归属、配额和操作审计;用户通过 API 访问自己的资源。
  5. 网络接入: 与网络负责人讨论统一 SSH 网关、个人校园网络认证、平台与自定义网站域名;确认接口后对接 Service 和路由。
  6. 部署与运维: 收敛 launcher 权限及运行资产交付,补齐长期运行监控、宿主资源预算和恢复演练。

本仓库的开发约束见 AGENTS.md。修改协议时同时更新 launcher;涉及生产环境的配置按团队 GitOps 流程交付。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages