iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
IT Operation

從裸機到叢集:以 Proxmox VE、Ceph、OPNsense 與 PostgreSQL HA 建立可驗證的安全私有雲系列 第 3

Day 03|從單機到三節點實驗環境:Proxmox VE 安裝與巢狀虛擬化

  • 分享至 

  • xImage
  •  

今天要解決的問題

今天開始安裝 Proxmox VE。這一天比較特殊,因為是第一次實際進入 Lab 加上完整安裝過程,所以文章會保留較多部署內容。後續文章則會把詳細操作放在 GitHub,正式文章主要解釋部署時使用了哪些技術、每個設定代表什麼,以及為什麼要這樣設定。

OPNsense 最後會管理內部網路,但目前還沒有安裝,因此 pve-l0 與三台 L1 PVE 先接到現有路由器,使用路由器提供的 IP、預設閘道(Gateway)與 DNS 完成安裝和更新。完整到每個按鈕與欄位的操作,另外整理在 GitHub 的 詳細部署文件

本文閱讀方式

  • 完整理解技術與底層原理:依序閱讀全文。
  • 掌握完成部署所需的基本概念:優先閱讀標有「⭐」的章節。
  • 快速了解當天的部署內容:閱讀文末的 Lab/實作章節。
  • 跟著系列建立完整系統:依照 GitHub 詳細部署文件 的天數順序操作。

⭐ 安裝前準備

先到 Proxmox VE ISO Downloads 下載本系列使用的 proxmox-ve_9.2-1.iso,再使用 Rufus 製作開機 USB。

image

圖(一)Proxmox VE 9.2-1 ISO 下載頁面

開機後先進入 BIOS/UEFI,確認 Intel VT-x 或 AMD-V 已啟用。若硬體虛擬化沒有開啟,後面雖然可以安裝三台 L1 PVE,卻無法在它們裡面繼續啟動 KVM VM。

⭐ 安裝實體主機 pve-l0

從 USB 開機後選擇圖形化安裝(Install Proxmox VE (Graphical)),接著完成幾個主要設定:

  1. 目標硬碟(Target Harddisk)選擇這次使用的 500GB 示範硬碟。
  2. 國家(Country)選擇 Taiwan,時區(Time zone)選擇 Asia/Taipei。
  3. 設定 root 密碼與可以收信的電子郵件(Email)。
  4. 管理介面(Management Interface)選擇接到現有路由器 LAN 的實體網卡。
  5. 主機名稱(Hostname)輸入 pve-l0.lab.home,最前面的名字之後就會是這個節點的顯示名稱。
  6. IP 位址(IP Address)、預設閘道(Gateway)與 DNS 先使用安裝器依現有路由器網路帶入的值。

image

圖(二)管理網路設定(Management Network Configuration)。畫面是 pve01 的實際範例,安裝 pve-l0 時應填入自己的 FQDN 與管理位址。

  1. 在摘要(Summary)再次確認硬碟、網卡與主機名稱,完成安裝後拔除 USB 並重新開機。

安裝前最後會看到摘要頁面,這裡要再次確認硬碟、檔案系統(Filesystem)、管理介面、主機名稱與 IP。下面使用的是早期安裝 pve01 的畫面,因此主機名稱與 IP 和 pve-l0 不同。操作 pve-l0 時仍應填入前面規劃的 pve-l0.lab.home 與實際取得的管理位址。

image

圖(三)Proxmox VE 安裝前的摘要(Summary)

圖(三)使用 ext4,而不是 ZFS。這台實驗機只有一顆 500GB 硬碟,無法建立 ZFS Mirror 或 RAIDZ 的磁碟冗餘,因此先使用預設的 ext4 與 LVM-thin。ext4、ZFS、RAID 與 Ceph 的差異會在下一篇詳細說明,今天先專注於安裝。

這裡先使用現有路由器參數,是因為 OPNsense 尚未部署完成。PVE 安裝完成後會使用安裝時寫入的管理設定,接著應到路由器依網卡的 MAC地址 建立固定租約,避免相同 IP 被分配給其他設備,也避免後續管理位置改變。

