Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 25 additions & 16 deletions astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ import starlight from '@astrojs/starlight';
import tailwindcss from '@tailwindcss/vite';
import starlightOpenAPI, { openAPISidebarGroups } from 'starlight-openapi';

export const locales = {
root: { label: 'English', lang: 'en' },
'zh-hant': { label: '繁體中文', lang: 'zh-Hant' }
};

// https://astro.build/config
export default defineConfig({
site: 'https://otterscale.com',
Expand All @@ -21,34 +26,38 @@ export default defineConfig({
}
],
defaultLocale: 'root',
locales: {
root: {
label: 'English',
lang: 'en'
},
'zh-hant': {
label: '繁體中文',
lang: 'zh-Hant'
}
},
locales,
editLink: {
baseUrl: 'https://github.com/otterscale/otterscale.github.io/edit/main/docs/'
},
sidebar: [
{
label: 'Get Started',
slug: 'get-started'
label: 'Introduction',
slug: 'introduction',
translations: {
'zh-Hant': '簡介'
}
},
{
label: 'Scope',
slug: 'scope'
label: 'Getting Started',
translations: {
'zh-Hant': '開始使用'
},
autogenerate: { directory: 'getting-started' }
},

{
label: '基礎',
label: 'basic',

Copilot AI Nov 27, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The label for the 'basic' section should be capitalized as "Basic" to maintain consistency with other section labels like "Introduction" and "Getting Started".

Suggested change
label: 'basic',
label: 'Basic',

Copilot uses AI. Check for mistakes.
translations: {
'zh-Hant': '基本'

Copilot AI Nov 27, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Consider making the translation key more descriptive. The Chinese translation '基本' means 'basic' or 'fundamental', while '基礎' (which was used before) means 'foundation' or 'basics'. If you intended to change the meaning, this is correct, but if not, consider reverting to '基礎' for consistency.

Suggested change
'zh-Hant': '基本'
'zh-Hant': '基礎'

Copilot uses AI. Check for mistakes.
},
autogenerate: { directory: 'basic' }
},
{
label: '服務',
label: 'service',

Copilot AI Nov 27, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The label for the 'service' section should be capitalized as "Service" to maintain consistency with other section labels like "Introduction" and "Getting Started".

Suggested change
label: 'service',
label: 'Service',

Copilot uses AI. Check for mistakes.
translations: {
'zh-Hant': '服務'
},
autogenerate: { directory: 'service' }
Comment on lines +50 to 61

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For consistency with other capitalized sidebar labels like 'Introduction' and 'Getting Started', it would be better to capitalize the labels for 'basic' and 'service' as well.

Suggested change
label: 'basic',
translations: {
'zh-Hant': '基本'
},
autogenerate: { directory: 'basic' }
},
{
label: '服務',
label: 'service',
translations: {
'zh-Hant': '服務'
},
autogenerate: { directory: 'service' }
label: 'Basic',
translations: {
'zh-Hant': '基本'
},
autogenerate: { directory: 'basic' }
},
{
label: 'Service',
translations: {
'zh-Hant': '服務'
},
autogenerate: { directory: 'service' }

},
...openAPISidebarGroups
Expand Down
2 changes: 1 addition & 1 deletion src/content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ import { docsLoader } from '@astrojs/starlight/loaders';
import { docsSchema } from '@astrojs/starlight/schema';

export const collections = {
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() })

Copilot AI Nov 27, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Removing the trailing comma is inconsistent with modern JavaScript/TypeScript best practices, which recommend trailing commas in multi-line object/array literals for cleaner diffs. Consider keeping the trailing comma.

Suggested change
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() })
docs: defineCollection({ loader: docsLoader(), schema: docsSchema(), })

Copilot uses AI. Check for mistakes.
};
File renamed without changes.
23 changes: 0 additions & 23 deletions src/content/docs/get-started.md

This file was deleted.

