Skip to content

Commit 80b09ba

Browse files
authored
Merge pull request #17 from AMDResearch/develop
Pre-release v0.0.2
2 parents 28d8895 + 6469307 commit 80b09ba

122 files changed

Lines changed: 936611 additions & 501 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,3 +368,7 @@ vite.config.ts.timestamp-*
368368

369369
# Project specific
370370
dockerfiles/Courses/DL/data/FashionMNIST/raw/
371+
372+
# Local config overrides (any file containing 'local')
373+
*local*
374+
*.local.*

.vscode/settings.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
{
22
// Python
3+
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
4+
"python.analysis.extraPaths": [
5+
"${workspaceFolder}/runtime/jupyterhub/files/hub"
6+
],
37
"[python]": {
48
"editor.defaultFormatter": "charliermarsh.ruff",
59
"editor.formatOnSave": true,

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ After installation completes, open http://localhost:30890 in your browser. No lo
6969
| `uninstall` | Complete removal of all components |
7070
| `upgrade-runtime` | Upgrade JupyterHub deployment |
7171
| `build-images` | Build and import container images |
72+
| `pull-images` | Pull external images for offline use |
7273
| `install-tools` | Install Helm and K9s only |
7374
| `install-runtime` | Deploy JupyterHub only |
7475
| `remove-runtime` | Remove JupyterHub only |
@@ -81,6 +82,8 @@ sudo ./single-node.sh upgrade-runtime
8182
# Rebuild images after modifying Dockerfiles
8283
sudo ./single-node.sh build-images
8384
```
85+
86+
> **💡 Tip**: If you need to use alternative container registries or package mirrors, see [Mirror Configuration](deploy/README.md#mirror-configuration).
8487
## Manual Installation
8588

8689
For users who prefer step-by-step manual installation or need more control over the deployment process:
@@ -143,6 +146,9 @@ Current environments are set up as `RESOURCE_IMAGES` in `runtime/jupyterhub/file
143146
## Documentation
144147

145148
- [JupyterHub Configuration](docs/jupyterhub/README.md) - Detailed JupyterHub settings
149+
- [Authentication Guide](docs/jupyterhub/authentication-guide.md) - GitHub OAuth and native authentication
150+
- [User Management Guide](docs/jupyterhub/user-management.md) - Batch user operations with scripts
151+
- [User Quota System](docs/jupyterhub/quota-system.md) - Resource usage tracking and quota management
146152
- [GitHub OAuth Setup](docs/jupyterhub/How_to_Setup_GitHub_OAuth.md) - OAuth configuration
147153
- [Maintenance Manual](docs/user-manual/aup-remote-lab-user-manual-admin-new.md) - Operations guide
148154

deploy/README.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ cd aup-learning-cloud
4646

4747
A simplified deployment for development, demos, or small-scale teaching environments.
4848

49+
> **💡 Tip**: If you need to use alternative container registries or package mirrors, see [Mirror Configuration](#mirror-configuration).
50+
4951
### Prerequisites
5052

5153
**Hardware**
@@ -445,3 +447,66 @@ echo $PATH
445447
446448
# Reinstall helm if needed (see Step 2 in deployment guides above)
447449
```
450+
451+
---
452+
453+
## Advanced Configuration
454+
455+
### Offline / Portable Operation
456+
457+
The single-node deployment script automatically configures the system for offline and portable operation. When you run `./single-node.sh install`, it:
458+
459+
1. **Creates a dummy network interface** (`dummy0`) with a stable IP address (`10.255.255.1`)
460+
2. **Binds K3s to the dummy interface** using `--node-ip` and `--flannel-iface`
461+
3. **Pre-pulls all required container images** to local storage
462+
4. **Configures K3s to use local images** from `/var/lib/rancher/k3s/agent/images/`
463+
464+
This ensures the cluster remains fully functional even when:
465+
- External network is disconnected (network cable unplugged)
466+
- WiFi network changes (connecting to different access points)
467+
- No network is available at all
468+
469+
**How it works**: K3s is bound to a stable dummy interface IP instead of the physical network interface. This means K3s doesn't care about external network changes - it always uses the same internal IP for cluster communication.
470+
471+
**Reference**: [K3s Air-Gap Installation](https://docs.k3s.io/installation/airgap)
472+
473+
### Mirror Configuration
474+
475+
If you need to use alternative mirrors for container registries or package managers, you can configure them via environment variables when running the deployment script.
476+
477+
#### Container Registry Mirror
478+
479+
Set `MIRROR_PREFIX` to use a registry mirror that supports the **universal prefix mode**. The prefix will be prepended to all container image references:
480+
481+
```bash
482+
# Example: quay.io/jupyterhub/k8s-hub:4.1.0 becomes
483+
# mirror.example.com/quay.io/jupyterhub/k8s-hub:4.1.0
484+
485+
MIRROR_PREFIX="mirror.example.com" ./single-node.sh install
486+
```
487+
488+
> **Note**: This configuration works with registry mirrors that support the universal prefix pattern (e.g., `mirror/registry.k8s.io/image`). Some mirror services use per-registry subdomains instead (e.g., `k8s.mirror.org/image`), which require manual K3s registry configuration. See [K3s Private Registry Configuration](https://docs.k3s.io/installation/private-registry) for details.
489+
490+
#### Package Manager Mirrors
491+
492+
Set `MIRROR_PIP` and `MIRROR_NPM` to use alternative package repositories during image builds:
493+
494+
```bash
495+
MIRROR_PIP="https://pypi.example.com/simple" \
496+
MIRROR_NPM="https://registry.example.com" \
497+
./single-node.sh build-images
498+
```
499+
500+
#### Combined Example
501+
502+
```bash
503+
MIRROR_PREFIX="mirror.example.com" \
504+
MIRROR_PIP="https://pypi.example.com/simple" \
505+
MIRROR_NPM="https://registry.example.com" \
506+
./single-node.sh install
507+
```
508+
509+
For available environment variables, run:
510+
```bash
511+
./single-node.sh help
512+
```

0 commit comments

Comments
 (0)