重新開機後,主控台會顯示 PVE 網頁管理介面位址:

https://目前的管理IP:8006/

從同一個 LAN 的電腦開啟網址後,以 rootLinux PAM standard authentication 登入。

PVE 登入畫面的驗證領域(Realm)代表帳號要交給哪一套系統驗證:

  • Linux PAM 標準驗證(Linux PAM standard authentication)使用 Linux 本機帳號與 PAM 驗證,例如安裝時建立的 root@pam。這類帳號同時存在於底層 Debian,具備對應權限與命令列環境(Shell)時也能登入主控台或 SSH。
  • Proxmox VE 驗證伺服器(Proxmox VE authentication server)使用 PVE 自己管理的帳號,例如 admin@pve。帳號保存在 PVE 設定中,適合搭配 PVE 的角色(Role)、存取控制清單(ACL)與雙因素驗證(2FA),但不會因此自動變成可以登入 Debian Shell 的 Linux 使用者。

現在是第一次登入,所以先使用安裝時建立的 root@pam。後續若要提供日常管理或多人使用,再建立個人帳號並依用途分配權限,不需要所有人共用 root。

本次實驗取得的管理位置是 https://192.168.0.146:8006/,因此從同一個 LAN 進入這個網址。
登入命令列環境後確認目前實際使用的名稱與網路:

hostname --fqdn
ip -4 -br address show vmbr0
ip route
cat /etc/resolv.conf

image

圖(四)從 PVE 命令列確認主機名稱、管理 IP、路由與 DNS

圖(四)是早期實驗畫面,當時輸入的主機名稱(Hostname)與搜尋網域(Search Domain)並不是最後規劃值。本文後續統一使用 pve-l0.lab.homelab.home

/etc/resolv.conf 是 Linux 名稱解析器(Resolver)的設定檔。圖中的 nameserver 192.168.0.1 表示 DNS 查詢(Query)會送到 192.168.0.1search 10.lab 則表示查詢短名稱時,系統會嘗試補上這個 DNS 後綴(Suffix)。依本系列規劃,後續搜尋網域應統一為 lab.home

因為 pve-l0 後續還要在三台 L1 PVE 裡啟動 KVM VM,所以除了 BIOS/UEFI,也要確認 L0 的 KVM 巢狀虛擬化已啟用:

cat /sys/module/kvm_intel/parameters/nested 2>/dev/null
cat /sys/module/kvm_amd/parameters/nested 2>/dev/null

依 CPU 類型只會有其中一個檔案,輸出 Y1 代表已啟用。若輸出 N0,只需執行符合自己 CPU 的其中一組設定,再重新開機:

# Intel
echo "options kvm-intel nested=Y" > /etc/modprobe.d/kvm-intel.conf

# AMD
echo "options kvm-amd nested=1" > /etc/modprobe.d/kvm-amd.conf

reboot

重新開機後再次執行前面的檢查。建立 L1 PVE VM 時仍要把 CPU Type 設為 host,兩個條件缺一不可。

看懂 PVE 命令列的重要目錄

PVE 的底層仍是 Debian,所以很多目錄如果操作過 Linux 系統多少應該會有點了解。登入命令列環境後常見的根目錄用途如下:

目錄 用途
/etc 系統與服務設定,例如網路、APT、SSH 與 PVE 設定
/var 會持續變動的資料,例如紀錄(Log)、快取(Cache)、套件狀態與 VM 備份
/usr 大部分程式、函式庫(Library)、指令與文件
/root root 使用者的家目錄
/home 一般 Linux 使用者的家目錄
/boot Linux 核心(Kernel)、初始記憶體檔案系統(Initramfs)與開機相關檔案
/dev 磁碟、終端機等裝置節點
/proc 行程(Process)與 Linux 核心狀態的虛擬檔案系統
/sys Linux 核心、驅動程式(Driver)與硬體狀態的虛擬檔案系統
/run 開機後產生的行程識別碼(Process ID,PID)、通訊端(Socket)與其他執行狀態
/tmp 暫存資料,不能當成永久儲存位置
/mnt、/media 手動或可移除裝置的掛載位置
/opt、/srv 額外軟體或服務資料,實際用途由管理者決定

