PXE 開機安裝
從版本 0.2.0 開始,Harvester 可以自動安裝。本文件提供使用 PXE 開機進行自動安裝的範例。
我們建議使用 iPXE 執行網路開機。它比傳統 PXE 開機程式具有更多功能,且可能在現代網卡中可用。如果您的網卡沒有 iPXE 韌體,可以先從 TFTP 伺服器載入 iPXE 韌體映像。
要查看 iPXE 腳本範例,請造訪 Harvester iPXE Examples。
先決條件
節點需要至少 8 GiB 的 RAM,因為安裝程式會將完整的 ISO 檔案載入到 tmpfs 中。
準備 HTTP 伺服器
需要 HTTP 伺服器來提供開機檔案。
假設 NGINX HTTP 伺服器的 IP 是 10.100.0.10,它透過路徑 http://10.100.0.10/ 提供 /usr/share/nginx/html/ 目錄。
準備開機檔案
-
從 Harvester releases 頁面下載所需檔案。
- ISO:
harvester-<version>-amd64.iso - 核心:
harvester-<version>-vmlinuz-amd64 - initrd:
harvester-<version>-initrd-amd64 - rootfs squashfs 映像:
harvester-<version>-rootfs-amd64.squashfs
- ISO:
-
提供檔案服務。
將下載的檔案複製或移動到適當的位置,以便可以透過 HTTP 伺服器下載。例如:
sudo mkdir -p /usr/share/nginx/html/harvester/
sudo cp /path/to/harvester-<version>-amd64.iso /usr/share/nginx/html/harvester/
sudo cp /path/to/harvester-<version>-vmlinuz-amd64 /usr/share/nginx/html/harvester/
sudo cp /path/to/harvester-<version>-initrd-amd64 /usr/share/nginx/html/harvester/
sudo cp /path/to/harvester-<version>-rootfs-amd64.squashfs /usr/share/nginx/html/harvester/
準備 iPXE 開機腳本
執行自動安裝時,有兩種模式:
CREATE:我們正在安裝節點以建構初始 Harvester 叢集。JOIN:我們正在安裝節點以加入現有的 Harvester 叢集。
Harvester v1.3.0 引入了可以分配給節點的角色以支援不同場景。有關更多資訊,請參閱 Harvester 配置。
CREATE 模式
安全風險:以下配置文件包含應保密的憑證。請勿公開配置文件。
為 CREATE 模式建立名為 config-create.yaml 的 Harvester 配置文件。根據需要修改值:
# cat /usr/share/nginx/html/harvester/config-create.yaml
scheme_version: 1
token: token # 替換為所需的令牌
os:
hostname: node1 # 設定主機名稱。如果 DHCP 伺服器提供主機名稱,可以省略此項
ssh_authorized_keys:
- ssh-rsa ... # 替換為您的公開金鑰
password: p@ssword # 替換為您的密碼
ntp_servers:
- 0.suse.pool.ntp.org
- 1.suse.pool.ntp.org
install:
mode: create
management_interface: # 自 v1.1.0 起可用
interfaces:
- name: ens5
default_route: true
method: dhcp
bond_options:
mode: balance-tlb
miimon: 100
device: /dev/sda # 要安裝的目標磁碟
# data_disk: /dev/sdb # 建議使用單獨的磁碟來儲存 VM 資料
iso_url: http://10.100.0.10/harvester/harvester-<version>-amd64.iso
# tty: ttyS1,115200n8 # 適用於沒有 VGA 控制台的機器
vip: 10.100.0.99 # 存取 Harvester GUI 的 VIP。確保該 IP 可用
vip_mode: static # 或 dhcp,詳情請查看配置文件
# vip_hw_addr: 52:54:00:ec:0e:0b # 當 vip_mode 為 static 時留空
對於需要使用 CREATE 模式安裝的機器,以下是使用上述配置啟動核心的 iPXE 腳本:
#!ipxe
kernel harvester-<version>-vmlinuz ip=dhcp net.ifnames=1 rd.cos.disable rd.noverifyssl console=tty1 root=live:http://10.100.0.10/harvester/rootfs.squashfs harvester.install.automatic=true harvester.install.config_url=http://10.100.0.10/harvester/config-create.yaml
initrd harvester-<version>-initrd
boot
這假設 iPXE 腳本儲存在 /usr/share/nginx/html/harvester/ipxe-create。
如果您有多個網路介面,可以利用 dracut 的 ip= 參數來指定開機介面和 dracut 支援的任何其他網路配置(例如,ip=eth1:dhcp)。
請參閱 man dracut.cmdline 以獲取更多資訊。
僅使用 ip= 參數來指定開機介面,因為我們只支援單一 ip= 參數。
JOIN 模式
安全風險:以下配置文件包含應保密的憑證。請勿公開配置文件。
為 JOIN 模式建立名為 config-join.yaml 的 Harvester 配置文件。根據需要修改值:
# cat /usr/share/nginx/html/harvester/config-join.yaml
scheme_version: 1
server_url: https://10.100.0.99:443 # 應為「CREATE」配置中設定的 VIP
token: token
os:
hostname: node2
ssh_authorized_keys:
- ssh-rsa ... # 替換為您的公開金鑰
password: p@ssword # 替換為您的密碼
dns_nameservers:
- 1.1.1.1
- 8.8.8.8
install:
mode: join
management_interface: # 自 v1.1.0 起可用
interfaces:
- name: ens5
default_route: true
method: dhcp
bond_options:
mode: balance-tlb
miimon: 100
device: /dev/sda # 要安裝的目標磁碟
# data_disk: /dev/sdb # 建議使用單獨的磁碟來儲存 VM 資料
iso_url: http://10.100.0.10/harvester/harvester-<version>-amd64.iso
# tty: ttyS1,115200n8 # 適用於沒有 VGA 控制台的機器
請注意,mode 是 join,並且需要提供 server_url。
對於需要以 JOIN 模式安裝的機器,以下是使用上述配置啟動核心的 iPXE 腳本:
#!ipxe
kernel harvester-<version>-vmlinuz ip=dhcp net.ifnames=1 rd.cos.disable rd.noverifyssl console=tty1 root=live:http://10.100.0.10/harvester/rootfs.squashfs harvester.install.automatic=true harvester.install.config_url=http://10.100.0.10/harvester/config-join.yaml
initrd harvester-<version>-initrd
boot
這假設 iPXE 腳本儲存在 /usr/share/nginx/html/harvester/ipxe-join。
DHCP 伺服器配置
在 PXE 安裝場景中,配置 DHCP 伺服器時需要添加 routers 選項(option routers)。此選項用於在 Harvester 主機上添加預設路由。沒有預設路由,節點將無法啟動。
在 ISO 安裝場景中,當管理網路介面處於 DHCP 模式時,配置 DHCP 伺服器時也需要添加 routers 選項(option routers)。
例如:
Harvester Host:~ # ip route
default via 192.168.122.1 dev mgmt-br proto dhcp
有關更多資訊,請參閱 ISC DHCPv4 Option Configuration。
以下是如何配置 ISC DHCP 伺服器以提供 iPXE 腳本的範例:
option architecture-type code 93 = unsigned integer 16;
subnet 10.100.0.0 netmask 255.255.255.0 {
option routers 10.100.0.10;
option domain-name-servers 192.168.2.1;
range 10.100.0.100 10.100.0.253;
}
group {
# create 群組
if exists user-class and option user-class = "iPXE" {
# iPXE 開機
if option architecture-type = 00:07 {
filename "http://10.100.0.10/harvester/ipxe-create-efi";
} else {
filename "http://10.100.0.10/harvester/ipxe-create";
}
} else {
# PXE 開機
if option architecture-type = 00:07 {
# UEFI
filename "ipxe.efi";
} else {
# Non-UEFI
filename "undionly.kpxe";
}
}
host node1 { hardware ethernet 52:54:00:6b:13:e2; }
}
group {
# join 群組
if exists user-class and option user-class = "iPXE" {
# iPXE 開機
if option architecture-type = 00:07 {
filename "http://10.100.0.10/harvester/ipxe-join-efi";
} else {
filename "http://10.100.0.10/harvester/ipxe-join";
}
} else {
# PXE 開機
if option architecture-type = 00:07 {
# UEFI
filename "ipxe.efi";
} else {
# Non-UEFI
filename "undionly.kpxe";
}
}
host node2 { hardware ethernet 52:54:00:69:d5:92; }
}
配置文件宣告了一個子網路和兩個群組。第一個群組用於使用 CREATE 模式開機的主機,另一個用於 JOIN 模式。預設情況下選擇 iPXE 路徑,但如果偵測到 PXE 客戶端,則根據客戶端架構提供 iPXE 映像。請先準備這些映像和 TFTP 伺服器。
網際網路系統協會(ISC)於 2022 年宣布 ISC DHCP 最終生命週期結束(EOL)。鼓勵 ISC DHCP 使用者遷移到更新、功能更豐富的 Kea DHCP,這是 ISC 為更現代網路環境設計的。如果您已經在使用 Kea DHCPv4 伺服器,請查看以下配置範例。有關更多資訊,請參閱 Kea DHCPv4 Configuration。
"client-classes": [
{
"name": "iPXE UEFI/CREATE",
"test": "option[user-class].exists and substring(option[user-class].hex,0,4) == 'iPXE' and option[client-system].hex == 0x0007",
"boot-file-name": "http://10.100.0.10/harvester/ipxe-create-efi",
"only-if-required": true
},
{
"name": "iPXE non-UEFI/CREATE",
"test": "option[user-class].exists and substring(option[user-class].hex,0,4) == 'iPXE' and not option[client-system].hex == 0x0007",
"boot-file-name": "http://10.100.0.10/harvester/ipxe-create",
"only-if-required": true
},
{
"name": "iPXE UEFI/JOIN",
"test": "option[user-class].exists and substring(option[user-class].hex,0,4) == 'iPXE' and option[client-system].hex == 0x0007",
"boot-file-name": "http://10.100.0.10/harvester/ipxe-join-efi",
"only-if-required": true
},
{
"name": "iPXE non-UEFI/JOIN",
"test": "option[user-class].exists and substring(option[user-class].hex,0,4) == 'iPXE' and not option[client-system].hex == 0x0007",
"boot-file-name": "http://10.100.0.10/harvester/ipxe-join",
"only-if-required": true
},
{
"name": "PXE UEFI",
"test": "option[user-class].exists and not substring(option[user-class].hex,0,4) == 'iPXE' and option[client-system].hex == 0x0007",
"next-server": "10.100.0.20",
"boot-file-name": "ipxe.efi"
},
{
"name": "PXE non-UEFI",
"test": "option[user-class].exists and not substring(option[user-class].hex,0,4) == 'iPXE' and option[client-system].hex == 0x0007",
"next-server": "10.100.0.20",
"boot-file-name": "undionly.kpxe"
}
]
"subnet4": [
{
"subnet": "10.100.0.0/24",
"pools": [
{
"pool": "10.100.0.100 - 10.100.0.199",
"require-client-classes" : [ "iPXE UEFI/CREATE", "iPXE non-UEFI/CREATE" ]
},
{
"pool": "10.100.0.200 - 10.100.0.253",
"require-client-classes" : [ "iPXE UEFI/JOIN", "iPXE non-UEFI/JOIN" ]
}
],
"option-data": [
{
"name": "routers",
"data": "10.100.0.10"
}
],
"reservations": [
// 為以 CREATE 模式開機的主機分配 IP 位址
{
"hw-address": "52:54:00:6b:13:e2",
"ip-address": "10.100.0.101"
},
// 為以 JOIN 模式開機的主機分配 IP 位址
{
"hw-address": "52:54:00:69:d5:92",
"ip-address": "10.100.0.201"
}
]
}
]
Harvester 配置
有關 Harvester 配置的更多資訊,請參閱 Harvester 配置頁面。
預設 情況下,第一個節點將成為叢集的管理節點。當有 3 個節點時,最先加入的另外 2 個節點會自動提升為管理節點以組成 HA 叢集。
如果您想從不同區域提升管理節點,可以在 os.labels 配置中添加節點標籤 topology.kubernetes.io/zone。在這種情況下,至少需要三個不同的區域。
使用者也可以透過核心參數提供配置。例如,要指定 CREATE 安裝模式,使用者可以在開機時傳遞 harvester.install.mode=create 核心參數。透過核心參數傳遞的值優先於配置文件中指定的值。
UEFI HTTP 開機支援
UEFI 韌體支援從 HTTP 伺服器載入開機映像。本節示範如何使用 UEFI HTTP 開機來載入 iPXE 程式並執行自動安裝。
提供 iPXE 程式服務
從 http://boot.ipxe.org/ipxe.efi 下載 iPXE UEFI 程式,並確保可以從 HTTP 伺服器下載 ipxe.efi。例如:
cd /usr/share/nginx/html/harvester/
wget http://boot.ipxe.org/ipxe.efi
現在可以從本地 http://10.100.0.10/harvester/ipxe.efi 下載該檔案。
DHCP 伺服器配置
如果使用者計劃透過先獲取動態 IP 來使用 UEFI HTTP 開機功能,DHCP 伺服器需要在看到此類請求時提供 iPXE 程式 URL。以下是更新的 ISC DHCP 伺服器群組範例:
group {
# create 群組
if exists user-class and option user-class = "iPXE" {
# iPXE 開機
if option architecture-type = 00:07 {
filename "http://10.100.0.10/harvester/ipxe-create-efi";
} else {
filename "http://10.100.0.10/harvester/ipxe-create";
}
} elsif substring (option vendor-class-identifier, 0, 10) = "HTTPClient" {
# UEFI HTTP 開機
option vendor-class-identifier "HTTPClient";
filename "http://10.100.0.10/harvester/ipxe.efi";
} else {
# PXE 開機
if option architecture-type = 00:07 {
# UEFI
filename "ipxe.efi";
} else {
# Non-UEFI
filename "undionly.kpxe";
}
}
host node1 { hardware ethernet 52:54:00:6b:13:e2; }
}
elsif substring 語句是新增的,當它看到 UEFI HTTP 開機 DHCP 請求時,會提供 http://10.100.0.10/harvester/ipxe.efi。客戶端獲取 iPXE 程式並執行後,iPXE 程式將再次發送 DHCP 請求,並從 URL http://10.100.0.10/harvester/ipxe-create-efi 載入 iPXE 腳本。
如果您想在 Kea DHCPv4 伺服器上啟用 UEFI HTTP 開機,您必須在 client-classes 的末尾添加一個新的 client-class。
範例:
{
"name": "HTTP",
"test": "substring(option[vendor-class-identifier].hex,0,10) == 'HTTPClient'",
"option-data": [
{
"name": "vendor-class-identifier",
"data": "HTTPClient"
}
],
"boot-file-name": "http://10.100.0.10/harvester/ipxe.efi"
}
UEFI 開機的 iPXE 腳本
對於 UEFI 開機,必須在核心參數中指定 initrd 映像。以下是 CREATE 模式的更新版 iPXE 腳本。
#!ipxe
kernel harvester-<version>-vmlinuz initrd=harvester-<version>-initrd ip=dhcp net.ifnames=1 rd.cos.disable rd.noverifyssl console=tty1 root=live:http://10.100.0.10/harvester/rootfs.squashfs harvester.install.automatic=true harvester.install.config_url=http://10.100.0.10/harvester/config-create.yaml
initrd harvester-<version>-initrd
boot
參數 initrd=harvester-<version>-initrd 是必需的。
標記 VLAN 網路開機
要透過標記 VLAN 網路執行 PXE 開機,Harvester 主機必須配置以下 BIOS/UEFI 設定:
- VLAN ID 設定為網路識別碼
- 開機協定設定為
PXE - 啟用 DHCP
成功的網路開機可能需要根據主機規格進行額外的配置更改。進行這些更改的方法也可能有所不同。例如,在 HPE ProLiant DL360 Gen9 伺服器上,您只能透過網卡韌體更改開機協定和 VLAN ID。
有關更多資訊,請查閱您伺服器的文件。
為確保在開機時使用正確的網路介面,請使用以下 dracut 參數更新 iPXE kernel 命令:
BOOTIF=<mac_address>- 使用名為<interface_name>的介面ifname=<interface_name>:<mac_address>- 將網路裝置名稱<interface_name>分配給具有 MAC<mac_address>的介面vlan=<vlan_id>:<interface_name>- 在<interface_name>上設定名為<vlan_id>的 VLAN 裝置
例如,上面給出的 iPXE 腳本可以更新如下:
#!ipxe
kernel harvester-<version>-vmlinuz ip=dhcp net.ifnames=1 rd.cos.disable rd.noverifyssl console=tty1 root=live:http://10.100.0.10/harvester/rootfs.squashfs harvester.install.automatic=true harvester.install.config_url=http://10.100.0.10/harvester/config-create.yaml BOOTIF=<mac_address> ifname=<interface_name>:<mac_address> vlan=<vlan_id>:<interface_name>
initrd harvester-<version>-initrd
boot
有用的核心參數
除了 Harvester 配置外,您還可以指定其他在不同場景中有用的核心參數。
另請參閱 dracut.cmdline(7)。
ip=dhcp
如果您有多個網路介面,可以添加 ip=dhcp 參數以從所有介面的 DHCP 伺服器獲取 IP。
rd.net.dhcp.retry=<cnt>
無法從 DHCP 伺服器獲取 IP 將導致 iPXE 開機失敗。您可以添加參數 rd.net.dhcp.retry=<cnt> 以重試 DHCP 請求 <cnt> 次。
harvester.install.skipchecks=true
如果硬體檢查失敗(因為不符合生產使用的最低要求),安裝將停止。要覆蓋此行為,請設定核心參數 harvester.install.skipchecks=true。設為 true 時,警告訊息仍會儲存到 /var/log/console.log,但即使不符合生產使用的硬體要求,安裝也會繼續進行。
harvester.install.with_net_images=true
安裝程式在安裝期間不會預載映像,而是在安裝完成後從網際網路拉取所有必要的映像。在大多數情況下不建議使用此參數。有關更多資訊,請參閱網路安裝 ISO。
harvester.install.mode=install
在開機時自動以安裝模式啟動安裝程式。
console=tty1
指定在開機時啟動的控制台終端機類型。
harvester.install.tty=tty1
指定在哪個終端機控制台上啟動安裝程式。
net.ifnames=1
在安裝程式中啟用可預測的網路介面名稱,這將與 Harvester 安裝後的系統預設值匹配。這允許系統使用正確的介面。