如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第1张图片 基于内核的虚拟机(KVM)是 CentOS 或 RHEL 7 的虚拟化软件。KVM 可以将你的服务器变成虚拟机管理器。 -- Vivek Gite

致谢 编译自 | https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/ 
 作者 | Vivek Gite
 译者 | MjSeven ? ? 共计翻译:10 篇 贡献时间:47 天

如何在 CnetOS 7 或 RHEL 7(Red Hat 企业版 Linux)服务器上安装和配置 KVM(基于内核的虚拟机)?如何在 CentOS 7 上设置 KVM 并使用云镜像 / cloud-init 来安装客户虚拟机?

基于内核的虚拟机(KVM)是 CentOS 或 RHEL 7 的虚拟化软件。KVM 可以将你的服务器变成虚拟机管理器。本文介绍如何在 CentOS 7 或 RHEL 7 中使用 KVM 设置和管理虚拟化环境。还介绍了如何使用命令行在物理服务器上安装和管理虚拟机(VM)。请确保在服务器的 BIOS 中启用了虚拟化技术(VT)。你也可以运行以下命令测试 CPU 是否支持 Intel VT 和 AMD_V 虚拟化技术[1]

     
    
    
    
  1. $ lscpu | grep Virtualization

  2. Virtualization: VT-x

按照 CentOS 7/RHEL 7 终端服务器上的 KVM 安装步骤进行操作。

步骤 1: 安装 kvm

输入以下 yum 命令[2]:

     
    
    
    
  1. # yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第2张图片

How to install KVM on CentOS 7 RHEL 7 Headless Server

启动 libvirtd 服务:

     
    
    
    
  1. # systemctl enable libvirtd

  2. # systemctl start libvirtd

步骤 2: 确认 kvm 安装

使用 lsmod 命令和 grep命令[3] 确认加载了 KVM 模块:

     
    
    
    
  1. # lsmod | grep -i kvm

步骤 3: 配置桥接网络

默认情况下,由 libvirtd 配置基于 dhcpd 的网桥。你可以使用以下命令验证:

     
    
    
    
  1. # brctl show

  2. # virsh net-list

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第3张图片

KVM default networking

所有虚拟机(客户机)只能对同一台服务器上的其它虚拟机进行网络访问。为你创建的私有网络是 192.168.122.0/24。验证:

     
    
    
    
  1. # virsh net-dumpxml default

如果你希望你的虚拟机可用于 LAN 上的其他服务器,请在连接到你的 LAN 的服务器上设置一个网桥。更新你的网卡配置文件,如 ifcfg-enp3s0 或 em1:

     
    
    
    
  1. # vi /etc/sysconfig/network-scripts/ifcfg-enp3s0

添加一行:

     
    
    
    
  1. BRIDGE=br0

使用 vi 保存并关闭文件[4]。编辑 /etc/sysconfig/network-scripts/ifcfg-br0

     
    
    
    
  1. # vi /etc/sysconfig/network-scripts/ifcfg-br0

添加以下内容:

     
    
    
    
  1. DEVICE="br0"

  2. # I am getting ip from DHCP server #

  3. BOOTPROTO="dhcp"

  4. IPV6INIT="yes"

  5. IPV6_AUTOCONF="yes"

  6. ONBOOT="yes"

  7. TYPE="Bridge"

  8. DELAY="0"

重新启动网络服务(警告:ssh 命令将断开连接,最好重新启动该设备):

     
    
    
    
  1. # systemctl restart NetworkManager

用 brctl 命令验证它:

     
    
    
    
  1. # brctl show

步骤 4: 创建你的第一个虚拟机

我将会创建一个 CentOS 7.x 虚拟机。首先,使用 wget 命令获取 CentOS 7.x 最新的 ISO 镜像:

     
    
    
    
  1. # cd /var/lib/libvirt/boot/

  2. # wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso

验证 ISO 镜像:

     
    
    
    
  1. # wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/sha256sum.txt

  2. # sha256sum -c sha256sum.txt

创建 CentOS 7.x 虚拟机