在新版 Debian 中,/bin、/sbin 與 /lib 通常會透過 UsrMerge 指向 /usr 內對應目錄,看起來仍在根目錄,實際檔案則集中在 /usr。

PVE 管理時更需要注意下列位置:

路徑 PVE 中的用途
/etc/pve PVE 的 pmxcfs 設定檔系統,保存節點、VM、儲存空間(Storage)、權限、防火牆、叢集與高可用設定
/etc/pve/qemu-server 本節點的 QEMU/KVM VM 設定,例如 <VMID>.conf
/etc/pve/lxc 本節點的 LXC 容器(Container)設定
/etc/pve/storage.cfg PVE 儲存空間定義,加入叢集後會在節點間同步
/etc/network/interfaces PVE 使用的 Linux 網路設定,包括實體網路介面卡(NIC)與 Linux 橋接器(Linux Bridge)
/etc/apt/sources.list.d Debian、PVE 與 Ceph 套件庫(Repository)設定
/var/lib/vz 預設的 local 目錄型儲存空間,常見內容包括 ISO、容器範本(Container Template)與 vzdump 備份
/var/lib/pve-cluster/config.db pmxcfs 在本機保存的設定資料庫,不應在服務運作時手動編輯
/var/log/pve PVE 工作(Task)與相關執行紀錄
/dev/pve 預設 LVM 安裝下的邏輯磁碟區(Logical Volume)裝置

/etc/pve 看起來像一般資料夾,實際上是由 pve-cluster 提供的 pmxcfs。建立叢集後,其中設定會透過 Corosync 在節點間同步,也會負責避免重複的虛擬機識別碼(VMID)。不要把它當成一般目錄隨意搬動、修改權限或刪除檔案。

調整 PVE 與 Ceph 套件庫

Linux 透過套件庫(Repository)取得套件與更新,PVE 也不例外。PVE 安裝後預設啟用企業套件庫(Enterprise Repository),但這個套件來源需要有效訂閱。本 Lab 沒有企業訂閱(Enterprise Subscription),因此要先調整套件庫。

先到 pve-l0UpdatesRepositories 停用 PVE 企業套件庫。如果已有 Ceph 企業套件庫,也一併停用。Debian 的 trixietrixie-updatestrixie-security 基礎來源要保留。

接著回到命令列建立 /etc/apt/sources.list.d/proxmox.sources

Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

再編輯 /etc/apt/sources.list.d/ceph.sources 加入:

Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

完成設定後,回到 UpdatesRepositories,確認剛加入的 PVE、Ceph 無訂閱套件庫(No-Subscription Repository)已啟用,而兩個企業套件庫已停用:

image

圖(五)PVE 與 Ceph 無訂閱套件庫(No-Subscription Repository)

畫面上方的黃色訊息是在提醒無訂閱套件庫不建議直接用於正式環境,並不是設定失敗。

接著到 UpdatesRefresh,確認套件清單正常後執行 Upgrade。比較習慣命令列介面(Command-Line Interface,CLI)的話可以使用:

apt update
apt full-upgrade

如果成功的話 apt update 不會出現 401 Unauthorized,也不能混入其他 Debian 或 Ceph 大版本。

⭐ 建立內部 VLAN 使用的 vmbr2

Day 02 已經規劃 vmbr0 與 vmbr2 的用途,這裡直接完成設定:

  1. 選擇 pve-l0SystemNetwork
  2. CreateLinux Bridge 建立 Linux 橋接器。
  3. Name 填 vmbr2。
  4. 橋接器連接埠(Bridge ports)留白,IPv4 與 IPv6 都不設定。
  5. 勾選 VLAN aware
  6. Comment 填 L1 PVE VLAN Trunk,或其他你自己看得懂的註解。
  7. 建立後按 Apply Configuration

image

圖(六)在 L0 建立支援 VLAN 的 vmbr2

