[图文] Fedora 28 使用 Virt-Manager 创建 KVM 虚拟机以及 配置 KVM 虚拟机

实验环境:

  • 宿主机系统   :Fedora 28 WorkStation
  • 虚拟机管理器 :Virt-Manager 1.5.1
  • 虚拟机配置   :ha1  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.57
                 ha2  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.58
                 ha3  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.59

实验步骤:

  1. ### 准备镜像CentOS 7.4 1804  

  2. ### 安装 Virt-Manager

    # dnf install virt-manager libvirt -y
    

    ### 打开 Virt-Manager

    # virt-manager
    # 弹框输入密码即可
    
  3. ### 创建 KVM 虚拟机 选择 Local install media(ISO image or CDROM) –>  Forward 图片 1 选择ISO镜像,点击 Browse 图片 2 会进入选择镜像界面 图片 3 点击左下角添加镜像原文件存储位置 例如我的镜像在 /home/Documents 文件夹,现在添加它 Name为 Documents,Type为dir,Target Path默认即可 图片 4 图片 5 添加成功,选择镜像 图片 6 图片 7 下面设置虚拟机内存和CPU数目 图片 8 其次是设置卷(磁盘)大小及位置,可修改 图片 9 确认配置参数以及设置网络 –> Finish 图片 10 开始安装系统 图片 11

  4. ### 安装系统

  5. ### 系统联网初始化详细见 此链接

    ### 设置网卡开机自启

    # sed -i '/ONBOOT/s/no/yes/' /etc/sysconfig/network-scripts/ifcfg-eth0 
    # systemctl restart network
    # ip a        ##先设置ip,方便通过主机ssh到虚拟机
    

    ### 设置静态IP地址

  6. ### 设置主机名

    # hostnamectl set-hostname HOSTNAME
    
  7. ### 配置hosts文件

    # vi /etc/hosts
    
  8. ### 关闭防火墙

    # systemctl stop firewalld && systemctl disable firewalld
    
  9. ### 关闭 SElinux

    # sed -i  "s/^SELINUX=.*/SELINUX=disabled/g"  /etc/selinux/config
    
  10. ### 更换 YUM 源

    # mkdir -p /etc/yum.repos.d/bak
    # mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/bak
    # mv Cent* bak # curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    # yum clean all
    # yum makecache
    
  11. ### 更新系统

    # yum upgrade
    
  12. ### COMPLETE!!!

实验环境:

  • 宿主机系统   :Fedora 28 WorkStation
  • 虚拟机管理器 :Virt-Manager 1.5.1
  • 虚拟机配置   :ha1  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.57
                 ha2  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.58
                 ha3  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.59

启动NAT后会自动生成一个虚拟桥接设备virbr0,并分配IP地址,查看状态:

实验说明:

实验环境:

  • 宿主机系统   :Fedora 28 WorkStation
  • 虚拟机管理器 :Virt-Manager 1.5.1
  • 虚拟机配置   :ha1  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.57     (待创建)
                 ha2  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.58     (待创建)
                 ha3  CentOS 7.2 1511 (minimal)   virbr0:
    192.168.122.59     (待创建)

