libvirt

Libvirt 使用笔记

virsh 命令 #

virsh domifaddr 查看虚拟机网卡ip #

# virsh domifaddr k3s-node01 --source lease
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------

通过arp获取网卡ip

# virsh domifaddr k3s-node01 --source arp
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet18     52:54:00:0e:08:02    ipv4         192.168.1.248/0

通过qemu guest agent获取网卡ip

# virsh domifaddr k3s-node01 --source agent
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 lo         00:00:00:00:00:00    ipv4         127.0.0.1/8
 enp1s0     52:54:00:0e:08:02    ipv4         192.168.1.248/24
 flannel.1  92:61:59:0c:29:90    ipv4         10.42.0.0/32
 cni0       42:fb:8d:3e:c1:a4    ipv4         10.42.0.1/24
 vethde547696 da:18:a8:b2:ed:f0    N/A          N/A
 vethe1841f6e ce:79:fc:e1:1e:0b    N/A          N/A
 veth464995dc 82:a9:3b:a6:b5:49    N/A          N/A
 veth2370e2ac 4a:c8:32:5c:fb:34    N/A          N/A

创建虚拟机时使用 cloudinit 初始化

cloudinit 介绍 #

用于在新建的虚拟机中进行时间设置、密码设置、扩展根文件系统所在分区、设置主机名、运行脚本、安装软件包等初始化设置

宿主机配置脚本 #

此脚本会用来在 /var/lib/libvirt/disks/${VM}/cloudinit 目录生成 cloudinit iso 镜像

cat <<EOFALL > /usr/bin/gen-cloudinit-iso
#!/bin/bash

set -eux

CLOUD_INIT_DIR="/var/lib/libvirt/disks/\${VM}/cloudinit"
FILENAME="\${CLOUD_INIT_DIR}/init.iso"

mkdir -p \${CLOUD_INIT_DIR}

cat <<EOF > \${CLOUD_INIT_DIR}/meta-data
instance-id: \${VM}
local-hostname: \${VM}
EOF

# 更多配置参照 https://cloudinit.readthedocs.io/en/latest/explanation/format.html
cat <<EOF > \${CLOUD_INIT_DIR}/user-data
#cloud-config
EOF

# 参考 kubevirt /pkg/cloud-init/cloud-init.go:defaultIsoFunc
xorrisofs -output \$FILENAME -volid cidata -joliet -rock -partition_cyl_align on \${CLOUD_INIT_DIR}/user-data \${CLOUD_INIT_DIR}/meta-data
EOFALL

chmod +x /usr/bin/gen-cloudinit-iso

cloud-init user-data 中指定账户密码(可选) #

#cloud-config
ssh_pwauth: True
chpasswd:
  list: |
     root:password
  expire: False

cloud-init user-data 中禁用网络配置 #

#cloud-config
network:
  config: disabled

创建虚拟机时使用 cloudinit #

创建虚拟机之前创建 cloudinit iso, 并通过 cdrom 挂载

...