创建第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 7服务器上安装KVM

如何在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
日期:2020-03-23 08:03:59 来源:oir作者:oir