這座橋接器會連接 L1 PVE 與後續的 OPNsense,承載 VLAN 10~50 的帶標籤流量(Tagged Traffic)。它不是 Corosync 的 PVE 叢集通訊網路。Corosync 會在後續使用 L0 vmbr510.77.80.0/24 獨立網段。

⭐ 建立三台 L1 PVE

先到 localISO ImagesUpload 上傳 PVE ISO,再建立 VM 101:

  1. VM ID 填 101,Name 填 pve01。
  2. OS 選擇上傳的 PVE ISO,Guest OS Type 選 Linux。
  3. System Disk 使用 local-lvm,Bus 選 SCSI,容量設為 80GB。
  4. CPU 設定 1 Socket、4 Core,CPU Type 選 host
  5. RAM 設為 12288MiB,不啟用記憶體氣球(Ballooning)。
  6. 第一張 VirtIO NIC 接到 vmbr0,VLAN Tag 留白。
  7. 建立後到 VM 101 → HardwareAddNetwork Device,再加入第二張 VirtIO NIC,接到 vmbr2,VLAN Tag 同樣留白。

image

圖(七)替 L1 PVE 加入連接 vmbr2 的第二張 VirtIO NIC

CPU Type 使用 host,是為了把實體 CPU 的虛擬化能力傳給 L1 PVE。如果 BIOS 或 KVM 沒有允許巢狀虛擬化,後面在 L1 啟動 VM 時就會出現 KVM Virtualisation Not Available 的錯誤。

pve01 尚未安裝作業系統前,直接右鍵 VM 101,使用複製(Clone)功能建立 VM 102、103,再分別命名為 pve02pve03

三台 VM 的 MAC 位址會由 PVE 自動設定成不同值。這一天先建立管理與 VLAN 中繼(Trunk)兩張網卡。Ceph 與 Corosync 使用的獨立網路會在後續文章再加入。

⭐ 安裝 pve01、pve02 與 pve03

三台依序啟動並安裝 PVE:

  1. 目標磁碟(Target Disk)選擇該 VM 的 80GB 虛擬磁碟。
  2. 管理介面(Management Interface)選擇第一張網卡,也就是連接 vmbr0 的 NIC。
  3. 主機名稱(Hostname)依序填入 pve01.lab.homepve02.lab.homepve03.lab.home
  4. IP、預設閘道(Gateway)與 DNS 使用現有路由器網路帶入的數值。
  5. 安裝完成後重新開機,到 Hardware 移除 CD/DVD Drive 內的安裝 ISO。
  6. 記下每台主控台顯示的網頁管理介面網址。
  7. 三台都重複執行前面的 PVE 與 Ceph 套件庫設定。

Day 15 才會把一般管理流量、DNS 與預設閘道(Default Gateway)切到 OPNsense。在那之前,還是推薦先讓 IP 固定。

image

圖(八)三台 L1 PVE 完成安裝。畫面中的 fw01 是後續建立的 VM,不屬於 Day 03 的操作內容。

完成後的狀態

完成後,pve-l0、pve01、pve02、pve03 都能透過現有路由器網路登入。三台 L1 PVE 的 net0 負責目前的安裝與管理,net1 則已接上 vmbr2,準備承載後續 VLAN Trunk。

  • 已安裝並更新的 pve-l0
  • 已建立的 VLAN-aware vmbr2
  • 已完成安裝的 pve01pve02pve03
  • 四台 PVE 的 FQDN、管理 IP 與固定租約紀錄。
  • PVE 與 Ceph 套件庫已切換到對應的無訂閱來源。

下一篇預告

下一篇會從檔案系統、分割表與 RAID 開始,介紹 LVM、ZFS、快照、備份與共享儲存各自解決什麼問題。Ceph 使用的網路與空白 OSD 磁碟,則會在 Day 05 完成前置準備。


參考資料


上一篇
Day 02|高可用架構與私有雲部署藍圖:叢集、複寫、備份、硬體與網路規劃
系列文
從裸機到叢集:以 Proxmox VE、Ceph、OPNsense 與 PostgreSQL HA 建立可驗證的安全私有雲3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言