一鍵搞定個(gè)性化云鏡像!Cloud-Init 神操作揭秘
在虛擬化環(huán)境中,自動(dòng)化配置虛擬機(jī)(VM)是提高效率的關(guān)鍵。Proxmox VE(PVE)是一款流行的開源虛擬化平臺(tái),而Cloud-Init是一種用于初始化云實(shí)例的工具。結(jié)合PVE和Cloud-Init,我們可以快速創(chuàng)建和配置虛擬機(jī)鏡像。本教程將詳細(xì)介紹如何在PVE上利用Cloud-Init構(gòu)造自己的鏡像。
什么是 Cloud-Init?
Cloud-Init 是一個(gè)用于初始化云實(shí)例的開源工具。它被廣泛應(yīng)用于各種云計(jì)算平臺(tái),如Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform (GCP)、OpenStack等。Cloud-Init允許在實(shí)例首次啟動(dòng)時(shí),自動(dòng)化執(zhí)行各種配置任務(wù),如設(shè)置主機(jī)名、用戶和組、安裝軟件包、配置網(wǎng)絡(luò)等。
Cloud-Init 的工作原理
Cloud-Init在實(shí)例的首次啟動(dòng)時(shí)運(yùn)行,并根據(jù)用戶提供的元數(shù)據(jù)和用戶數(shù)據(jù)執(zhí)行配置。這些數(shù)據(jù)通常以YAML格式提供,可以包含以下幾類信息:
- Meta-data(元數(shù)據(jù)):描述實(shí)例的基本信息,如實(shí)例ID、主機(jī)名等。
- User-data(用戶數(shù)據(jù)):定義實(shí)例啟動(dòng)時(shí)要執(zhí)行的具體配置和腳本。
前提條件
一臺(tái)運(yùn)行Proxmox VE的服務(wù)器:
PVE服務(wù)器
基本的Linux命令行操作知識(shí):
官方鏡像下載
# cloud images下載地址
# centos:
http://cloud.centos.org/centos/
# ubuntu:
http://cloud-images.ubuntu.com/releases/
# debian:
https://cloud.debian.org/images/cloud/OpenStack/
# fedora:
https://alt.fedoraproject.org/cloud/
# rehat7:
https://access.redhat.com/downloads/content/69/ver=/rhel---7/x86_64/product-downloads
# opensuse:
https://software.opensuse.org/distributions/leap#JeOS-ports
構(gòu)造鏡像模板
在本教程中,我們將使用Ubuntu鏡像作為示例 :
(1) 先從官方下載ubuntu的云鏡像。執(zhí)行如下命令:
wget https://cloud-images.ubuntu.com/jammy/20240601/jammy-server-cloudimg-amd64-disk-kvm.img
(2) 使用下面的命令創(chuàng)建虛擬機(jī):
VM_ID=999
qm create $VM_ID --cores 4 --memory 4096 --name ubuntu --net0 virtio,bridge=vmbr0
(3) 給虛擬機(jī)導(dǎo)入鏡像
qm importdisk $VM_ID jammy-server-cloudimg-amd64-disk-kvm.img local-lvm
(4) 掛載創(chuàng)建好的硬盤到虛擬機(jī)
qm set $VM_ID --sata0 local-lvm:vm-$VM_ID-disk-0
(5) 創(chuàng)建cloudinit
qm set $VM_ID --sata1 local-lvm:cloudinit
(6) 設(shè)置默認(rèn)啟動(dòng)項(xiàng)
qm set $VM_ID --boot c --bootdisk sata0
(7) 設(shè)置用戶名和密碼
qm set $VM_ID --ciuser root --cipassword 123123
(8) 配置網(wǎng)絡(luò)
qm set $VM_ID --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1,ip6=dhcp #靜態(tài)配置
qm set $VM_ID --ipconfig0 ip=dhcp,ip6=dhcp #動(dòng)態(tài)配置
(9) 啟動(dòng)虛擬機(jī)
qm start $VM_ID
(10) 修改Cloud-init的配置 開啟PasswordAuthentication認(rèn)證,編輯/etc/cloud/cloud.cfg這個(gè)文件,添加 ssh_pwauth:true,如下圖:
添加這個(gè)配置后,會(huì)在對(duì)應(yīng)命令添加如下配置文件。
root@ubuntu:~# cat /etc/ssh/sshd_config.d/50-cloud-init.conf
PasswordAuthentication yes
修改SSH配置文件,允許root用戶登錄
PermitRootLogin yes
(11) 添加國內(nèi)的鏡像源,本案中添加清華大學(xué)源為例。
在/etc/apt/sources.list.d創(chuàng)建一個(gè)名為tsinghua.sources的文件,添加如下內(nèi)容:
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 默認(rèn)注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋
# Types: deb-src
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: noble noble-updates noble-backports
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 以下安全更新軟件源包含了官方源與鏡像站配置,如有需要可自行修改注釋切換
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# Types: deb-src
# URIs: http://security.ubuntu.com/ubuntu/
# Suites: noble-security
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 預(yù)發(fā)布軟件源,不建議啟用
# Types: deb
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: noble-proposed
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# # Types: deb-src
# # URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# # Suites: noble-proposed
# # Components: main restricted universe multiverse
# # Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
(11) 所有配置完成后,清除歷史命令并關(guān)機(jī)
history -c && init 0
(12) 把該虛擬機(jī)轉(zhuǎn)成模板
qm template $VM_ID
使用腳本批量創(chuàng)建虛擬機(jī)
批量創(chuàng)建需求如下:
- 利用虛擬機(jī)模板 999,批量創(chuàng)建 3 個(gè)虛擬機(jī)
- 新建的虛擬機(jī) ID 為 20x,虛擬機(jī)名稱為 demo-vmx
- 指定存儲(chǔ)名稱為 local
- 每個(gè)虛擬機(jī) 2 插槽 2 核心即 4 線程,內(nèi)存 4G
- 每個(gè)虛擬機(jī)添加一塊 50G 的數(shù)據(jù)盤
- 每個(gè)虛擬機(jī)添加一個(gè)內(nèi)網(wǎng)網(wǎng)卡,即網(wǎng)絡(luò)設(shè)備 (net0),網(wǎng)卡 IP 為 192.168.31.24x,網(wǎng)關(guān)為 192.168.31.254
- 設(shè)置系統(tǒng) root 用戶的密碼為 password
for id in $(seq 1 1 3)
do
qm clone 999 24${id} --name demo-vm${id} -full true -storage local
qm set 24${id} --sockets 2 --cores 2 --memory 4096
qm set 24${id} --scsi1 iothread=1,local:100
qm set 24${id} --nameserver 114.114.114.114 --ipconfig1 ip=192.168.31.24${id}/24,gw=192.168.31.254 --ciuser root --cipassword password
qm start 24${id}
done
總結(jié)
Cloud-Init 是一個(gè)強(qiáng)大且靈活的工具,可以顯著簡(jiǎn)化云實(shí)例的初始化和配置過程。通過預(yù)先定義好的配置文件,用戶可以自動(dòng)化執(zhí)行各種初始化任務(wù),提高部署效率和一致性。無論是在公共云還是私有云環(huán)境中,Cloud-Init 都是一款不可或缺的配置管理工具。