实验步骤:

  1. ### 安装系统并配置网络(所有虚拟机都需联网)

  2. ### 先操作第一台虚拟机(ha1)

  3. ### 编写主机名与IP的映射关系

    1 [root@ha1 ~]# vi /etc/hosts
    2 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    3 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    4 192.168.122.57    ha1
    5 192.168.122.58    ha2
    6 192.168.122.59    ha3
    
  4. ### 创建公有密钥

     1 [root@ha1 ~]# ssh-keygen -t rsa 
     2 Generating public/private rsa key pair.
     3 Enter file in which to save the key (/root/.ssh/id_rsa): 
     4 /root/.ssh/id_rsa already exists.
     5 Overwrite (y/n)? y
     6 Enter passphrase (empty for no passphrase): 
     7 Enter same passphrase again: 
     8 Your identification has been saved in /root/.ssh/id_rsa.
     9 Your public key has been saved in /root/.ssh/id_rsa.pub.
    10 The key fingerprint is:
    11 40:c3:81:eb:60:49:2e:f7:fe:59:bb:ef:7d:ad:bb:06 root@ha2
    12 The key's randomart image is:
    13 +--[ RSA 2048]----+
    14 |     o+.         |
    15 |  . ....         |
    16 | o . ..          |
    17 |. * .  .         |
    18 | + +    S        |
    19 |    o       E    |
    20 |   .    .    . . |
    21 |    .  o . .  o .|
    22 |     .o o+o .o++ |
    23 +-----------------+
    
  5. ### 发送公有密钥至远程机器

    1 [root@ha1 ~]# ssh-copy-id root@192.168.122.58
    2 [root@ha1 ~]# ssh-copy-id root@192.168.122.59
    
  6. ### 以上是单台虚拟机的逐条执行命令的方式,将以上操作写成脚本(脚本在本文末尾PS处)

  7. ### 下面操作其他虚拟机(ha2、ha3)

    1 # 虚拟机ha2
    2 [root@ha2 ~]# chmod 777 build-ssh-credit.sh 
    3 [root@ha2 ~]# ./build-ssh-credit.sh 
    
    1 # 虚拟机ha3
    2 [root@ha3 ~]# chmod 777 build-ssh-credit.sh 
    3 [root@ha3 ~]# ./build-ssh-credit.sh 
    
  8. ### 至此,三台虚拟机之间相互访问都无需输入密码,实现了SSH的免密登陆

  9. ### Complete!!!

宿主机为centos 6.8 64位,检查宿主机CPU是否支持虚拟化:

