前置条件
准备一台主机。用于运行KVM虚拟机和制作镜像
准备一张系统镜像ISO文件
确保您的系统具有硬件虚拟化扩展
#基于Intel的主机,请使用以下命令验证CPU虚拟化扩展[vmx]是否可用。
[user@host]# grep -e 'vmx' /proc/cpuinfo
#基于AMD的主机,请验证CPU虚拟化扩展[svm]是否可用。
[user@host]# grep -e 'svm' /proc/cpuinfo
#验证内核是否加载kvm模块
[user@host]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm关闭SELinux,将
/etc/sysconfig/selinux
中的SELinux=enforcing
修改为SELinux=disabled
两种方式安装KVM虚拟化
通过手动方式安装
安装KVM虚拟化程序
qemu-kvm:提供了user-level KVM仿真器,以及宿主机和虚拟机之间的通信。
qemu-img:虚拟机磁盘管理。
libvirt:提供服务器和主机端的库,用于与管理程序和主机系统进行交互,以及处理库调用,管理虚拟机和控制libvirtd守护程序。
[user@host]# yum install qemu-kvm libvirt
[user@host]# systemctl start libvirtd && systemctl enable libvirtd
以下是附加的虚拟化管理程序包。
virt-install:提供了
virt-install
用于从命令行创建虚拟机的命令。libvirt-python:该软件包包含一个模块,该模块允许以Python编程语言编写的应用程序使用libvirt API提供的接口。
virt-manager:提供GUI工具来管理虚拟机,它使用libvirt-client库API进行管理。
libvirt-client:提供CL工具来管理虚拟机,该工具称为
virsh
[user@host]# yum install virt-install libvirt-python virt-manager virt-install libvirt-client
对于RHEL / CentOS7用户,还需要安装其他软件Virtualization Client
、Virtualization Platform
和Virtualization Tools
。
[user@host]# yum groupinstall virtualization-client virtualization-platform virtualization-tools |
通过软件包组安装
包组名称 | 描述 | 强制安装 | 可选包 |
---|---|---|---|
Virtualization Host |
最小的虚拟化主机安装 | libvirt,qemu-kvm,qemu-img | qemu-kvm-tools |
Virtualization Client |
用于安装和管理虚拟化实例的客户端 | gnome-boxes,virt-install,virt-manager,virt-viewer,qemu-img | virt-top,libguestfs-tools,libguestfs-tools-c |
Virtualization Platform |
提供用于访问和控制虚拟机和容器的界面 | libvirt, libvirt-client, virt-who, qemu-img | fence-virtd-libvirt,fence-virtd-multicast,fence-virtd-serial,libvirt-cim,libvirt-java,libvirt-snmp,perl-Sys-Virt |
Virtualization Tools |
离线虚拟映像管理工具 | libguestfs,qemu-img | libguestfs-java,libguestfs-tools,libguestfs-tools-c |
命令如下:
[user@host]# yum groupinstall "Virtualization Host" |
开始制作镜像
创建虚拟机
使用 qemu-img
创建8G大小的虚拟磁盘
[user@host]# qemu-img create -f qcow2 /tmp/centos7.qcow2 8G |
使用 virt-install
创建并启动虚拟机
[user@host]# virt-install --virt-type kvm --name centos7 --ram 2048 \ |
启动完成后,使用vnc client连接或者使用virt-manager、virt-viewer连接。
[user@host]# virsh list --all |
安装操作系统
进入虚拟机控制台可以看到CentOS的启动菜单
选择Install CentOS 7,敲Tab键出现字时,接着输入 net.ifnames=0 biosdevname=0 ,然后回车
选择语言和键盘选项
软件选择Minimal Install
需要选择手动配置分区。只需要一个根分区即可,不需要swap分区,存储驱动选择Virtio Block Device
安装完成后,重启实例并以 root 用户身份登录。
修改 /etc/sysconfig/network-scripts/ifcfg-eth0
文件,内容如下:
TYPE=Ethernet |
重启网卡
# systemctl restart network |
查看虚拟机自动获取的IP地址,通过宿主机ssh连接进入虚拟机。
配置OS
安装常用的软件
# yum install -y mlocate lrzsz tree vim nc nmap bash-completion bash-completion-extras cowsay sl htop iotop iftop lsof net-tools sysstat unzip bc psmisc ntpdate wc telnet-server bind-utils |
关闭防火墙和SELinux
# setenforce 0 |
sshd优化加速
# vim /etc/ssh/sshd_config |
UseDNS 会对客户端进行DNS反向解析,然后在比对正向解析的结果查看是否一致。
GSSAPIAuthentication大多数情况下使用密码验证或者秘钥验证所以关闭GSSAPI验证即可
安装 cloud-init
软件包,并设置开机启动
# yum install -y cloud-utils-growpart cloud-init |
默认情况下,cloud-init 在虚拟机启动时,会关闭ssh 的密码认证方式,使用key 方式连接。修改cloud-init 的配置文件,使其打开ssh 密码认证方式。方法如下:
# vi /etc/cloud/cloud.cfg |
为了支持软操作,虚拟机需要安装acpid
服务,并设置开机自启动
# yum install -y acpid |
为了nova console-log
能获取虚拟机启动时的日志,修改配置文件/etc/default/grub
,删掉GRUB_CMDLINE_LINUX
一行中 rhgb quiet
,添加 console=tty0 console=ttyS0,115200n8
, 修改后的结果如下:
GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8" |
运行以下命令,保存修改
# grub2-mkconfig -o /boot/grub2/grub.cfg |
安装自定义的软件,如nginx
yum install -y nginx |
关闭实例
# poweroff |
制作完成
使用 virt-sysprep
命令重置并清理镜像,从而可以避免在创建实例时出现问题
[user@host]# virt-sysprep --enable bash-history,ssh-userdir -d centos7 |
使用 virt-sparsify
这个命令会把磁盘镜像中的所有空闲空间释放,减少镜像的大小
[user@host]# virt-sparsify --compress /tmp/centos7.qcow2 /tmp/centos7-cloud.qcow2 |