手工维护 KVM 虚拟机
宿主机环境
- 确保 cpu 支持虚拟化
egrep ‘(vmx|svm)‘ --color=always /proc/cpuinfo
- 确保加载了必备模块
lsmod | grep kvm
其输出应包括 kvm 与 kvm_intel ( 如使用 AMD cpu 则应为 kvm_amd ) 模块。如果没有加载,则通过下列命令手工加载:
modprobe kvm-intel
或
modprobe kvm-amd
- 安装必备软件包
aptitude install qemu-kvm
- 如需管理功能,需额外安装 libvirt 工具包
aptitude install libvirt-bin
- 如虚拟机需直连机房网络,应以桥接方式配置网络,安装相关工具包
aptitude install bridge-utils
桥接网络配置
手工配置网桥
- 创建网桥
brctl addbr br100
- 配置网桥
ip addr ip ro
- 将宿主机内网网卡加入此网桥
brctl addif br100 eth1
持久化网桥配置
- 编辑 /etc/network/interfaces
# Set up interfaces manually, avoiding conflicts with, e.g., network manager iface eth1 inet manual # Bridge setup iface br100 inet static bridge_ports eth1 address 172.17.4.123 mask 255.255.240.0
- 重启网络服务
service networking restart
安装虚拟机
创建磁盘文件
kvm-img create -f qcow2 virt-deb.qcow2 16G
安装系统到磁盘文件
在服务器执行
kvm -drive file=virt-deb.qcow2 -cdrom /path/to/boot-media.iso -boot d -m 512 -vnc :1
在本地安装 vnc 客户端,而后执行
vncviewer server.ip:1
连接后在本地 vnc 客户端的从窗口中操作,执行安装
创建配置文件,通过 virsh 管理虚拟机
配置文件为 xml 格式,文件名任意,其详细格式参考官方 配置文档
virsh 是 libvirt-bin 提供的命令行管理工具
从配置文件新增虚拟机,但不启动它
virsh define virt-deb.xml
从配置文件新增虚拟机,并启动它
virsh create virt-deb.xml
列出运行中的虚拟机
virsh list
列出所有虚拟机,包括未运行的
virsh list --all
删除未运行的虚拟机
virsh undefine virt-deb
启动虚拟机
virsh start virt-deb
关闭虚拟机(本条命令有可能失败,与虚拟机的电源管理策略等条件相关),其效果相当于按物理 pc 主机电源按键
virsh shutdown virt-deb
强制关闭虚拟机,其效果相当于拔掉物理 pc 电源线。需注意的是,当这台主机是由 virsh create 创建并启动时, 本命令会强制关机,并删除该虚拟机;当这台主机先使用 virsh define 创建,之后使用 virsh start 启动时, 本命令只会强制关机,不会删除该虚拟机。
virsh destroy virt-deb
附配置文件样例
<domain type=‘kvm‘>
<name>virt-deb</name>
<description>debian virtual machine</description>
<memory unit=‘KiB‘>ram in KB</memory>
<currentMemory unit=‘KiB‘>ram in KB</currentMemory>
<vcpu placement=‘static‘>number of virtual cores</vcpu>
<os>
<type arch=‘x86_64‘ machine=‘pc-1.1‘>hvm</type>
<boot dev=‘hd‘/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu mode=‘host-passthrough‘>
</cpu>
<clock offset=‘utc‘/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type=‘file‘ device=‘disk‘ snapshot=‘external‘>
<driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/>
<source file=‘/path/to/virt-deb.qcow2‘/>
<target dev=‘vda‘ bus=‘virtio‘/>
</disk>
<disk type=‘file‘ device=‘cdrom‘>
<driver name=‘qemu‘ type=‘raw‘/>
<source file=‘/path/to/cdrom.iso‘/>
<target dev=‘hda‘ bus=‘ide‘/>
<readonly/>
</disk>
<interface type=‘bridge‘>
<source bridge=‘br100‘/>
<model type=‘virtio‘/>
</interface>
<input type=‘tablet‘ bus=‘usb‘/>
<input type=‘mouse‘ bus=‘ps2‘/>
<graphics type=‘vnc‘ autoport=‘yes‘ listen=‘0.0.0.0‘>
<listen type=‘address‘ address=‘0.0.0.0‘/>
</graphics>
<video>
<model type=‘vga‘ vram=‘65536‘ heads=‘1‘>
</model>
</video>
</devices>
</domain>
配置虚拟机网络
虚拟机安装过程中使用 kvm 内置 dhcp 服务器获取动态 IP,之后通过宿主机 NAT 访问外部网络,因此 安装过程中并没有配置符合需求的网络。使用过程中需要通过桥接直连机房网络,并给虚拟机配备机房内网 IP。 此配置通过 vnc 完成。
先将虚拟机加入 libvirt 管理
virsh define virt-deb.xml
启动虚拟机
virsh start virt-deb
本机使用客户端连接,自动调配时,不同虚拟机其 vnc 端口一般从 5901 开始分配
vncviewer server.ip:5901
之后与普通服务器配置一致
初始化系统
- 配置主机名
vi /etc/hostname hostname -F /etc/hostname
- 安装 lsb-release puppet 软件包
aptitude install puppet lsb-release
- 配置 puppet ,启用 pluginsync
vi /etc/puppet/puppet.conf
在 [main] 段添加
pluginsync = true
- 执行配置同步,进行初始化
puppet agent -t
时间: 2024-11-09 19:08:54