zoukankan      html  css  js  c++  java
  • Linux 中使用 virsh 管理 KVM 虚拟机 (转)

    术语

    虚拟化指的是:在相同的物理(硬件)系统上,同时运行多个操作系统,且这几个系统相互隔离的可能性,而那个硬件在虚拟化架构中被称作宿主机(host)。虚拟机监视器(也被称为虚拟机管理程序(hypervisor))虚拟机(被称为 guest)由底层的硬件来供给虚拟资源(举几个例子来说,如 CPU,RAM,存储介质,网络接口等)。

    考虑到这一点就可以清楚地看出, 虚拟化的主要优点是节约成本(在设备和网络基础设施,及维护工作等方面)和显著地减少容纳所有必要硬件所需的物理空间。

    检查硬件要求并安装软件包

    一、硬件要求

    为了设置 KVM Kernel-based Virtual Machine(基于内核的虚拟机)虚拟化,你的 CPU 必须能够支持它。你可以使用下面的命令来查看你的系统是否满足这个要求:

    # grep -E 'svm|vmx' /proc/cpuinfo
    

    在下面的截图中,我们可以看到当前的系统(带有一个 AMD 的微处理器)支持虚拟化,svm 字样的存在暗示了这一点。假如我们有一个 Intel 系列的处理器,我们将会看到上面命令的结果将会出现 vmx 字样。

    检查 KVM 支持

    另外,你需要在你宿主机的硬件(BIOS 或 UEFI)中开启虚拟化。

    二、安装软件包

    • qemu-kvm 是一个开源的虚拟机程序,为 KVM 虚拟机监视器提供硬件仿真,而 qemu-img 则提供了一个操纵磁盘镜像的命令行工具。
    • libvirt 包含与操作系统的虚拟化功能交互的工具。
    • libvirt-python 包含一个模块,它允许用 Python 写的应用来使用由 libvirt 提供的接口。
    • libguestfs-tools 包含各式各样的针对虚拟机的系统管理员命令行工具。
    • virt-install 包含针对虚拟机管理的其他命令行工具。

    命令如下:

    # yum update && yum install qemu-kvm qemu-img libvirt libvirt-python libguestfs-tools virt-install
    

    一旦安装完成,请确保你启动并开启了 libvirtd 服务:

    # systemctl start libvirtd.service
    # systemctl enable libvirtd.service
    

    三、网络桥接设置

    默认情况下,每个虚拟机将只能够与放在相同的物理服务器上的虚拟机以及宿主机自身通信。要使得虚拟机能够访问位于局域网或因特网中的其他机器,我们需要像下面这样在我们的宿主机上设置一个桥接接口(比如说 br0):

    1、命令操作

    # 临时生效
    yum -y install bridge-utils
    brctl addbr br0
    brctl addif br0 <ifname1>
    brctl addif br0 <ifname2>
    # 永久生效
    nmcli conn add type bridge con-name br0 ifname br0 ipv4.method manual ipv4.address xxx ipv4.gateway xxx  ipv4.dns 223.5.5.5 connection.autoconnect yes
    nmcli device connect br0
    nmcli connection up br0
    nmcli device set br0 managed yes autoconnect yes
     nmcli connection add type bridge-slave ifname <if1> master br0
     nmcli connection add type bridge-slave ifname <if2> master br0
    

    2、配置文件

    1、 添加下面的一行到我们的 NIC 主配置中(类似 /etc/sysconfig/network-scripts/ifcfg-enp0s3 这样的文件):

    BRIDGE=br0
    

    2、 使用下面的内容(注意,你可能需要更改 IP 地址,网关地址和 DNS 信息)为 br0 创建一个配置文件(/etc/sysconfig/network-scripts/ifcfg-br0):

    DEVICE=br0
    TYPE=Bridge
    BOOTPROTO=static
    IPADDR=192.168.0.18
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.1
    NM_CONTROLLED=no
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    IPV6_FAILURE_FATAL=no
    NAME=br0
    ONBOOT=yes
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    

    四、设置数据包转发

    最后在文件/etc/sysctl.conf 中设置:

    net.ipv4.ip_forward = 1
    

    来开启包转发并加载更改到当前的内核配置中:

    # sysctl -p
    

    注意,你可能还需要告诉 firewalld 让这类的流量应当被允许通过防火墙。假如你需要这样做,记住你可以参考这个系列的 使用 firewalld 和 iptables 来控制网络流量

    创建虚拟机镜像

    默认情况下,虚拟机镜像将会被创建到 /var/lib/libvirt/images 中,且强烈建议你不要更改这个设定,除非你真的需要那么做且知道你在做什么,并能自己处理有关 SELinux 的设定(这个话题已经超出了本教程的讨论范畴,但你可以参考这个系列的第 13 部分 使用 SELinux 来进行强制访问控制,假如你想更新你的知识的话)。

    这意味着你需要确保你在文件系统中分配了必要的空间来容纳你的虚拟机。

    下面的命令将使用位于 /home/gacanepa/ISOs目录下的 rhel-server-7.0-x86_64-dvd.iso 镜像文件和 br0 这个网桥来创建一个名为 tecmint-virt01 的虚拟机,它有一个虚拟 CPU,1 GB(=1024 MB)的 RAM,20 GB 的磁盘空间(由/var/lib/libvirt/images/tecmint-virt01.img所代表):

    # virt-install 
    --network bridge=br0
    --name tecmint-virt01 
    --ram=1024 
    --vcpus=1 
    --disk path=/var/lib/libvirt/images/tecmint-virt01.img,size=20 
    --graphics none 
    --cdrom /home/gacanepa/ISOs/rhel-server-7.0-x86_64-dvd.iso
    --extra-args="console=tty0 console=ttyS0,115200"
    

    假如安装文件位于一个 HTTP 服务器上,而不是存储在你磁盘中的镜像中,你必须将上面的 -cdrom 替换为 -location,并明确地指出在线存储仓库的地址。

    至于上面的 –graphics none 选项,它告诉安装程序只以文本模式执行安装过程。假如你使用一个 GUI 界面和一个 VNC 窗口来访问主虚拟机控制台,则可以省略这个选项。最后,使用 –extra-args 参数,我们将传递内核启动参数给安装程序,以此来设置一个串行的虚拟机控制台。

    现在,所安装的虚拟机应当可以作为一个正常的(真实的)服务来运行了。假如没有,请查看上面列出的步骤。

    管理虚拟机

    作为一个系统管理员,还有一些典型的管理任务需要你在虚拟机上去完成。注:下面所有的命令都需要在你的宿主机上运行:

    1. 列出所有的虚拟机:

    # virsh list --all
    

    你必须留意上面命令输出中的虚拟机 ID(尽管上面的命令还会返回虚拟机的名称和当前的状态),因为你需要它来执行有关某个虚拟机的大多数管理任务。

    2. 显示某个虚拟机的信息:

    # virsh dominfo [VM Id]
    

    3. 开启,重启或停止一个虚拟机操作系统:

    # virsh start | reboot | shutdown [VM Id]
    

    4. 假如网络无法连接且在宿主机上没有运行 X 服务器,可以使用下面的命令来访问虚拟机的串行控制台:

    # virsh console [VM Id]
    

    :这需要你添加一个串行控制台配置信息到 /etc/grub.conf 文件中(参考刚才创建虚拟机时传递给-extra-args选项的参数)。

    5. 修改分配的内存或虚拟 CPU:

    首先,关闭虚拟机:

    # virsh shutdown [VM Id]
    

    为 RAM 编辑虚拟机的配置:

    # virsh edit [VM Id]
    

    然后更改

    <memory>[内存大小,注意不要加上方括号]</memory>
    

    使用新的设定重启虚拟机:

    # virsh create /etc/libvirt/qemu/tecmint-virt01.xml
    

    最后,可以使用下面的命令来动态地改变内存的大小:

    # virsh setmem [VM Id] [内存大小,这里没有括号]
    

    对于 CPU,使用:

    # virsh edit [VM Id]
    

    然后更改

    <cpu>[CPU 数目,这里没有括号]</cpu>
    

    至于更深入的命令和细节,请参考 RHEL 5 虚拟化指南。


    via: http://www.tecmint.com/kvm-virtualization-basics-and-guest-administration/

    作者:Gabriel Cánepa
    译者:FSSlc
    校对:wxy

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

  • 相关阅读:
    如何在dede栏目设置中添加自定义字段(dede二次开发-纯抄贴)
    dedecms内容页 上下篇 添加文章描述方法
    关于透明层----背景透明字不透明的效果
    什么是JavaScript闭包终极全解之一——基础概念
    phpcms v9中调用多栏目的方法--get标签(备实例)
    PHP识别电脑还是手机访问网站
    PHP中 post 与get的区别 详细说明
    js 处理数据里面的空格
    mysql中的unix_timestamp函数
    PHP中date函数月和日带0问题
  • 原文地址:https://www.cnblogs.com/itxdm/p/install-and-configure-kvm-in-linux.html
Copyright © 2011-2022 走看看