在这个例子中,我创建了 2GB RAM,2 个 CPU 核心,1 个网卡和 40 GB 磁盘空间的 CentOS 7.x 虚拟机,输入:

     
    
    
    
  1. # virt-install \

  2. --virt-type=kvm \

  3. --name centos7 \

  4. --ram 2048 \

  5. --vcpus=1 \

  6. --os-variant=centos7.0 \

  7. --cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1708.iso \

  8. --network=bridge=br0,model=virtio \

  9. --graphics vnc \

  10. --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2

从另一个终端通过 ssh 配置 vnc 登录,输入:

     
    
    
    
  1. # virsh dumpxml centos7 | grep v nc

  2. <graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>

请记录下端口值(即 5901)。你需要使用 SSH 客户端来建立隧道和 VNC 客户端才能访问远程 vnc 服务器。在客户端/桌面/ macbook pro 系统中输入以下 SSH 端口转发命令:

     
    
    
    
  1. $ ssh vivek@server1.cyberciti.biz -L 5901:127.0.0.1:5901

一旦你建立了 ssh 隧道,你可以将你的 VNC 客户端指向你自己的 127.0.0.1 (localhost) 地址和端口 5901,如下所示:

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第4张图片

你应该看到 CentOS Linux 7 客户虚拟机安装屏幕如下:

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第5张图片

现在只需按照屏幕说明进行操作并安装CentOS 7。一旦安装完成后,请继续并单击重启按钮。 远程服务器关闭了我们的 VNC 客户端的连接。 你可以通过 KVM 客户端重新连接,以配置服务器的其余部分,包括基于 SSH 的会话或防火墙。

使用云镜像

以上安装方法对于学习目的或单个虚拟机而言是可行的。你需要部署大量的虚拟机吗? 可以试试云镜像。你可以根据需要修改预先构建的云镜像。例如,使用 Cloud-init[5] 添加用户、ssh 密钥、设置时区等等,这是处理云实例的早期初始化的事实上的多分发包。让我们看看如何创建带有 1024MB RAM,20GB 磁盘空间和 1 个 vCPU 的 CentOS 7 虚拟机。(LCTT 译注: vCPU 即电脑中的虚拟处理器)

获取 CentOS 7 云镜像

     
    
    
    
  1. # cd /var/lib/libvirt/boot

  2. # wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2

创建所需的目录

     
    
    
    
  1. # D=/var/lib/libvirt/images

  2. # VM=centos7-vm1 ## vm name ##

  3. # mkdir -vp $D/$VM

  4. mkdir: created directory '/var/lib/libvirt/images/centos7-vm1'

创建元数据文件

     
    
    
    
  1. # cd $D/$VM

  2. # vi meta-data

添加以下内容:

     
    
    
    
  1. instance-id: centos7-vm1

  2. local-hostname: centos7-vm1

创建用户数据文件

我将使用 ssh 密钥登录到虚拟机。所以确保你有 ssh 密钥:

     
    
    
    
  1. # ssh-keygen -t ed25519 -C "VM Login ssh key"

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第6张图片

ssh-keygen command

请参阅 “如何在 Linux/Unix 系统上设置 SSH 密钥[6]” 来获取更多信息。编辑用户数据如下:

     
    
    
    
  1. # cd $D/$VM

  2. # vi user-data

添加如下(根据你的设置替换 hostnameusersssh-authorized-keys):

     
    
    
    
  1. #cloud-config

  2. # Hostname management

  3. preserve_hostname: False

  4. hostname: centos7-vm1

  5. fqdn: centos7-vm1.nixcraft.com

  6. # Users

  7. users:

  8.    - default

  9.    - name: vivek

  10.      groups: ['wheel']

  11.      shell: /bin/bash

  12.      sudo: ALL=(ALL) NOPASSWD:ALL

  13.      ssh-authorized-keys:

  14.        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key

  15. # Configure where output will go

  16. output:

  17.  all: ">> /var/log/cloud-init.log"

  18. # configure interaction with ssh server

  19. ssh_genkeytypes: ['ed25519', 'rsa']

  20. # Install my public ssh key to the first user-defined user configured

  21. # in cloud.cfg in the template (which is centos for CentOS cloud images)

  22. ssh_authorized_keys:

  23.  - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key

  24. # set timezone for VM

  25. timezone: Asia/Kolkata

  26. # Remove cloud-init

  27. runcmd:

  28.  - systemctl stop network && systemctl start network

  29.  - yum -y remove cloud-init

