Cloud-Init支持
Cloud-Init是事實上的多分發包,它處理虛擬機實例的早期初始化。使用Cloud-Init,可以在虛擬機管理程序端配置網絡設備和ssh密鑰。當VM首次啟動時,VM內的Cloud-Init軟件將應用這些設置。
許多Linux發行版都提供了即用型Cloud-Init映像,主要是為OpenStack設計的。這些圖像也適用於Proxmox VE。雖然獲得這樣的即用型圖像看起來很方便,但我們通常建議您自己准備圖像。優點是您將確切知道已安裝的內容,這有助於您以后輕松自定義圖像以滿足您的需求。
創建了這樣的Cloud-Init映像后,我們建議將其轉換為VM模板。從VM模板中,您可以快速創建鏈接克隆,因此這是推出新VM實例的快速方法。您只需在啟動新VM之前配置網絡(可能還有ssh密鑰)。
我們建議使用基於SSH密鑰的身份驗證登錄Cloud-Init配置的VM。也可以設置密碼,但這不如使用基於SSH密鑰的身份驗證安全,因為Proxmox VE需要在Cloud-Init數據中存儲該密碼的加密版本。
Proxmox VE生成ISO映像以將Cloud-Init數據傳遞給VM。為此,所有Cloud-Init VM都需要具有指定的CDROM驅動器。此外,許多Cloud-Init圖像都假設有一個串行控制台,因此建議添加一個串行控制台並將其用作這些VM的顯示器。
准備Cloud-Init模板
第一步是准備VM。基本上你可以使用任何VM。只需在要准備的VM中安裝Cloud-Init軟件包即可。在基於Debian / Ubuntu的系統上,這很簡單:
apt-get install cloud-init
已有許多發行版提供了現成的Cloud-Init圖像(以.qcow2文件形式提供),因此您可以簡單地下載和導入此類圖像。對於以下示例,我們將使用Ubuntu提供的雲圖像,網址為https://cloud-images.ubuntu.com。
#下載圖片 wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img #創建一個新的VM qm create 9000 --memory 2048 --net0 virtio,bridge = vmbr0 #將下載的磁盤導入local-lvm存儲 qm importdisk 9000 bionic-server-cloudimg-amd64.img local-lvm #finally將新磁盤作為scsi驅動器附加到VM qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-1
Ubuntu Cloud-Init映像需要virtio-scsi-pci 控制器類型用於SCSI驅動器。 |
下一步是配置CDROM驅動器,該驅動器將用於將Cloud-Init數據傳遞給VM。
qm set 9000 --ide2 local-lvm:cloudinit
要能夠直接從Cloud-Init映像引導,請將bootdisk參數設置 為scsi0,並將BIOS限制為僅從磁盤引導。這將加快啟動速度,因為VM BIOS會跳過可啟動CDROM的測試。
qm set 9000 --boot c --bootdisk scsi0
還要配置串行控制台並將其用作顯示器。許多Cloud-Init圖像依賴於此,因為它是OpenStack圖像的要求。
qm設置9000 --serial0 socket --vga serial0
在最后一步中,將VM轉換為模板很有幫助。然后,您可以從此模板快速創建鏈接克隆。從VM模板部署比創建完整克隆(副本)快得多。
qm模板9000
部署Cloud-Init模板
您可以通過克隆輕松部署此類模板:
qm clone 9000 123 --name ubuntu2
然后配置用於身份驗證的SSH公鑰,並配置IP設置:
qm設置123 --sshkey~ / .ssh / id_rsa.pub qm set 123 --ipconfig0 ip = 10.0.10.123 / 24,gw = 10.0.10.1
您還可以僅使用一個命令配置所有Cloud-Init選項。我們簡單地拆分了上面的例子來分離減少行長度的命令。另外,請確保為您的特定環境采用IP設置。
Cloud-Init特定選項
- cicustom:[meta = <volume>] [,network = <volume>] [,user = <volume>]
-
指定自定義文件以在開始時替換自動生成的文件。
- meta = <volume>
-
指定包含通過cloud-init傳遞給VM的所有元數據的自定義文件。這是提供者特定的含義configdrive2和nocloud不同。
- network = <volume>
-
指定包含通過cloud-init傳遞給VM的所有網絡數據的自定義文件。
- user = <volume>
-
指定包含通過cloud-init傳遞給VM的所有用戶數據的自定義文件。
- cipassword:<string>
-
分配用戶的密碼。通常不建議使用它。請改用ssh鍵。另請注意,較舊的cloud-init版本不支持散列密碼。
- citype:<configdrive2 | nocloud>
-
指定cloud-init配置格式。默認值取決於配置的操作系統類型(ostype。我們使用Linux 的nocloud格式和Windows的configdrive2。
- ciuser:<string>
-
用於更改ssh密鑰和密碼的用戶名,而不是圖像配置的默認用戶。
- ipconfig [n]:[gw = <GatewayIPv4>] [,gw6 = <GatewayIPv6>] [,ip = <IPv4Format / CIDR>] [,ip6 = <IPv6Format / CIDR>]
-
為相應的接口指定IP地址和網關。
IP地址使用CIDR表示法,網關是可選的,但需要指定相同類型的IP。
特殊字符串dhcp可用於IP地址以使用DHCP,在這種情況下,不應提供顯式網關。對於IPv6,特殊字符串auto可用於使用無狀態自動配置。
如果啟用了cloud-init且既未指定IPv4也未指定IPv6地址,則默認為在IPv4上使用dhcp。
- gw = <GatewayIPv4>
-
IPv4流量的默認網關。
需要選項:ip - gw6 = <GatewayIPv6>
-
IPv6流量的默認網關。
需要選項:ip6 - ip = <IPv4Format / CIDR>(默認= dhcp)
-
CIDR格式的IPv4地址。
- ip6 = <IPv6Format / CIDR>(默認= dhcp)
-
CIDR格式的IPv6地址。
- nameserver:<string>
-
設置容器的DNS服務器IP地址。如果既沒有設置searchdomain也沒有設置nameserver,Create將自動使用主機中的設置。
- searchdomain:<string>
-
設置容器的DNS搜索域。如果既沒有設置searchdomain也沒有設置nameserver,Create將自動使用主機中的設置。
- sshkeys:<string>
-
設置公共SSH密鑰(每行一個密鑰,OpenSSH格式)。