61 changes: 61 additions & 0 deletions src/content/docs/getting-started/01-prerequisites.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
title: Prerequisites
description: Hardware and network requirements for running OtterScale.
---

## System Requirements

Before installing OtterScale, ensure your environment meets the following specifications.

### Operating System

| Component | Requirement |
| :-------- | :------------------------------ |
| **OS** | **Ubuntu 24.04 LTS** (Required) |

### Hardware Specifications

| Resource | Minimum Requirement |
| :------------- | :----------------------- |
| **Memory** | 8 GB RAM |
| **Disk Space** | 100 GB available storage |

### Network Configuration

- **Connectivity:** At least one network interface with external internet access.
- **Bridge Configuration:** The installation script checks for a network bridge named `br-otters`.
- _Existing:_ If found, it will be used automatically.
- _Missing:_ You will be prompted to select an existing bridge or create a new one.

---

## Firewall Configuration

The installation process requires outbound access to various external services. Please whitelist the following domains and ports.

### Core Infrastructure

| Service Group | Port(s) | Domains |
| :---------------------- | :--------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Canonical Services** | TCP 443 (HTTPS)<br>TCP 80 (HTTP)\* | `api.charmhub.io`, `api.jujucharms.com`, `changelogs.ubuntu.com`, `charmhub.io`, `cloud-images.ubuntu.com`, `maas.ubuntu.com`, `images.maas.io`\*, `juju.is`, `jaas.ai`, `streams.canonical.com`, `objects.githubusercontent.com`, `contracts.canonical.com` |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The asterisks next to (HTTP)* and images.maas.io* seem to indicate a footnote or special condition, but there is no corresponding explanation in the document. Please add a note to clarify what the asterisks mean to avoid confusion.

| **Snap Store** | TCP 443 | `snapcraft.io`, `api.snapcraft.io`, `storage.snapcraftcontent.com`, `*.cdn.snapcraftcontent.com` |
| **Ubuntu Repos** | TCP 443, 80 | `archive.ubuntu.com`, `security.ubuntu.com`, `esm.ubuntu.com`, `ports.ubuntu.com`, `tw.archive.ubuntu.com` |
| **GitHub & OtterScale** | TCP 443, 80 | `otterscale.github.io`, `otterscale.com`, `github.com`, `raw.githubusercontent.com` |

### Container Registries & Images

| Registry | Port | Domains |
| :----------------- | :------ | :---------------------------------------------------------------------------------------------------------------------------------------- |
| **Kubernetes** | TCP 443 | `registry.k8s.io`, `k8s.gcr.io`, `ghcr.io`, `storage.googleapis.com`, `d39mqg4b1dx9z1.cloudfront.net` |
| **Docker Hub** | TCP 443 | `docker.io`, `hub.docker.com`, `auth.docker.io`, `registry-1.docker.io`, `production.cloudflare.docker.com`, `*.r2.cloudflarestorage.com` |
| **NVIDIA** | TCP 443 | `nvcr.io` |
| **Red Hat / Quay** | TCP 443 | `registry.redhat.io`, `quay.io`, `registry.access.redhat.com` |
| **Others** | TCP 443 | `registry.cn-hangzhou.aliyuncs.com` |

### AI & Helm Resources

| Category | Port | Domains |
| :-------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **HuggingFace** | TCP 443 | `huggingface.co`, `cdn-lfs.huggingface.co`, `cdn.huggingface.co` |
| **Istio** | TCP 443 | `istio.io` |
| **Helm Charts** | TCP 443 | `charts.jetstack.io`, `charts.bitnami.com`, `open-feature.github.io`, `prometheus-community.github.io`, `project-hami.github.io`, `helm.ngc.nvidia.com`, `llm-d.ai` |
38 changes: 38 additions & 0 deletions src/content/docs/getting-started/02-installation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
title: Installation
description: Step-by-step guide to installing OtterScale.
---

Follow the steps below to install and configure OtterScale.

## Installation Process

### 1. Start Services
Comment on lines +8 to +10