复制云镜像

     
    
    
    
  1. # cd $D/$VM

  2. # cp /var/lib/libvirt/boot/CentOS-7-x86_64-GenericCloud.qcow2 $VM.qcow2

创建 20GB 磁盘映像

     
    
    
    
  1. # cd $D/$VM

  2. # export LIBGUESTFS_BACKEND=direct

  3. # qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 20G

  4. # virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第7张图片

Set VM image disk size

用缩放后的镜像覆盖它:

     
    
    
    
  1. # cd $D/$VM

  2. # mv $VM.new.image $VM.qcow2

创建一个 cloud-init ISO

     
    
    
    
  1. # mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第8张图片

Creating a cloud-init ISO

创建一个池

     
    
    
    
  1. # virsh pool-create-as --name $VM --type dir --target $D/$VM

  2. Pool centos7-vm1 created

安装 CentOS 7 虚拟机

     
    
    
    
  1. # cd $D/$VM

  2. # virt-install --import --name $VM \

  3. --memory 1024 --vcpus 1 --cpu host \

  4. --disk $VM.qcow2,format=qcow2,bus=virtio \

  5. --disk $VM-cidata.iso,device=cdrom \

  6. --network bridge=virbr0,model=virtio \

  7. --os-type=linux \

  8. --os-variant=centos7.0 \

  9. --graphics spice \

  10. --noautoconsole

删除不需要的文件:

     
    
    
    
  1. # cd $D/$VM

  2. # virsh change-media $VM hda --eject --config

  3. # rm meta-data user-data centos7-vm1-cidata.iso

查找虚拟机的 IP 地址

     
    
    
    
  1. # virsh net-dhcp-leases default

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第9张图片

CentOS7-VM1- Created

登录到你的虚拟机

使用 ssh 命令:

     
    
    
    
  1. # ssh vivek@192.168.122.85

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国_第10张图片

Sample VM session

有用的命令

让我们看看管理虚拟机的一些有用的命令。

列出所有虚拟机

     
    
    
    
  1. # virsh list --all

获取虚拟机信息

     
    
    
    
  1. # virsh dominfo vmName

  2. # virsh dominfo centos7-vm1

停止/关闭虚拟机

     
    
    
    
  1. # virsh shutdown centos7-vm1

开启虚拟机

     
    
    
    
  1. # virsh start centos7-vm1

将虚拟机标记为在引导时自动启动

     
    
    
    
  1. # virsh autostart centos7-vm1

重新启动(软安全重启)虚拟机

     
    
    
    
  1. # virsh reboot centos7-vm1

重置(硬重置/不安全)虚拟机

     
    
    
    
  1. # virsh reset centos7-vm1

删除虚拟机

     
    
    
    
  1. # virsh shutdown centos7-vm1

  2. # virsh undefine centos7-vm1

  3. # virsh pool-destroy centos7-vm1

  4. # D=/var/lib/libvirt/images

  5. # VM=centos7-vm1

  6. # rm -ri $D/$VM

查看 virsh 命令类型的完整列表:

     
    
    
    
  1. # virsh help | less

  2. # virsh help | grep reboot

关于作者

作者是 nixCraft 的创建者,也是经验丰富的系统管理员和 Linux 操作系统/ Unix shell 脚本的培训师。 他曾与全球客户以及 IT,教育,国防和空间研究以及非营利部门等多个行业合作。 在 Twitter[7]Facebook[8]Google +[9] 上关注他。


via: https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/

作者:Vivek Gite[11] 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


你可能感兴趣的:(如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM | Linux 中国)