我在 Ubuntu 22.04 主机上执行以下步骤:
下载云镜像
qemu-img create -b ../jammy-server-cloudimg-amd64.img -f qcow2 -F qcow2 myubuntu2204test01-base.img 10G
在目录myubuntu2204test01中创建文件元数据:
instance-id: myubuntu2204test01
local-hostname: myubuntu2204test01.example.com
network:
version: 2
ethernets:
enp1s0:
dhcp4: no
addresses: [192.168.122.146/24]
nameservers:
addresses: [192.168.122.1]
routes:
- to: 0.0.0.0/0
via: 192.168.122.1
在目录 myubuntu2204test01 中创建文件 user-data:
#cloud-config
users:
- name: someuser
ssh_authorized_keys:
- ssh-ed25519 somekey comment
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
groups: sudo
shell: /bin/bash
ci
生成数据的 ISO 映像
genisoimage -output cidata.iso -V cidata -r -J user-data meta-data
创建虚拟机 myubuntu2204test01
virt-install \
--name=testvmubuntu2204 \
--ram=512 --vcpus=1 \
--import \
--disk path=myubuntu2204test01-base.img,format=qcow2 \
--disk path=cidata.iso,device=cdrom \
--os-variant=ubuntu22.04 \
--network bridge=virbr0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole
VM 已创建。但 VM 没有元数据中定义的静态 IP 网络。VM 具有默认 DHCP 网络配置。
为客户虚拟机创建静态 IP 的过程中缺少什么或不正确什么?
我尝试在用户数据和元数据文件中定义网络,但它们都无法为客户虚拟机创建静态网络。
答案1
还可以通过在名为 的文件中提供 yaml 格式的数据,将网络配置提供给 cloud-init 中的网络配置版本 1 或网络配置版本 2。
network-config
如果找到,此文件将覆盖network-interfaces
文件。
看起来您正在尝试使用版本 2 网络配置;这意味着您在错误的文件中提供了它。您需要添加network-config
而不是meta-data
。
正如我在评论中提到的,您还需要更正网络配置文件的格式:
instance-id: myubuntu2204test01
local-hostname: myubuntu2204test01.example.com
network:
version: 2
ethernets:
enp1s0:
dhcp4: no
addresses: [192.168.122.146/24]
nameservers:
addresses: [192.168.122.1]
routes:
- to: 0.0.0.0/0
via: 192.168.122.1
你可以使用以下--cloud-init
选项来简化你的生活,virt-install
而不必自己构建配置磁盘:
virt-install \
--name=testvmubuntu2204 \
--ram=512 \
--vcpus=1 \
--import \
--disk path=myubuntu2204test01-base.img,format=qcow2 \
--os-variant=ubuntu22.04 \
--network bridge=virbr0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--cloud-init user-data=user-data.yaml,network-config=network-config.yaml
(这假定您有本地命名的文件user-data.yaml
并且network-config.yaml
;根据需要进行调整。)