Copilot AI Nov 27, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Consider adding a blank line after the heading on line 8 and before the subheading on line 10 for better readability and consistency with markdown formatting best practices.

Copilot uses AI. Check for mistakes.

Run the following command to start the necessary services using Docker Compose:

```bash
docker-compose up -d
```

### 2. Configure Installation

Create an `install.cfg` file with the required configuration. You can use the following template:

```bash title="install.cfg"
## MAAS DHCP Range IP
MAAS_DHCP_START_IP="192.168.197.216"
MAAS_DHCP_END_IP="192.168.197.219"

## OtterScale Web IP
OTTERSCALE_WEB_IP="192.168.197.220"
```

Ensure that the IP addresses are correctly configured for your network environment.

### 3. Run Installation Script

Execute the installation script through the User Interface:

1. Access the OtterScale UI.
2. Execute the `install.sh` script.
Comment on lines +35 to +38

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The instruction 'Execute the install.sh script' through the UI could be more specific. To improve clarity for the user, consider explaining how to execute the script from the UI. For example, is there a button to click, or a command provided in the UI to be run elsewhere?

75 changes: 75 additions & 0 deletions src/content/docs/getting-started/03-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
title: Scope
description: Manage scopes in OtterScale.
---

Scopes allow you to organize your resources and control access.

## Selecting a Scope

You can select a scope from the dropdown menu in the navigation bar. This will filter the resources you see to only those within the selected scope.

## Creating a Scope

To create a new scope, navigate to the Scope management area and click on "Create Scope". A side panel will appear with the creation form.

### 1. Plan Selection

At the top of the form, you will see the details of the plan associated with the scope you are creating. Different plans support different features:

| Feature | Standard | Advanced | Enterprise |
| :--------- | :---------- | :--------- | :--------- |
| Ceph | ✅ | ✅ | ✅ |
| Kubernetes | ✅ | ✅ | ✅ |
| Cluster | ❌ | ✅ | ✅ |
| Node | Single-Node | Multi-Node | Multi-Node |

### 2. Scope Details

Fill in the following information to configure your new scope:

#### Scope Name

- **Label**: Scope Name <span style="color: #eab308">●</span>
- **Description**: Enter a unique name for your scope.
- **Input**: Text field (Required).

#### Machine Selection

- **Label**: Machine <span style="color: #eab308">●</span>
- **Description**: Select the physical machine to assign to this scope.
- **Input**: Dropdown menu.
- The dropdown lists available machines that are in the `Ready` status.
- Hovering over the info icon <span class="iconify" data-icon="ph:info"></span> next to a machine name displays detailed hardware specifications (CPU, Memory, Storage, System info, etc.).
Comment on lines +33 to +43

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using raw HTML like <span style="color: #eab308">●</span> (line 33) and <span class="iconify" ...></span> (line 43) to render UI elements in Markdown can be brittle and hard to maintain. It may also present accessibility issues.

Consider using a more semantic and standard Markdown approach. For example:

  • For required fields, you could add (Required) text next to the label.
  • For icons, you could use an emoji or a shortcode if your framework supports it.

This would make the documentation cleaner and more resilient to future style changes.

Comment on lines +42 to +43

Copilot AI Nov 27, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent list formatting. Line 42 uses a hyphen (-) for the list item, while line 43 uses two spaces and a hyphen. All sub-items under "Input" should consistently use the same indentation level (either 2 or 4 spaces).

Copilot uses AI. Check for mistakes.

#### Storage Devices

- **Label**: Storage Devices <span style="color: #eab308">●</span>
- **Description**: Select the block devices to be used by the scope.
- **Input**: Checkboxes.
- This section appears after you select a machine.
- It lists available non-boot block devices.
- Hovering over a device shows its model and capacity.
Comment on lines +50 to +52

Copilot AI Nov 27, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent list formatting. Lines 50-52 have inconsistent indentation. Line 50 uses a hyphen at the start, while lines 51-52 use two spaces before the hyphen. All sub-items should use consistent indentation.

