---
# System prepended metadata

title: SC Training Camp

---

# SC Training Camp
[TOC]

- [name=WilliamMou]

---

# 前情提要

----

## PVE OS 建置教學 30 篇
![](https://i.imgur.com/a3kSTEc.png)
https://ithelp.ithome.com.tw/users/20111887/ironman/3432

----

## PVE VM 細節解析 1 場演講
![](https://i.imgur.com/0zXynLz.png)
http://pve.mou.tw

----

## Network 教學
![](https://i.imgur.com/KmgZyNC.png)
http://net.mou.tw/

---


# 想解決的問題
:::info
節省學習成本與時間
:::
> 之前浪費太多時間在架設
> 「用來學裝 Linux」的環境上

----

:::danger
1. BMC
    - 一直 Crash 
    - 還要先裝 Java
2. VPN 
    - 很挑限制 OS 
    - 要額外裝軟
:::

:::warning
3. Public IP 不足
    - 去年做法 15 個
5. 硬體管理麻煩
    - 15 不同的 OS
:::

---

# 解決方案

----

## 學生
:::success
1. 連上 WiFi = 經過 VPN 
2. noVNC 提供 Web 介面取代 BMC
3. SSH IP 不需要 Port Forward
4. 所有網路/系統設定都抽象了
:::

----

## 教練
:::info
1. 一鍵建立 30 台 VM Cluster
2. 一鍵設定 User Permissions 
3. 網頁監管所有 VM VNC 畫面
4. 易於 Debug 的網路/系統環境
:::

----

- VM 管理
```shell=
create-sc.sh <tmepVMID> <StartID> <EndID>
start-all-vm-sc.sh
remove-all-vm-sc.sh
```

- User 管理
```shell=
adduser-sc.sh <StartID> <EndID>
deluser-sc.sh
```

---

# 工程與系統實現

- L3 網路設定
- 虛擬化技術

----

## 網路技術

:::info
- 不會被學校擋的 VPN
- subnet and DHCP
**`Overlay-Network`**
- Peer and BGP
- Tunnel(L2TP over IPsec)
:::
- ⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️

----

![](https://i.imgur.com/ssT8Zag.png)

----

![](https://i.imgur.com/Wgu5EHv.jpg)

----

## 虛擬技術

:::info
- VNC screen Sharing 
- PVE Accounts Permission
**`Cluster Simulator`**
- Virtual Bridge / VLAN 
- QEMU / KVM
:::
- ⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️

---


# SCRIPT
https://github.com/NTHU-SC/training-camp-pveenv

## 用途
這是用來批次創建超算訓練營虛擬機叢集的 Script。
建立學習從頭開始安裝 Linux 叢集的環境。
規格為：
- 1 叢集包含 2 節點：`head` and `work`
- 兩節點預先放入相同系統之 ISO 光碟
- 兩節點之網路「假想接線」如下圖：
![](https://i.imgur.com/d608wU1.png)

## 安裝
跑以下 Scipt 前，需要在 PVE 內，先創立至少一種系統的叢集樣本。
舉例來說如下建立一組 Ubuntu 叢集：

| VMID | Name | 附註 |
| -------- | -------- | -------- |
| 2021001 | ubuntu-head-temp|Ubuntu 叢集的 Head node 的樣本 |
| 2021002 | ubuntu-work-temp|Ubuntu 叢集的 Work node 的樣本 |
> 其中：
> - 2021：年份（無特別意義的 suffix，但請保留）
> - 00：這是第 00(Ubuntu)組的樣本
> - 1 or 2：這是 head or work node


## create-sc.sh
`./create-sc.sh <VMID suffix> <start> <end>`
在範圍 `[start, and]` 建立 `end - start` 組 `<VMID>` 類型的叢集。

- VMID suffix：除了末碼以外的全部數字。例如：202100
- start：起始的叢集編號。
- end：末端的叢集編號。

該指令會以 `21TTX` 作為 VM 的 VMID，TT 代表組，X 為 1 或 2 分別代表 head or work node。

>使用方式：
`./create-sc.sh 202100 1 3` 可以建立 3 組 Ubuntu 叢集


## adduser-sc.sh 
`./adduser-sc.sh <start> <end>`
為範圍 [start, and] 的叢集新增對應權限的使用者。

- start：起始的叢集編號。
- end：末端的叢集編號。

>使用方式：
`./adduser-sc.sh 1 15` 建立 15 組擁有對應 VM 權限的使用者

## start-all-vm-sc.sh

`./start-all-vm-sc.sh`
預設啟動所有 21 開頭的 VM，意即啟動所有叢集

>使用方式：
`./start-all-vm-sc.sh`

## update.sh
`./update.sh <VMID suffix> <start> <end>`
修正用的 Scipt，可自行改寫 qm set 後的內容，批次更新群集。

- VMID suffix：除了末碼以外的全部數字。例如：202100
- start：起始的叢集編號。
- end：末端的叢集編號。

下圖為將所有叢集設定為自動開機、`12*2` 個 CPU、32G 記憶體。
![](https://i.imgur.com/CDm6XUt.png)

>使用方式：
`./update.sh 202100 1 15`

## deluser-sc.sh
`./deluser-sc.sh <start> <end>`
刪除範圍 [start, and] 的使用者。

## remove-all-vm-sc.sh
`./remove-all-vm-sc.sh`
完全刪除「所有」21 開頭的虛擬機。

## usbip.sh
`./usbip <VMID> <RemoteIP> <BusID>`
將遠端 `<RemoteIP>` 上指定之 `<BusID>` 的 USB 裝置，插入 `<VMID>` VM 內。

>使用方式：
`./usbip 2021001 10.121.123.123 1-1.3` 將該 IP 的 USB 裝置 Passthrough 到 2021001 裡。

## 建置完成
![](https://i.imgur.com/qttrBeb.png)

更多相關資料可以參考 sc22 訓練營統一入口網站：
https://hackmd.io/@NTHUSC/note















