主题
worker-vm1 虚拟机创建文档
虚拟机配置
| 项目 | 配置 |
|---|---|
| 名称 | worker-vm1 |
| CPU / 内存 | 16 核 / 32G |
| 磁盘 | 200G(qcow2,根分区已自动扩展) |
| 存储路径 | /kvm/lib/libvirt/kvm/worker/worker-vm1.qcow2 |
| 操作系统 | Rocky 9(GenericCloud 云镜像) |
| 网络 | default NAT(virbr0),已开通外网 |
| IP 地址 | 192.168.122.138 |
| 登录用户 / 密码 | xxx / ai-ear.cn |
创建步骤
1. 创建磁盘
bash
STORAGE_DIR=/kvm/lib/libvirt/kvm/worker
VM=worker-vm1
TEMPLATE=/kvm/lib/libvirt/kvm/Rocky-9-GenericCloud-Base.latest.x86_64.qcow2
mkdir -p "$STORAGE_DIR"
qemu-img convert -O qcow2 "$TEMPLATE" "$STORAGE_DIR/${VM}.qcow2"
qemu-img resize "$STORAGE_DIR/${VM}.qcow2" 200G2. 生成 cloud-init 配置 ISO
bash
CI_DIR="$STORAGE_DIR/cloud-init-$VM"
rm -rf "$CI_DIR"
mkdir -p "$CI_DIR"
cat > "$CI_DIR/meta-data" <<EOF
instance-id: ${VM}-$(date +%s)
local-hostname: ${VM}
EOF
cat > "$CI_DIR/user-data" <<EOF
#cloud-config
chpasswd:
list: |
root:ai-ear.cn
expire: false
ssh_pwauth: true
disable_root: false
users: []
growpart:
mode: auto
devices: ['/']
resize_rootfs: true
runcmd:
- sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
- systemctl restart sshd
EOF
mkisofs -output "$STORAGE_DIR/${VM}-cidata.iso" -volid cidata -joliet -rock \
"$CI_DIR/user-data" "$CI_DIR/meta-data"
rm -rf "$CI_DIR"3. 创建并启动虚拟机
bash
virt-install \
--name worker-vm1 \
--vcpus 16 \
--memory 32768 \
--disk path=/kvm/lib/libvirt/kvm/worker/worker-vm1.qcow2,format=qcow2,bus=virtio,cache=none \
--disk path=/kvm/lib/libvirt/kvm/worker/worker-vm1-cidata.iso,device=cdrom,bus=sata \
--network network=default,model=virtio \
--os-variant rocky9 \
--import \
--noautoconsole \
--graphics vnc,listen=0.0.0.0 \
--virt-type kvm外网验证
虚拟机启动后获取 IP:192.168.122.138
执行以下命令确认外网连通:
bash
ssh root@192.168.122.138
ping -c 2 223.5.5.5
curl -I https://www.baidu.com
curl -I http://mirrors.aliyun.com验证结果:
ping 223.5.5.5✅ 通curl https://www.baidu.com✅ HTTP/1.1 200 OKcurl mirrors.aliyun.com✅ 可达
故障处理:virbr0 网段无外网
排查时发现宿主机缺少 192.168.122.0/24 的 NAT 伪装规则,导致所有 default 网络虚拟机无法上外网。已手工补上:
bash
sudo iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE⚠️ 注意:手工规则在宿主机重启后会失效。如果重启后外网不通,执行:
bashsudo virsh net-destroy default sudo virsh net-start default这会重新生成 libvirt 默认网络规则,但会短暂影响该网络上的其他运行虚拟机。
常用管理命令
bash
virsh list --all # 列出所有虚拟机
virsh start worker-vm1 # 开机
virsh shutdown worker-vm1 # 关机
virsh reboot worker-vm1 # 重启
virsh destroy worker-vm1 # 强制断电
virsh domifaddr worker-vm1 # 查看 IP
virsh console worker-vm1 # 串口控制台
ssh root@192.168.122.138 # SSH 登录