创建第1个虚拟机
让我们创建一个CentOS 7.x的虚拟机
使用wget命令获取CentOS 7.x最新的ISO映像:
# cd /var/lib/libvirt/boot/ # wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso
配置桥接网络
默认情况下,libvirtd配置的基于dhcpd的网桥。
可以使用以下命令进行查看:
# brctl show # virsh net-list
所有虚拟机只能网络访问同一服务器上的其他虚拟机。
KVM创建了一个专用私有网络192.168.122.0/24。
确认一下:
# virsh net-dumpxml default
如果我们的虚拟机想要访问其他服务器。那么需要在服务器上设置一个连接到局域网的网桥。
修改网口配置文件:
# vi /etc/sysconfig/network-scripts/enp3s0
添加下面行:
BRIDGE=br0
编辑/etc/sysconfig/network-scripts/ifcfg-br0文件:
# vi /etc/sysconfig/network-scripts/ifcfg-br0
添加下面内容
DEVICE="br0" # I am getting ip from DHCP server # BOOTPROTO="dhcp" IPV6INIT="yes" IPV6_AUTOCONF="yes" ONBOOT="yes" TYPE="Bridge" DELAY="0"
重启网络服务:
# systemctl restart NetworkManager
使用brctl命令进行验证:
# brctl show
创建CentOS 7.x 虚拟机
使用下面命令创建虚拟机:
# virt-install \ --virt-type=kvm \ --name centos7 \ --ram 2048 \ --vcpus=2 \ --os-variant=centos7.0 \ --cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1708.iso \ --network=bridge=br0,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2
配置vnc登录:
# virsh dumpxml centos7 | grep vnc graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'
使用SSH客户端建立隧道,并使用VNC客户端访问远程服务器。
在客户端中,执行下面SSH端口转发命令:
$ ssh jack@server1.onitroad.local -L 5901:127.0.0.1:5901
建立了ssh隧道后,在VNC客户端上,就可以将host设置为:127.0.0.1(localhost),
端口设置为5901。 然后连接。
virt-builder命令
可以使用virt-builder命令可以在CentOS 7上快速构建虚拟机映像。
列出KVM虚拟机镜像
virt-builder --list virt-builder --list | grep -i fedora virt-builder --list | grep -i debian virt-builder --list | grep -i ubuntu virt-builder --list | grep -i freebsd
构建Ubuntu 16.04 LTS虚拟机
# virt-builder ubuntu-16.04 \ --size=20G --format qcow2 -o /var/lib/libvirt/images/nginx_vm-disk01.qcow2 \ --hostname nginx_vm --network --timezone Asia/Shanghai \ --firstboot-command "dpkg-reconfigure openssh-server" \ --edit '/etc/default/grub: s/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"/' \ --run-command update-grub
安装KVM虚拟机
镜像已经创建好了,现在可以安装虚拟机了。
# virt-install --import --name nginx_vm \ --ram 2048 \ --vcpu 2 \ --disk path=/var/lib/libvirt/images/nginx_vm-disk01.qcow2,format=qcow2 \ --os-variant ubuntu17.04 \ --network=bridge=virbr0,model=virtio \ --noautoconsole
启动KVM虚拟机
# virsh start nginx_vm
登录KVM虚拟机
# virsh console nginx_vm
安装kvm
执行以下yum命令:
# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
启动libvirtd服务:
# systemctl enable libvirtd # systemctl start libvirtd
如何在CentOS 7或RHEL(Red Hat Enterprise Linux)7服务器上安装和配置KVM(基于内核的虚拟机)?
如何在CentOS 7上创建KVM并使用云镜像来安装虚拟机?
在CentOS 7/RHEL 7服务器上安装KVM的步骤是什么?
KVM是是CentOS或RHEL 7中的虚拟化软件。
使用KVM,可以在服务器上安装和管理多个虚拟机。
要使用KVM,需要在服务器BIOS中启用了"虚拟化技术(VT)"。
使用下面的命令来测试CPU是否支持Intel VT和AMD-V虚拟化技术:
$ lscpu | grep Virtualization `Virtualization: VT-x`
KVM常用命令
列出所有虚拟机
查看所有kvm虚拟机
# virsh list --all
获取KVM虚拟机信息
# virsh dominfo vmName # virsh dominfo centos7-vm1
停止/关闭KVM虚拟机
# virsh shutdown centos7-vm1
启动KVM虚拟机
# virsh start centos7-vm1
将KVM虚拟机设置为在系统引导时自动启动
# virsh autostart centos7-vm1
如何重启KVM虚拟机
软重启:
# virsh reboot centos7-vm1
重置(硬重置)KVM虚拟机(不安全)
# virsh reset centos7-vm1
删除KVM虚拟机
# virsh shutdown centos7-vm1 # virsh undefine centos7-vm1 # virsh pool-destroy centos7-vm1 # rm -ri /var/lib/libvirt/images/centos7-vm1
查看virsh命令的帮助手册
# virsh help | less # virsh help | grep reboot
使用云镜像创建虚拟机
上面的方法适用于创建单台虚拟机。
但是如果我们想创建/部署很多虚拟机呢?
那么可以使用云镜像。我们可以对下载的云镜像进行修改。
获取 CentOS 7 云镜像
# cd /var/lib/libvirt/boot # wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
创建目录
# mkdir -vp /var/lib/libvirt/images/centos7-vm1
创建 meta-data文件
# cd /var/lib/libvirt/images/centos7-vm1 # vi meta-data
添加下面内容:
instance-id: centos7-vm1 local-hostname: centos7-vm1
创建user-data文件:
创建ssh密钥
ssh-keygen -t ed25519 -C "VM Login ssh key"
# cd /var/lib/libvirt/images/centos7-vm1 # vi user-data
添加下面内容
#cloud-config # Hostname management preserve_hostname: False hostname: centos7-vm1 fqdn: centos7-vm1.onitroad.com # Users users: - default - name: jack groups: ['wheel'] shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL ssh-authorized-keys: - ssh-ed25519 DDDDb5NzDb1lZDI1NTE5DDDDIIMP3MOF2ot8MOdNXbpHem0e2Wemg4nNmL2Tio4Ik1JY ### 虚拟机ssh登录密钥 # 配置输出位置 output: all: ">> /var/log/cloud-init.log" # configure interaction with ssh server ssh_genkeytypes: ['ed25519', 'rsa'] # Install my public ssh key to the first user-defined user configured in cloud.cfg in the template (which is centos for CentOS cloud images) # 将公共ssh密钥安装到cloud-config的第一个用户中 ssh_authorized_keys: - ssh-ed25519 DDDDb5NzDb1lZDI1NTE5DDDDIIMP3MOF2ot8MOdNXbpHem0e2Wemg4nNmL2Tio4Ik1JY ### 虚拟机ssh登录密钥 # set timezone for VM timezone: Asia/Shanghai # Remove cloud-init runcmd: - systemctl stop network && systemctl start network - yum -y remove cloud-init
复制云镜像
# cd /var/lib/libvirt/images/centos7-vm1 # cp /var/lib/libvirt/boot/CentOS-7-x86_64-GenericCloud.qcow2 centos7-vm1.qcow2
创建20GB的磁盘镜像
# cd /var/lib/libvirt/images/centos7-vm1 # export LIBGUESTFS_BACKEND=direct # qemu-img create -f qcow2 -o preallocation=metadata centos7-vm1.new.image 20G # virt-resize --quiet --expand /dev/sda1 centos7-vm1.qcow2 centos7-vm1.new.image
替换掉原来的qcow2镜像:
# cd /var/lib/libvirt/images/centos7-vm1 # mv centos7-vm1.new.image centos7-vm1.qcow2
创建一个cloud-init ISO
# mkisofs -o centos7-vm1M-cidata.iso -V cidata -J -r user-data meta-data
创建一个池
# virsh pool-create-as --name centos7-vm1 --type dir --target /var/lib/libvirt/images/centos7-vm1
安装CentOS 7 虚拟机
# cd /var/lib/libvirt/images/centos7-vm1 # virt-install --import --name centos7-vm1 \ --memory 1024 --vcpus 1 --cpu host \ --disk centos7-vm1.qcow2,format=qcow2,bus=virtio \ --disk centos7-vm1-cidata.iso,device=cdrom \ --network bridge=virbr0,model=virtio \ --os-type=linux \ --os-variant=centos7.0 \ --graphics spice \ --noautoconsole
删除不需要的文件:
# cd /var/lib/libvirt/images/centos7-vm1 # virsh change-media centos7-vm1 hda --eject --config # rm meta-data user-data centos7-vm1-cidata.iso
查看KVM 虚拟机的IP地址(由DHCP分配)
# virsh net-dhcp-leases default
登录到CentOS7虚拟机
使用ssh命令:
# ssh jack@192.168.122.85
检查KVM安装
使用lsmod命令确认加载了KVM模块:
# lsmod | grep -i kvm