kvm虚拟机上操作:主要涉及Ntp服务同步和Pacemaker集群的搭建

  1. ### 配置kvm虚拟机

  2. ### 安装ntpd、pcs等软件

    # yum install -y ntp pcs pacemaker corosync fence-agents-all resource-agents
    
  3. ### 配置ntpd 与宿主机上操作类似,此处不再展开

    1 # timedatectl set-timezone Asia/Shanghai
    2 
    3 # sed -i s/^server.*// /etc/ntp.conf
    4 # echo "server 192.168.43.177 iburst" >> /etc/ntp.conf
    5 # echo "SYNC_HWCLOCK=yes" >> /etc/sysconfig/ntpdate
    6 # systemctl enable ntpd.service && systemctl start ntpd.service && systemctl status ntpd.service
    

    ### 查询当前时间设置

    # timedatectl
    
  4. ### 配置Pacemaker集群 检查是否安装Pacemaker软件 创建Fencing设备密钥Key

    # mkdir -p /etc/cluster
    # echo fecb9e62cbcf4e54dcfb > /etc/cluster/fence_xvm.key
    

    ### 设置hacluster用户密码

    # echo 000000|passwd --stdin hacluster
    

    ### 创建Pacemaker集群 创建时需要进行授权认证,以及需要添加到集群的主机名

    # pcs cluster auth ha1 ha2 ha3 -u hacluster -p 000000 --force
    

    ### 设置集群的名称时需要指定集群名称和需要添加到集群的主机名

    # pcs cluster setup --force --name openstack-ha ha1 ha2 ha3
    

    ### 设置在集群所有节点启动时启用corosync和pacemaker

    # pcs cluster enable --all
    

    ### 设置在集群所有节点都开启集群

    # pcs cluster start --all
    

    ### 查询集群状态

    # pcs status
    

    ### 为了实现对虚拟机的Fencing操作,需要为Pacemaker集群配置Stonith资源

    1 # pcs stonith create fence1 fence_xvm multicast_address=225.0.0.12
    2 # pcs stonith create fence2 fence_xvm multicast_address=225.0.0.12
    3 # pcs stonith create fence3 fence_xvm multicast_address=225.0.0.12
    

    ### 查询集群状态

    [root@ha1 ~]# pcs status
    Cluster name: openstack-ha
    Stack: corosync
    Current DC: ha1 (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum
    Last updated: Thu Aug 16 15:30:59 2018
    Last change: Thu Aug 16 12:44:03 2018 by root via cibadmin on ha1
    
    3 nodes configured
    3 resources configured
    
    Online: [ ha1 ha2 ha3 ]
    
    Full list of resources:
    
     fence1    (stonith:fence_xvm):    Started ha1
     fence2    (stonith:fence_xvm):    Started ha2
     fence3    (stonith:fence_xvm):    Started ha3
    
    Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled
    

    ### 查询当前 Pacemaker 集群中的 Stonith 资源

    [root@ha1 ~]# pcs stonith show
     fence1    (stonith:fence_xvm):    Started ha1
     fence2    (stonith:fence_xvm):    Started ha2
     fence3    (stonith:fence_xvm):    Started ha3
    

     

     

实验说明:

 往后的许多实验都将以Linux平台下的 KVM虚拟机为主,所以不可少的就是
Virt-Manager 虚拟机管理器。

本章将对如何安装和使用Virt-Manager管理器进行讲解,并且会对(实验用)虚拟机进行简单配置,方便后期实验。

实验说明:

在自动化部署时,会经常SSH别的机器去操作,然而每次的密码认证却很令人烦躁,尤其是很长的密码,因此SSH免密登陆就显得必不可少;

在机器数目很多的时候,使用更过的往往是Ansible分发并执行SSH免密登陆脚本,使得每台机器之间都能免密登陆。

启动NAT网络:

实验步骤:

PS:公钥初始化和实现SSH免密登陆的脚本(build-ssh-credit.sh),直接拷贝就可使用。

#!/usr/bin/bash

# 安装expect,minimal没有此rpm包,需联网或有本地yum源
yum install expect -y
expect << EOF
set timeout 10

# 创建公有密钥

spawn ssh-keygen -t rsa
expect {
        "*to save the key" {send "n";exp_continue}
        "*(y/n)" {send "yr";exp_continue}
        "Enter passphrase" {send "n";exp_continue}
        "Enter same passphrase" {send "n";exp_continue}
}

EOF

#  获取/etc/hosts文件中除localhost的映射关系
ip_list=`grep -v 'localhost' /etc/hosts | awk -F ' ' '{print $1,$2}'`
for ip in $ip_list
do
expect << EOF
        set timeout 2

        # 发送公有密钥
        spawn ssh-copy-id root@$ip
        expect {
                "yes/no" {send "yesr";exp_continue}
                "password" {send "000000r";exp_continue}
        }

        # 拷贝/etc/hosts文件到远程机器
        spawn scp /etc/hosts $ip:/etc
        expect {
                "yes/no" {send "yesr";exp_continue}
                "password" {send "rootr";exp_continue}
        }
EOF
done

 

  • 虚拟机的配置文件:/etc/libvirt/qemu/zabbix.xml
  • 虚拟硬盘文件:/opt/kvm/zabbix.qcow2
  • NAT网络配置文件:/etc/libvirt/qemu/networks/default.xml

宿主机上操作:主要涉及ntp服务器的搭建以及fencing的配置

  1. ### 确保宿主机系统是联网的,配置网络请参考 此链接

  2. ### 安装 virt-manager

    # dnf install virt-manager libvirt
    
  3. ### 使用virt-manager创建kvm虚拟机并配置kvm虚拟机 请参考 此链接

  4. ### 安装fence、ntpd等软件

    # dnf install -y ntp fence-virtd fence-virtd-multicast fence-virtd-libvirt fence-virt*
    
  5. ### 配置ntpd 设置区时为上海

    # timedatectl list-timezones | grep Shanghai
    # timedatectl set-timezone Asia/Shanghai
    

    ### 修改ntp配置文件

    # 删除原配置中的相关配置项
    # sed -e '/^server/d' -e '/^#server/d' -e '/^fudge/d' -e '/^#fudge/d' -i /etc/ntp.conf
    
    # 在结尾添加ntp服务器配置
    # sed -e '$a server 127.127.1.0' -e '$a fudge 127.127.1.0 stratum' -i /etc/ntp.conf 
    

    ### 设置开机自启、开启服务并查看状态

    # systemctl enable ntpd.service && systemctl start ntpd.service && systemctl status ntpd.service
    

     

    ntpq -c peers 
    ntpq -c assoc 
    timedatectl 
    
  6. ### 配置fence-virtd

    ### 创建 /etc/cluster 文件夹

    # mkdir -p /etc/cluster
    

    ### 生成fence_xvm.key文件

    # echo fecb9e62cbcf4e54dcfb > /etc/cluster/fence_xvm.key
    

    ### 初始化fence_virtd

    # fence_virtd -c
    

    ### 确认模块搜索路径 图片 12 确认监听方式 图片 13 确认监听IP地址以及端口 图片 14 确认监听网卡接口 图片 15 确认密钥路径 图片 16 确认后端虚拟化模块 图片 17 确认Libvirt URL 图片 18 是否替换文件 图片 19

    ### 设置开机自启、开启服务并查看状态

    # systemctl enable fence_virtd && systemctl start fence_virtd && systemctl status fence_virtd
    
  7. ### 验证fencevirtd 查询所有状态的虚拟机

    # fence_xvm -o list
    

    ###  查询结果如下图: 图片 20

  8. ### Fencing操作 关闭所有已开启的虚拟机

    # 启动(on)、关机(off)、重启(reboot)、状态获取(status)
    # fence_xvm -o off -H HA1
    # fence_xvm -o off -H HA2
    # fence_xvm -o off -H HA3
    

    ### 再次查询,结果如下图: 图片 21

virsh shutdown zabbix
virsh start zabbix

我是用的br0,为虚拟机添加多块网卡只需复制多个interface,并确保mac
address和PCI地址不同即可

chkconfig NetworkManager off
chkconfig network on
service NetworkManager stop
service network start

验证内核模块是否加载:

如果服务器上有桌面环境,想使用图形界面管理器virt-manager,可以安装完整的KVM环境:

/etc/init.d/libvirtd start

设置开机启动:

也可以简写成:

创建完后ifconfig会看到br0网桥,如果eth0上有多个IP,更改下相应的文件名, 
如:ifcfg-eth0:1改为ifcfg-br0:1

安装完成后会生成:

编辑虚拟机的配置文件,使用新的网桥:

<interface type='bridge'>
 <mac address='52:54:00:7a:f4:9b'/>
 <source bridge='br0'/>
 <model type='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

3、virsh shutdown 无法关闭虚拟机

删除快照:

chkconfig libvirtd on

常用操作

定义一个储存池和绑定目录:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

建立并激活存储池:

如果要创建或者修改NAT网络,要先编辑default.xml:

重启虚拟机:

virsh snapshot-create-as --domain zabbix --name init_snap_1

排错

复制代码 代码如下:

配置桥接网络

virt-install 
--hvm  #全虚拟化
--name=zabbix #虚拟机名字
--ram=4096  #分配内存
--vcpus=4  #分配CPU数
--cdrom=/opt/kvm/iso/CentOS-7-x86_64-DVD-1511.iso  #使用的ISO
--virt-type=kvm  #虚拟机类型
--disk path=/opt/kvm/zabbix.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=100  #磁盘大小,格式
--network netwrok=default  #网络设置,defalut为NAT模式
--accelerate  #KVM内核加速
--graphics vnc,listen=0.0.0.0,port=5922,password=123123 #vnc配置
--force 
--autostart
cat /proc/cpuinfo | egrep '(vmx|svm)' | wc -l;

启动libvirtd后,会自动创建了一个网卡,并启动dnsmasq服务,用来为虚拟机分配IP地址

结果大于0表示支持

virsh pool-build vmspool
virsh pool-start vmspool
virsh define /etc/libvirt/qemu/zabbix.xml

准备工作

virsh net-define /etc/libvirt/qemu/networks/default.xml

否则只能使用virsh destroy 强制关闭虚拟机

快照创建后配置文件在/var/lib/libvirt/qemu/snapshot/zabbix/init_snap_1.xml

重新加载和激活配置:

查看快照:

使用存储池创建虚拟机,并通过vnc连接:

启动虚机并设置自动获取IP即可,如果想手动指定虚拟机IP,要注意配置的IP需在NAT网段内

1、ERROR Format cannot be specified for unmanaged storage.

配置网络

启动虚拟机管理接口服务:

net.ipv4.ip_forward = 1
sysctl -p

之后使用VNC连接虚拟机并设置下网络即可

 snapshot-delete zabbix init_snap_1

使用该命令关闭虚拟机时,KVM是向虚拟机发送一个ACPI的指令,需要虚拟机安装acpid服务:

创建网桥:

复制代码 代码如下:

yum groupinstall Virtualization ‘Virtualization Client’ ‘Virtualization
Platform’ ‘Virtualization Tools’

配置NAT网络

  • NAT网络:
    虚拟机使用宿主机的网络访问公网,宿主机和虚拟机能互相访问,但不支持外部访问虚拟机
  • 桥接网络:
    虚拟机复用宿主机物理网卡,虚拟机与宿主机在网络中角色完全相同,支持外部访问
mkdir -p /opt/kvm
virsh pool-define-as vmspool --type dir --target /opt/kvm
snapshot-list zabbix
virsh net-list --all

正常情况下libirtd启动后就会启动virbr0,并自动添加IPtables规则来实现NAT,要保证打开ip_forward,在/etc/sysctl.conf中:

virt-manager 没有找到存储池,创建储存池即可

yum install kvm libvirt python-virtinst qemu-kvm virt-viewer
bridge-utils

virsh edit zabbix

下载虚拟机要安装的ISO系统镜像文件,之后需创建存储池,指定在宿主机上虚拟机磁盘的存储位置,创建存储目录:

virsh net-edit default
lsmod | grep kvm

创建虚拟机快照:

重新加载配置:

yum -y install acpid && /etc/init.d/acpid start

KVM可以配置两种:

系统如果安装了桌面环境,网络会由NetworkManager进行管理,NetworkManager不支持桥接,需要关闭NetworkManger:

不想关闭NetworkManager,也可以在ifcfg-br0中手动添加参数”NM_CONTROLLED=no”

brctl show

KVM核心软件包:

virsh iface-bridge eth0 br0
virsh net-start default
virsh net-autostart default

您可能感兴趣的文章:

  • 详解Linux
    虚拟机根分区磁盘扩充空间记录
  • 【Linux】VMware虚拟机中如何配置静态IP详解
  • Linux系列教程之虚拟机中安装Centos7.0
  • 详解在Linux虚拟机下配置tomcat
  • 在VMware虚拟机下安装Linux的图文教程(高级安装)
  • linux
    普通用户切换成root免密码的实现
  • 在Linux环境下mysql的root密码忘记解决方法(三种)
  • linux系统中重置mysql的root密码
  • 虚拟机Linux系统忘记密码修改root或其他用户密码的方法

最近要在外网搞一套监控系统,正好有一台服务器配置比较高,也没跑什么重要的业务,就拿来划了一个KVM虚拟机,可能是平时各种虚拟机用的比较多,配置起来感觉比想象中简单的多,简单记录下过程

使用real
vnc或者其它vnc客户端连接kvm闪退,把客户端设置中的ColourLevel值设置为rgb222或full即可

virsh snapshot-create-as zabbix init_snap_1

安装kvm

之后使用vnc客户端连接
宿主机IP:5922,即可使用图形安装系统;也可以选择nographics模式,无需vnc在命令行下安装,建议使用vnc

默认会有一个叫default的NAT虚拟网络,查看NAT网络:

创建虚拟机

找到网卡配置,改为:

KVM相关操作都通过vish命令完成,参数虽然多,但是功能一目了然,很直观

2、KVM VNC客户端连接闪退

网站地图xml地图