• CentOS 7.5 安装KVM虚拟机(Windows)


    一、KVM环境搭建
    1.检测系统是否支持
    cat /proc/cpuinfo | egrep 'vmx|svm'
    KVM是基于x86虚拟化扩展(Intel VT 或者 AMD-V)技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。
    有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。


    2.关闭SELinux
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config


    3.安装KVM环境
    安装kvm基础包
    yum -y install kvm

    安装kvm核心包--虚拟操作系统模拟器加速模块
    yum -y install qemu-kvm qemu-kvm-tools

    安装kvm管理工具
    yum -y install libvirt python-virtinst libvirt-python virt-manager libguestfs-tools bridge-utils virt-install
    libvirt:必须要装的核心工具
    virt-manager:虚拟机图形管理工具(宿主机有桌面环境时可以考虑安装,命令操作或者远程控制则不需要)
    bridge-utils:虚拟机与外界通信的命令管理工具
    virt-install:虚拟机安装工具
    pyhon-virtinst: 包含python模块和工具(virt-install,virt-clone和virt-image)

    重启宿主机,加载kvm相关模块
    shutdown -r now

    查看kvm模块是否被正确加载
    lsmod | grep kvm
    出现以下信息则表示正确加载
    kvm_intel         162153       0
    kvm                  525259      1     kvm_intel
    irqbypass        13503         1     kvm

    开启kvm服务,并设置开机启动
    systemctl start libvirtd.service
    systemctl enable libvirtd.service

    查看操作结果,出现Active:active(running)字样则说明运行情况良好
    systemctl status libvirtd
    systemctl is-enabled libvirtd

     

    二、网桥搭建
    如果是在局域网内安装kvm虚拟机,为了方便连接和维护管理,kvm虚拟机的网络模式我们建议使用Bridge模式(另外还有NAT模式),这样kvm虚拟机和宿主机就处在同一个网段,局域网内其它主机就直接连接

    1.查看宿主机网卡信息
    ip a 或者 ifconfig a
    一般物理网卡名称为eth0、eth1或ens开头的等等,我本机上的就是ens33
    复制ens33网卡配置文件到br0文件
    cd /etc/sysconfig/network-scripts/
    cp ifcfg-ens33 ifcfg-br0

    2.宿主机物理网卡配置
    vim ifcfg-ens33

    TYPE=Ethernet      #TYPE必须为Ethernet 
    PROXY_METHOD=none
    BROWSER_ONLY=no
    
    #BOOTPROTO=dhcp
    #DEFROUTE=yes
    
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    
    NAME=ens33
    UUID=5169b9de-3b6a-425e-8f92-3c74e1e8d97d
    DEVICE=ens33
    ONBOOT=yes
    
    BRIDGE=br0       #在原来的ifcfg-ens33配置文件中必须添加的(这块网卡桥接到br0设备上) 
    NM_CONTROLLED=no   #是否由NetworkManger服务控制该网络接口,修改后立即生效,无需重启,一般设置成no
    
    # 因为要设置桥接,这几项IP地址等原来的配置信息必须关闭,在br0配置文件中再设置
    #IPADDR=192.168.0.9
    #NETMASK=255.255.255.0 
    #GATEWAY=192.168.0.1 
    #DNS1=114.114.114.114
    #DNS2=8.8.8.8 
    #PREFIX=24

    3.桥接网卡配置

    vim ifcfg-br0

    TYPE=Bridge      #TYPE必须为Bridge
    DEVICE=br0
    NAME=br0
    
    BOOTPROTO=static
    DEFROUTE=yes     #是否使用默认路由
    PEERDNS=no      #是否指定DNS,如果使用DHCP协议,默认为yes
    PEERROUTES=no     #是否指定路由
    ONBOOT=yes
    DELAY=0
    NM_CONTROLLED=no    #同样设置为no,不让NetworkManager服务管理br0网卡
    
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_DEFROUTE=yes
    IPV6_AUTOCONF=yes
    IPV6_FAILURE_FATAL=no
    
    IPADDR=192.168.0.9
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.1
    DNS1=114.114.114.114
    DNS2=8.8.8.8
    PREFIX=24

    4.查看设置结果

    关闭NetworkManager服务,也可以用service stop NetworkManager,systemctl是现在linux发行版通用的服务管理工具,CentOS中使用service命令会自动调用systemctl工具
    systemctl stop NetworkManager.service

    重启网络服务,如果重启不成功,一般是ens33和br0配置文件中配置项冲突造成的
    systemctl restart network.service

    查看网络配置是否正确,可以ip a查看是否ens33和br0信息,推荐使用brctl show命令,如果提示没有brctl命令,yum -y install bridge-utils安装 

    brctl show

    如果结果中出现类似下面的信息,则表明桥接初步设置成功,主要是第一项,第二项,第四项,常见的情况是第四项为空,原因是物理网卡配置文件中Bridge=br0这一项缺少

     

    三、VNC环境搭建
    1.安装vnc服务
    yum -y install tigervnc tigervnc-server

    2.vnc服务配置——宿主机远程控制
    配置vnc
    将/lib/systemd/system/vncserver@.service文件复制一份到/etc/systemd/system/目录
    cp /lib/systemd/system/vncserver@.service  /etc/systemd/system/vncserver@:1.service
    编辑刚刚复制得到的文件,将文件中的<USER>修改为VNC Client(或者VNC Viewer)连接的账号,我只设置一个用户root,多用户再增加对应的vncserver@:2.service文件即可
    vim /etc/systemd/system/vncserver@:1.service
    修改以后的文件部分内容(只修改文件下半部分)

    [Unit]
    Description=Remote desktop service (VNC)
    After=syslog.target network.target
    
    [Service]
    Type=forking
    User=root
    
    # Clean any existing files in /tmp/.X11-unix environment
    ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"
    #ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver :1 -geometry 1280*720 -depth 24"
    PIDFile=/root/.vnc/%H%i.pid
    ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    
    [Install]
    WantedBy=multi-user.target

    设置vnc连接密码,输入命令vncpasswd以后连续输入两次密码,然后直接连续回车
    vncpasswd

    启动vncserver@:1.service并设置开机启动
    systemctl start vncserver@:1.service
    systemctl enable vncserver@:1.service

    设置防火墙(VNC默认是被防火墙阻止的)
    firewall-cmd --permanent --add-service="vnc-server" --zone="public"
    firewall-cmd --reload

    启动VNC服务
    vncserver
    会出现以下信息:其中说明VNC客户端连接账号为root,端口号为5901
    New 'dev:1 (root)' desktop is dev:1
    Starting applications specified in /root/.vnc/xstartup
    Log file is /root/.vnc/dev:1.log

    测试

    3.vnc服务配置——虚拟机远程控制
    上面是VNC连接主机的VNC服务时设置的情况,如果是要远程连接主机安装虚拟机,可以不进行上面的设置,安装虚拟机的时候用主机ip,端口号5900(默认,可以进行设置,后面会说到),有权限的账号密码都可以连接。

    这里也有一个坑:5900是VNC里面远程连接虚拟机用的端口(安装和安装好以后都用这个端口),能远程操作安装过程;5901,5902等端口是VNC中设置的远程连接主机的端口号,这里要做好区分。

    还有一种用virt-manager虚拟机图形管理的方式安装虚拟机,这里有个前提,主机必须安装好GNOME等桌面环境,CentOS中安装有点复杂,很难安装成功(踩过的第一个坑),个人觉得还是用VNC的方式安装比较好,服务器安装桌面环境多少有点累赘。

     

    四、虚拟机安装
    这一步操作需要注意的几个点:
    a、局域网内与主机传输文件用scp或ftp命令,要保证ISO镜像文件在主机上有操作权限的目录下,比如 /home等;
    b、不管安装什么系统的虚拟机,创建的磁盘类型,分配的虚拟内存等参数可能有所不同,但有几个参数必须要正确对应,否则安装不成功。需要注意的几个参数:

    --disk
    --cdrom或者--location
    --cpu ( 这个必须和主机的cpu型号一直 )
    --network ( 首先要确定需要安装虚拟机网络的类型,是Bridge模式还是NAT模式 )
    --graphics
    --os-type

    1.创建磁盘(kvm虚拟机的磁盘总大小)
    创建类型为raw的磁盘,还有另外两种格式img和qcow2
    qemu-img create -f raw /data/vms/win2008.raw 20G

    检查磁盘是否创建成功
    qemu-img info /data/vms/win2008.raw

    看到类似以下信息表明磁盘创建成功

    2.使用virt-install命令以及VNC远程控制安装虚拟机

    Windows系统安装

    virt-install 
    --virt-type kvm 
    --name win2008 
    --ram 2048 
    --cdrom=/home/Windows_Server_2008_R2_with_SP1_x64_DVD_Chinese-Simplified.iso 
    --boot cdrom 
    --vcpu 1 
    --network bridge=br0,model='e1000' 
    --graphics vnc,listen=0.0.0.0,port=5900 
    --disk path=/data/vms/win2008.raw,bus='ide' 
    --noautoconsole 
    --os-type=windows

    执行上述命令后,虚拟机安装并未结束,接下来用上面配置的VNC连接主机进行后续操作

    此时如果virt-install命令参数没有问题,会有提示信息:
    开始安装......
    域安装仍在进行,您可以重新连接
    到控制台(virsh console)以便完成安装进程

    执行以后只看到提示连接成功,其他没有变化,所以不用执行这个命令,暂时没发现有什么用处
    局域网内的任意一台同网段的电脑通过vnc client或者vnc viewer连接虚拟机


    CentOS系统安装

    virt-install 
    --virt-type=kvm 
    --name=centos7 
    --vcpus=2 
    --memory=2048 
    --location=/home/CentOS-7-x86_64-Minimal-1804.iso 
    --disk path=/data/vms/centos7.qcow2,size=20,format=qcow2 
    --network bridge=br0 
    --graphics none 
    --extra-args='console=ttyS0' 
    --force

    使用--graphics none说明安装过程不使用图形化的交互方式,直接在命令行终端操作安装即可
    在命令行终端安装完毕后会提示回车继续,回车后虚拟机就会启动并进入到登陆界面


    3.virt-install常用参数说明
    # 旧版本的写法

    –name 指定虚拟机名称
    –memory 分配内存大小。
    –vcpus 分配CPU核心数,最大与实体机CPU核心数相同
    –disk 指定虚拟机镜像,size指定分配大小单位为G。
    –network 网络类型,此处用的是默认,一般用的应该是bridge桥接。
    –accelerate 加速
    –cdrom 指定安装镜像iso
    –vnc 启用VNC远程管理,一般安装系统都要启用。
    –vncport 指定VNC监控端口,默认端口为5900,端口不能重复。
    –vnclisten 指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
    –os-type=linux,windows
    –os-variant=rhel6

    # 新版本的写法

    --name 指定虚拟机名称
    --ram 虚拟机内存大小,以 MB 为单位
    --vcpus 分配CPU核心数,最大与实体机CPU核心数相同
    --vnc 启用VNC远程管理,一般安装系统都要启用。
    --vncport 指定VNC监控端口,默认端口为5900,端口不能重复。
    --vnclisten 指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
    --network 虚拟机网络配置
    # 其中子选项,bridge=br0 指定桥接网卡的名称。

    --os-type=linux,windows
    --os-variant=rhel7.2

    --disk 指定虚拟机的磁盘存储位置
    # size,初始磁盘大小,以 GB 为单位。

    --location 指定安装介质路径,如光盘镜像的文件路径。
    --graphics 图形化显示配置
    # 全新安装虚拟机过程中可能会有很多交互操作,比如设置语言,初始化 root 密码等等。
    # graphics 选项的作用就是配置图形化的交互方式,可以使用 vnc(一种远程桌面软件)进行链接。
    # 我们这列使用命令行的方式安装,所以这里要设置为 none,但要通过 --extra-args 选项指定终端信息,
    # 这样才能将安装过程中的交互信息输出到当前控制台。
    --extra-args 根据不同的安装方式设置不同的额外选项

     

    五、VNC端口说明
    Linux下的VNC可以同时启动多个vncserver,各个vncserver之间用显示编号(display number)来区分,每个vncserver服务监听3个端口,它们分别是:

    5800+显示编号: VNC的httpd监听端口,如果VNC客户端为IE,Firefox等非vncviewer时必须开放。
    5900+显示编号: VNC服务端与客户端通信的真正端口,必须无条件开放。
    6000+显示编号: X监听端口,可选。
    显示编号、开放的端口分别由/etc/sysconfig/vncservers文件中的VNCSERVERS和VNCSERVERARGS控制。
    VNCSERVERS="显示编号1:用户名1 …"
    如:
    VNCSERVERS="1:root 2:aiezu"
    VNCSERVERARGS的设置方式为:
    VNCSERVERARGS[显示编号1]="参数一 参数值一 参数二 参数值二 ……"
    如:
    VNCSERVERARGS[2]="-geometry 800x600 -nohttpd"
    VNCSERVERARGS的详细参数有:
    -geometry 桌面分辨率,默认1024x768;
    -nohttpd 不监听HTTP端口(58xx端口);
    -nolisten tcp 不监听X端口(60xx端口);
    -localhost 只允许从本机访问;
    -AlwaysShared 默认只同时允许一个vncviewer连接,此参数允许同时连多个vncviewer;
    #!/bin/sh
    # Uncomment the following two lines for normal desktop:
    # unset SESSION_MANAGER
    # exec /etc/X11/xinit/xinitrc
    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    vncconfig -iconic &
    #xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    #twm &
    startkde &
    # gnome-session &
    配置完各个用户根目录下的".vnc/xstartup"后,执行service vncserver restart 重新启动vncserver使配置生效。

    VNCSERVERS的设置方式为:
    -SecurityTypes None 登录不需要密码认证VncAuth默认值,要密码认证。
    VNC Server的默认设置下,客户端连接时启动的是xterm,如果想看到桌面,必须将用户根目录下的".vnc/xstartup"文件中的最后两行注释掉,然后根据你安装的桌面坏境,添加一行"startkde &"或者"gnome-session &"。

     

  • 相关阅读:
    asp.net过滤数据中有异常数据字符串
    微信内置浏览器的 User Agent的判断
    最近突然想了很久还是开博每天写点什么
    Sonar-scanner 插件配置应用
    存clob的值
    动态代理
    在oracle函数中不可直接将变量作为sql语句中的参数
    按照行、列进行统计(按两个维度进行统计)
    查询关联不上的数据,三张表查询
    前台页面——js/jq循环
  • 原文地址:https://www.cnblogs.com/fjping0606/p/9922916.html
Copyright © 2020-2023  润新知