|
| 1 | +# Crater存储服务 |
| 2 | + |
| 3 | +Crater 是一个基于 Kubernetes 的 GPU 集群管理系统,提供 GPU 资源编排的全面解决方案。 |
| 4 | + |
| 5 | +## 💻 开发指南 |
| 6 | + |
| 7 | +在开始开发之前,请确保您的环境已安装以下工具: |
| 8 | + |
| 9 | +- **Go**:推荐版本 `v1.25.0` |
| 10 | + 📖 [Go 安装指南](https://go.dev/doc/install) |
| 11 | + |
| 12 | +- **Kubectl**:推荐版本 `v1.22.1` |
| 13 | + 📖 [Kubectl 安装指南](https://kubernetes.io/docs/tasks/tools/) |
| 14 | + |
| 15 | +### 📐 代码风格与检查 |
| 16 | + |
| 17 | +本项目使用 [`golangci-lint`](https://golangci-lint.run/) 来强制执行 Go 代码约定和最佳实践。为避免手动运行,我们建议设置 Git 预提交钩子,以便在每次提交前自动检查代码。 |
| 18 | + |
| 19 | +安装后,您可能需要将 GOPATH 添加到系统 PATH 中,以便在终端中使用 golangci-lint。例如,在 Linux 上: |
| 20 | + |
| 21 | +```bash |
| 22 | +# 检查您的 GOPATH |
| 23 | +go env GOPATH |
| 24 | +# /Users/your-username/go |
| 25 | + |
| 26 | +# 将路径添加到 .bashrc 或 .zshrc |
| 27 | +export PATH="/Users/your-username/go/bin:$PATH" |
| 28 | + |
| 29 | +# 重新加载 shell 并验证 |
| 30 | +golangci-lint --version |
| 31 | +# golangci-lint has version 1.64.8 |
| 32 | +``` |
| 33 | + |
| 34 | +#### 设置 Git 预提交钩子 |
| 35 | + |
| 36 | +将 `.githook/pre-commit` 脚本复制到您的 Git 钩子目录并使其可执行: |
| 37 | + |
| 38 | +**Linux/macOS:** |
| 39 | +```bash |
| 40 | +cp .githook/pre-commit .git/hooks/pre-commit |
| 41 | +chmod +x .git/hooks/pre-commit |
| 42 | +``` |
| 43 | + |
| 44 | +Windows: |
| 45 | + |
| 46 | +* 将脚本复制到 .git/hooks/pre-commit |
| 47 | +* 如果需要,将脚本中的 golangci-lint 替换为 golangci-lint.exe,或将其适配为 .bat 文件。 |
| 48 | + |
| 49 | +设置钩子后,golangci-lint 将在每次提交前自动对暂存文件运行。 |
| 50 | + |
| 51 | +#### 🛠️ 数据库代码生成 |
| 52 | +本项目使用 GORM Gen 来生成数据库 CRUD 操作的样板代码。 |
| 53 | + |
| 54 | +生成脚本和文档可在以下位置找到:[ `gorm_gen`](./cmd/gorm-gen/README.md) |
| 55 | + |
| 56 | +修改数据库模型或架构定义后,请重新生成代码,而 CI 流水线将自动进行数据库迁移。 |
| 57 | + |
| 58 | +### 项目配置 |
| 59 | +安装依赖和插件: |
| 60 | +```bash |
| 61 | +go mod download |
| 62 | +``` |
| 63 | + |
| 64 | +## 🚀 运行代码 |
| 65 | + |
| 66 | +本项目支持两种运行方式:**本地开发** 和 **部署到 Kubernetes 集群**。我们 **推荐使用 Kubernetes 部署** 以获得完整功能和更接近生产的行为。 |
| 67 | + |
| 68 | +--- |
| 69 | + |
| 70 | +### 🧑💻 本地开发 |
| 71 | + |
| 72 | +> 适用于快速测试和开发阶段。 |
| 73 | +
|
| 74 | +#### 📄 配置: |
| 75 | + |
| 76 | +确保您有一个 [config.yaml](./etc/config.yaml) 文件,其中包含正确的数据库设置。 |
| 77 | + |
| 78 | +在根目录创建 `.env` 文件以自定义本地端口。此文件被 Git 忽略: |
| 79 | + |
| 80 | +```env |
| 81 | +PORT=xxxx |
| 82 | +ROOTDIR="/crater" |
| 83 | +``` |
| 84 | + |
| 85 | +#### 📁 目录设置: |
| 86 | + |
| 87 | +**在你熟悉的目录下创建一个名为 `crater`(或者其他名字) 的文件夹,以模拟文件处理行为。** |
| 88 | + |
| 89 | +**或者,您可以修改 .env 文件中的 `ROOTDIR` 并将其用作测试的根目录。** |
| 90 | + |
| 91 | +```bash |
| 92 | +mkdir crater |
| 93 | +``` |
| 94 | + |
| 95 | +此目录将作为文件处理的根目录。 |
| 96 | + |
| 97 | +#### 🚀 运行应用程序: |
| 98 | + |
| 99 | +```bash |
| 100 | +make run |
| 101 | +``` |
| 102 | + |
| 103 | +服务将启动并默认监听 `localhost:port`。 |
| 104 | + |
| 105 | +--- |
| 106 | + |
| 107 | +### ☸️ 部署到 Kubernetes |
| 108 | + |
| 109 | +#### ✅ 先决条件: |
| 110 | + |
| 111 | +- Docker |
| 112 | +- 访问 Kubernetes 集群(`kubectl`) |
| 113 | +- 已创建名为 `crater-rw-storage` 的 PVC(用于持久文件存储) |
| 114 | + |
| 115 | +#### 📦 构建并推送 Docker 镜像: |
| 116 | + |
| 117 | +```bash |
| 118 | +docker build -t your-registry/crater-webdav:latest . |
| 119 | +docker push your-registry/crater-webdav:latest |
| 120 | +``` |
| 121 | + |
| 122 | +> 将 `your-registry` 替换为您的实际容器注册表。 |
| 123 | +
|
| 124 | +#### 🚀 部署到 Kubernetes: |
| 125 | + |
| 126 | +确保当前目录中存在以下文件: |
| 127 | + |
| 128 | +- `Dockerfile` |
| 129 | +- `deployment.yaml` |
| 130 | +- `service.yaml`(如果适用) |
| 131 | + |
| 132 | +您可以在 https://github.com/raids-lab/crater/tree/main/charts/crater/templates/storage-server 找到这些文件 |
| 133 | + |
| 134 | +应用清单: |
| 135 | + |
| 136 | +```bash |
| 137 | +kubectl apply -f deployment.yaml |
| 138 | +kubectl apply -f service.yaml |
| 139 | +``` |
| 140 | + |
| 141 | +> 确保 `deployment.yaml` 正确引用镜像并挂载 PVC `crater-rw-storage`。 |
| 142 | +
|
| 143 | +### 🚀 快速部署 |
| 144 | +要在生产环境中部署 Crater 项目,我们提供了一个 Helm Chart,可在 [Crater Helm Chart](https://github.com/raids-lab/crater) 获取。 |
| 145 | + |
| 146 | +请参考主文档以获取 |
0 commit comments