Copilot uses AI. Check for mistakes.

#### Network Configuration

- **Calico CIDR** (Optional):
- **Description**: The CIDR block for Calico networking.
- **Input**: Text field (e.g., `192.168.0.0/16`).
- **Virtual IP** (Optional):
- **Description**: The virtual IP address for the scope.
- **Input**: Text field (e.g., `192.168.1.1`).

### 3. Creation Process

Once you have filled in the details, click the **Create** button. The system will perform the following steps automatically:

1. **Create Scope**: Initializes the scope record.
2. **Add Machine Tags**: Tags the selected machine.
3. **Commission Machine**: Configures the machine (SSH, networking, storage).
4. **Wait for Ready**: Waits for the machine to report a `Ready` status.
5. **Create Machine**: Associates the machine with the scope.
6. **Wait for Agent**: Waits for the agent to start on the machine.
7. **Create Node**: Finalizes the node creation with network and storage settings.

You will see a loading indicator and status messages during this process. Once complete, a success message will appear.
2 changes: 1 addition & 1 deletion src/content/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ hero:
file: ../../assets/houston.webp
actions:
- text: Get Started
link: /guides/example/
link: /introduction/
icon: right-arrow
- text: View on Github
link: https://github.com/otterscale/otterscale
Expand Down
38 changes: 38 additions & 0 deletions src/content/docs/introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
title: Get Started

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The title of this page is 'Get Started', but the file is named introduction.md and its sidebar label is 'Introduction'. For consistency, it would be better to change the title to 'Introduction'.

Suggested change
title: Get Started
title: Introduction

description: Get started with OtterScale.
---

OtterScale is a unified infrastructure management platform designed to simplify the deployment and operation of complex distributed systems. It integrates bare metal provisioning, container orchestration, and distributed storage into a single, cohesive interface.

## System Architecture

OtterScale is built on a layered architecture that provides complete control from the hardware up to the application layer.

### Core Layers

1. **Hardware Layer**: Manages physical resources including Compute nodes, Storage nodes, and GPU accelerators.
2. **Provisioning Layer (MAAS)**: Handles bare metal provisioning, OS deployment, and network configuration.
3. **Orchestration Layer (Juju & Kubernetes)**: Manages application lifecycles and container orchestration.
4. **Storage Layer (Ceph)**: Provides scalable, distributed storage for the cluster.

### Node Provisioning & Management

OtterScale automates the lifecycle of physical nodes. Through the integration with MAAS, it handles power management (IPMI/Redfish), PXE booting, and OS installation.

### Storage Topology

The platform utilizes Ceph to provide a robust, self-healing storage fabric. Storage nodes are dedicated to managing data replication and distribution, ensuring high availability and performance for data-intensive workloads like AI model training.

## Key Features

- **Scope Management**: logically isolate resources and manage access control for different teams or projects.
- **AI/LLM Readiness**: Optimized for high-performance computing with support for GPU acceleration and high-speed networking (InfiniBand/RoCE).
- **Multi-Tenancy**: Securely share infrastructure across multiple users while maintaining resource isolation.
- **Unified Interface**: A single pane of glass for monitoring and managing the entire stack, from metal to service.

## Next Steps

- [Check Prerequisites](/getting-started/01-prerequisites)

Copilot AI Nov 27, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The "Next Steps" section links to Prerequisites (01) and Create a Scope (03), but skips the Installation guide (02). Consider adding a link to /getting-started/02-installation between the prerequisites and scope creation steps for a complete getting started flow.

Suggested change
- [Check Prerequisites](/getting-started/01-prerequisites)
- [Check Prerequisites](/getting-started/01-prerequisites)
- [Install OtterScale](/getting-started/02-installation)

Copilot uses AI. Check for mistakes.
- [Create a Scope](/getting-started/03-scope)
- [Explore Basic Features](/basic/machines)
Loading