---
# System prepended metadata

title: HW04-安裝Openstack並建置一個CirrOS虛擬機

---

# HW04-安裝Openstack並建置一個CirrOS虛擬機
## 緣由
使用Openstack建置虛擬機有以下的好處:
1.是一個開放的平台，可以與其他開源和商業軟體集成。這樣可以提高系統的靈活性和擴展性，同時降低了成本和風險。
2.可以快速地擴展虛擬機的規模，以滿足不斷變化的需求。這樣可以提高應用程式的可用性和性能，同時減少資源的浪費。
3.提供自動化的管理工具，可以幫助管理員自動化虛擬機的部署、配置和管理。這樣可以節省大量的時間和精力，並且降低人為錯誤的風險。
## 系統簡介
使用的設備: 嘉義大學電算中心 220教室的h7伺服器
伺服器的OS: Ubuntu 22.04 LTS (伺服器版)
伺服器的IP: 10.2.200.205
## 安裝步驟
### 一、安裝Openstack
1.安裝好Ubuntu([參考作法](https://hackmd.io/@jonathan900509/ByXFSFQNj))
2.依照順序輸入以下指令:
```javascript=
$ sudo useradd -s /bin/bash -d /opt/stack -m stack #創建一個名為stack的使用者
$ sudo chmod +x /opt/stack #讓所有user都具有執行/opt/stack裡所有檔案的權限
$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack #設定stack使用sudo指令時不用輸入密碼
$ sudo -u stack -i #切換user為stack
$ git clone https://opendev.org/openstack/devstack #從github上把devstack抓回來
$ cd devstack 
$ sudo nano local.conf #創建local.conf，將以下設定檔寫進去
```

```=
[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
```

3.執行"stack.sh"(這個步驟時間會較久，大約需要30分鐘)
```
    $ ./stack.sh
```
4.在瀏覽器搜尋:http://你的伺服器IP/dashboard ，若是成功的話則會連到openstack的登入畫面
![](https://hackmd.io/_uploads/B1png_1Bh.png)
預設的帳號是"admin"，密碼是ubuntu的帳號。登入成功後如下圖所示。
![](https://hackmd.io/_uploads/H1vgWdyrn.png)

### 二、建置一個CirrOS虛擬機

#### 設定public網路
到預設的public網路中新增一個子網路
![](https://hackmd.io/_uploads/BkwQTMfSh.png)

IP配置儲存區要看教室配置的網路區段扣掉原本實體伺服器使用的IP
DNS設置為8.8.8.8
注意這邊DHCP不能啟用

![](https://hackmd.io/_uploads/S1rbFfMHn.png)

#### 創建路由器
道路由器的葉面點選新增路由器，設置一端連外網(選PUBLIC)，點新增路由器；
在剛剛串建路由器內新增網路卡設置連接到子網(SHARED)。

#### 改變安全性群組的規則
預設群組的規則僅允許所有對外連線，對內連線則是全部禁止。因此我們需要新增規則，允許SSH以及ping連入。
在選單中選擇 “Security group”，按下"Add new rule"，新增允許所有TCP port 22 (SSH) 連入。
同上，新增允許所有ICMP連入。

#### 新增可用的浮動IP
若要允許非雲端上的機器連入虛擬機，則需要為虛擬機連結浮動 IP。因此，我們需要新增可用的浮動 IP。
在選單中選擇 “Floating IP”，按下 “Allocate floating IP to project”，並按下 “Allocate IP”。


#### 使用openstack建置虛擬機
在選單中選擇 “Instance”，按下 “Launch instance”，為此虛擬機取名。
按下 “Source”，選擇由映像檔新增虛擬硬碟。
按下 “Flavor”，選擇合適的硬體配置模板。
其他頁面依照原本設定即可，按下 “Launch instance”。

#### 設定虛擬機連結浮動IP


#### 開始使用虛擬機
![](https://hackmd.io/_uploads/r12orukB3.png)


#### 設定虛擬機網路連到外網
虛擬外網要能夠連通實體網域的話，需要在實體主機建立bridge，openstack已經提供一個bridge了(br-ex)，我們只需要把主機的網卡(目前在用的那個)加進去這個bridge即可，指令如下:
```=
$sudo ovs-vsctl add-port br-ex eno1
$sudo ip addr flush dev eno1
$sudo ip addr add 10.2.200.176/25 dev br-ex
$sudo ip link set br-ex up
```

之後進/etc/netplan更改網路設定檔(照下圖，將addresses改為你伺服器的IP)
![](https://hackmd.io/_uploads/SymlJQzrh.png)


![](https://hackmd.io/_uploads/SybWUdkHn.png)
做到這裡已經可以ping 8.8.8.8成功
但要對DNS文件做修改才能成功ping到google
這邊要注意cirros很難安裝nano 但有內建vi可以用
sudo vi /etc/resolv.conf
刪除原有的nameserver並加入
nameserver 8.8.8.8
nameserver 8.8.4.4
按esc然後按:wq儲存並離開
再次ping google看是否成功

#### 遠端連線到OPENSTACK上的虛擬機
ssh cirros@虛擬機的IP
密碼則是cirros預設的gocubsgo
![](https://hackmd.io/_uploads/ByX4koxHh.png)

成功之後的網路拓譜會呈現類似這樣:

![](https://hackmd.io/_uploads/ryAVkmfHn.png)





## 結論
這次的作業和之前的Azure上建立虛擬機在概念上十分相似，但是在實際操作上卻不是如此，之前在Azure上操作時，界面和功能都十分直觀，也有許多的教學文章可以參考，但是這次在實作時就連最基礎的安裝openstack都遇到了很多問題，更不用說之後設定虛擬機的網路環境，花了不少時間去研究，部過幸好最後還是有做出點東西，也讓我熟悉了更多雲多計算平台的使用方式。


---
## 參考
https://ithelp.ithome.com.tw/articles/10132123
https://hackmd.io/@zlQHp-D8R3uG9eJTFh2iVA/Sk5EFQfD9