ITPub博客

首页 > Linux操作系统 > Linux操作系统 > kvm快速入门

kvm快速入门

原创 Linux操作系统 作者:hellohf123 时间:2021-11-26 16:29:46 0 删除 编辑

学习视频 bilibili  搜kvm

自己做个记录,很实用

查看并设置字符集

export LANG="en_US.UTF-8"


在系统上创建网桥设备, 名字为br0 并将eth0 桥接到br0

yum -y install bridge-utils
cat >  /etc/sysconfig/network-scripts/ifcfg-br0  << EOF
DEVICE=br0
ONBOOT=yes
BOOTPROTO=static
NM_CONTROLLED=no
IPADDR=10.200.100.11
NETMASK=255.255.255.0
GATEWAY=10.200.100.2
DNS1=223.5.5.5
USERCTL=no
TYPE=Bridge
EOF
cat >  /etc/sysconfig/network-scripts/ifcfg-eth0  << EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
NM_CONTROLLED=no
ONBOOT=yes
BRIDGE=br0
EOF
systemctl  restart network


检查宿主机是否支持 kvm

egrep '(vmx|svm)' /proc/cpuinfo


安装kvm

yum   -y   install   libvirt*
systemctl  start libvirtd
systemctl  enable libvirtd


创建 一个kvm 网络 类型 bridge 名字 br0

创建一个kvm 网络的 xml 文件
echo "<network><name>br0</name><uuid>`uuidgen`</uuid><forward mode='bridge'/><bridge name='br0'/></network>"  > /etc/libvirt/qemu/networks/br0.xml
从xml文件创建一个kvm网络
virsh net-define    /etc/libvirt/qemu/networks/br0.xml
启动kvm 网络br0
virsh net-start   br0
设置br0 随着 libvirtd 启动而一起启动
virsh  net-autostart  br0

创建 两个 kvm pool 类型为 dir

创建 kvm pool 自定义目录
mkdir -p /kvm/image
mkdir  -p /kvm/iso
创建 两个 kvm pool 名字是 kvmimage ISO
virsh pool-define-as  kvmimage  dir --target  "/kvm/image"
virsh pool-define-as  iso  dir --target  "/kvm/iso"
启动 kvm pool
virsh pool-start  kvmimage
virsh pool-start  iso
设置 kvm pool 随 libvirtd 启动而启动
virsh  pool-autostart   kvmimage
virsh  pool-autostart   iso

安装virt-manager 图形工具

yum   -y   install    virt-manager xorg*

重新ssh连接xxx.xx.xx.xx 直到不再出现如下提示

Last login: Tue Jun 25 22:19:59 2019 from 192.168.1.100
/usr/bin/xauth:  file /root/.Xauthority does not exist

在xshell 中再次连接宿主机 可以多尝试几次 只到 没有再出现 之类的提示

输入 virt-manager 命令 即可打开图形工具

[root@localhost ~]# virt-manager 
[root@localhost ~]# libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
yum -y install mesa-dri-drivers



使用virt-manager安装虚拟机

上传ISO 镜像文件到指定目录

使用 Xftp 上传ISO

cd /kvm/iso/
ls /kvm/iso


启动virt-manager 从 iso 安装第一个虚拟机

   

       



选择 网络 br0 virtIO 
磁盘 qcow2 virtIO  大小3G
显示 vnc   ens-us
开始安装

                                   

 

  安装操作系统 注意

使用 标准分区 文件系统 xfs 全部给根分区  /
标准分区 
/ 3G  xfs
没有  swap
没有  boot


  虚拟机名字

centos7.9_temp


  虚拟磁盘名字

centos7.9_temp.qcow2


  关闭虚拟机 备份 虚拟磁盘

cp /kvm/image/centos7.9_temp.qcow2   /kvm/image/centos7.9_temp.qcow2-bak


  备份虚拟机 xml 文件

cp /etc/libvirt/qemu/centos7.9_temp.xml  /etc/libvirt/qemu/centos7.9_temp.xml-bak


 

物理主机 virsh 命令自动补全

yum install -y bash-completion libvirt-bash-completion
yum -y install libvirt-client
source  /usr/share/bash-completion/completions/vsh
source /etc/profile


 优化模板虚拟机

console 设置

使之可以使用 virsh console 命令登陆虚拟机

虚拟机里面执行
grubby --update-kernel=ALL --args="console=ttyS0"
reboot


物理机执行
virsh console xxx


模板虚拟机需要联网安装软件包 配置ip

cat > /etc/sysconfig/network-scripts/ifcfg-eth0   << EOF
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.200.100.101
PREFIX=24
GATEWAY=10.200.100.2
DNS1=223.5.5.5
EOF
systemc restart network

退出console 使用 ssh 连接配置的ip 地址

退出console
ctrl+]


配置模板虚拟机 使之接收宿主机的 virsh shutdown 命令

kvm 虚拟机安装

yum install -y acpid
systemctl enable acpid

 

安装扩展虚拟磁盘 需要使用的软件包
yum install cloud-utils-growpart -y


  模板虚拟机内部安装 qga


并且模板虚拟机内部安装

yum -y install qemu-guest-agent
systemctl start qemu-guest-agent
systemctl enable qemu-guest-agent


测试qga,在宿主机上修改虚拟机的root密码

virsh set-user-password centos7.9_temp --user root --password 123456


在宿主机上,配置虚拟机的ip

先安装

yum -y install libguestfs-tools-c

关闭虚拟机

virsh destroy centos7.9_temp
mkdir /tmp/centos7.9_temp
cat >  /tmp/centos7.9_temp/ifcfg-eth0  << EOF
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.200.100.102
PREFIX=24
GATEWAY=10.200.100.2
DNS1=223.5.5.5
EOF
virt-copy-in   -d    centos7.9_temp        /tmp/centos7.9_temp/ifcfg-eth0    /etc/sysconfig/network-scripts/


开启虚拟机,登录进去确认ip有没有改变

[root@localhost image]# virsh start centos7.9_temp 
Domain centos7.9_temp started
[root@localhost image]# virsh console centos7.9_temp 
Connected to domain centos7.9_temp
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
centos7_temp login: root
Password: 
Last login: Sat Nov 20 21:29:23 on ttyS0
[root@centos7_temp ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:e9:0d:a1 brd ff:ff:ff:ff:ff:ff
    inet 10.200.100.102/24 brd 10.200.100.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fee9:da1/64 scope link 
       valid_lft forever preferred_lft forever
[root@centos7_temp ~]#

看到虚拟机ip变成

10.200.100.102



kvm虚拟机扩容

宿主机

virsh blockresize --path  /kvm/image/centos7.9_temp    --size 10G   centos7.9_temp

虚拟机

fdisk -l
df -lh
growpart   /dev/vda 1  && partprobe   &&  xfs_growfs  /dev/vda1
df -lh


示例

宿主机

[root@localhost image]# virsh blockresize --path  /kvm/image/centos7.9_temp    --size 8G   centos7.9_temp
Block device '/kvm/image/centos7.9_temp' is resized


虚拟机

[root@centos7_temp ~]# growpart   /dev/vda 1  && partprobe   &&  xfs_growfs  /dev/vda1
CHANGED: partition=1 start=2048 old: size=16775135 end=16777183 new: size=20969439 end=20971487
meta-data=/dev/vda1              isize=512    agcount=7, agsize=327616 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2096891, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2096891 to 2621179
[root@centos7_temp ~]# df -h 
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           919M     0  919M   0% /dev/shm
tmpfs           919M  8.6M  911M   1% /run
tmpfs           919M     0  919M   0% /sys/fs/cgroup
/dev/vda1        10G  1.5G  8.6G  15% /
tmpfs           155M     0  155M   0% /run/user/0
[root@centos7_temp ~]#



清理环境

命令行删除虚拟机

[root@localhost image]# virsh destroy centos7.9_temp 
Domain centos7.9_temp destroyed
[root@localhost image]# virsh undefine centos7.9_temp 
Domain centos7.9_temp has been undefined
[root@localhost image]# virsh vol-delete centos7.9_temp
centos7.9_temp      centos7.9_temp.bak  
[root@localhost image]# virsh vol-delete centos7.9_temp --pool kvmimage 
Vol centos7.9_temp deleted


复制原始的备份的模板虚拟机

[root@localhost image]# cp centos7.9_temp.bak centos7.9_temp
[root@localhost image]# cd /etc/libvirt/qemu/
[root@localhost qemu]# cp centos7.9_temp.xml.bak centos7.9_temp.xml
[root@localhost qemu]# ls
centos7.9_temp.xml  centos7.9_temp.xml.bak  networks
[root@localhost qemu]# virsh list --all
 Id    Name                           State
----------------------------------------------------
[root@localhost qemu]# virsh define /etc/libvirt/qemu/centos7.9_temp.xml
Domain centos7.9_temp defined from /etc/libvirt/qemu/centos7.9_temp.xml
[root@localhost qemu]# 
[root@localhost qemu]# 
[root@localhost qemu]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     centos7.9_temp                 shut off



复制xml文件,复制虚拟磁盘文件

[root@localhost qemu]# cp /etc/libvirt/qemu/centos7.9_temp.xml /etc/libvirt/qemu/kvm10.200.100.103.xml
[root@localhost qemu]# ls
centos7.9_temp.xml  centos7.9_temp.xml.bak  kvm10.200.100.103.xml  networks
[root@localhost qemu]# cd /kvm/image/
[root@localhost image]# ls
centos7.9_temp  centos7.9_temp.bak
[root@localhost image]# virsh vol-clone centos7.9_temp --pool kvmimage kvm10.200.100.103
Vol kvm10.200.100.103 cloned from centos7.9_temp
[root@localhost image]# virsh vol-resize kvm10.200.100.103 --pool kvmimage --capacity 8G
Size of volume 'kvm10.200.100.103' successfully changed to 8G
[root@localhost image]# virsh vol-info kvm10.200.100.103 --pool kvmimage 
Name:           kvm10.200.100.103
Type:           file
Capacity:       8.00 GiB
Allocation:     1.59 GiB
[root@localhost image]#



修改如下基本内容

虚拟机名字
name   kvm10.200.100.103
虚拟机 uuid
uuid
uuidgen
虚拟机 虚拟磁盘path
<source file='/kvm/image/kvm10.200.100.103'/>
虚拟机网卡 mac 地址
      <mac address='52:54:00:d3:01:ac'/>
echo "52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"
virsh  define /etc/libvirt/qemu/kvm10.200.100.103.xml

关机状态更改kvm10.200.100.103的ip地址

cat >  /tmp/ifcfg-eth0  << EOF
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.200.100.103
PREFIX=24
GATEWAY=10.200.100.2
DNS1=223.5.5.5
EOF
virt-copy-in   -d    kvm10.200.100.103        /tmp/ifcfg-eth0    /etc/sysconfig/network-scripts/


virsh   start kvm10.200.100.103


登录虚拟机kvm10.200.100.103查看ip地址,正确

[root@localhost qemu]# virsh console kvm10.200.100.103 
Connected to domain kvm10.200.100.103
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
centos7 login: root
Password: 
Last login: Sat Nov 20 22:20:24 on ttyS0
[root@centos7 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:10:52:eb:08 brd ff:ff:ff:ff:ff:ff
    inet 10.200.100.103/24 brd 10.200.100.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:10ff:fe52:eb08/64 scope link 
       valid_lft forever preferred_lft forever





最后附加一个创建虚拟机脚本,根据自己的环境更改使用

[root@localhost ~]# cat create_vm.sh
#!/bin/bash
images_dir=/letv/kvm/image
xml_dir=/etc/libvirt/qemu
read -p "请输入新建虚拟机名称: " new_kvm
if [  -f "${xml_dir}/${new_kvm}.xml" ];then
        echo "${new_kvm} 已存在,部署程序退出..."
            exit 1
fi
if [  -f "${images_dir}/${new_kvm}.qcow2" ];then
                echo "${new_kvm}.qcow2  已存在,部署程序退出..."
                exit 1
fi
virsh vol-clone  centos7-1908.qcow2  --pool kvmimage ${new_kvm}.qcow2
read -p "请输入新建虚拟机磁盘大小单位G: " disk_size
echo "开始创建虚拟磁盘"
virsh  vol-resize  ${new_kvm}.qcow2  --pool kvmimage  --capacity $disk_size'G'
read -p "请输入新建虚拟机内存大小单位KB:4G=4194304  8G=8388608  16G=16777216  32G=33554432   : " mem_size
read -p "请输入新建虚拟机cpu核心数 : " core_num
################配置虚拟机模板#######################################################################################################################################################################################
cp ${xml_dir}/centos7-1908.xml   ${xml_dir}/${new_kvm}.xml
sed  -i  "s#.*:.*:.*:.*:.*:.*#<mac address='`MACADDR="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"; echo $MACADDR`'/>#g"   ${xml_dir}/${new_kvm}.xml
sed    -i  "s#<uuid>.*-.*-.*-.*-.*</uuid>#<uuid>`uuidgen`</uuid>#g"      ${xml_dir}/${new_kvm}.xml
sed -i     "s#centos7-1908#${new_kvm}#g"           ${xml_dir}/${new_kvm}.xml
#sed    -i  "s#mem-size#$mem_size#g"      ${xml_dir}/${new_kvm}.xml
#sed    -i  "s#core-num#$core_num#g"      ${xml_dir}/${new_kvm}.xml
sed    -i  "s#<memory unit='KiB'>2097152</memory>#<memory unit='KiB'>$mem_size</memory>#g"      ${xml_dir}/${new_kvm}.xml
sed    -i  "s#<currentMemory unit='KiB'>2097152</currentMemory>#<currentMemory unit='KiB'>$mem_size</currentMemory>#g"      ${xml_dir}/${new_kvm}.xml
sed    -i  "s#<vcpu placement='static'>2</vcpu>#$<vcpu placement='static'>$core_num</vcpu>#g"      ${xml_dir}/${new_kvm}.xml
#######################################################################################################################################################################################################################
virsh define   ${xml_dir}/${new_kvm}.xml
virsh autostart ${new_kvm}
                echo "创建成功"
read -p "请输入为虚拟机配置的ip: " new_kvm_ip
mkdir /tmp/${new_kvm}
echo "NAME=eth0"   >               /tmp/${new_kvm}/ifcfg-eth0
echo "DEVICE=eth0" >>              /tmp/${new_kvm}/ifcfg-eth0
echo "ONBOOT=yes" >>               /tmp/${new_kvm}/ifcfg-eth0
echo "TYPE=Ethernet" >>    /tmp/${new_kvm}/ifcfg-eth0
echo "BOOTPROTO=none" >>   /tmp/${new_kvm}/ifcfg-eth0
echo "IPADDR=${new_kvm_ip}"   >>    /tmp/${new_kvm}/ifcfg-eth0
echo "NETMASK=255.255.255.0"  >>   /tmp/${new_kvm}/ifcfg-eth0
echo "GATEWAY=10.200.100.2"   >>   /tmp/${new_kvm}/ifcfg-eth0
echo "DNS1=223.5.5.5"   >>   /tmp/${new_kvm}/ifcfg-eth0
cat  /tmp/${new_kvm}/ifcfg-eth0
read -p "请确认您的网卡配置,按y键继续?[y/n]: " eth0_config
    if [ ! "${eth0_config}" = "y" ];then
        echo "输入错误!"
            exit 1
    fi
echo "开始配置$new_kvm 的网卡,请稍后......."
virt-copy-in   -d     $new_kvm        /tmp/${new_kvm}/ifcfg-eth0    /etc/sysconfig/network-scripts/
virsh start  $new_kvm   1>/dev/null
echo "正在启动虚拟机请稍后....."
sleep 15s
echo "虚拟机启动成功,登录赋值如下命令即可  ssh ${new_kvm_ip}"
rm -rf /tmp/${new_kvm}  2>/dev/null



配置虚拟机模板
sed    -i  "s#<memory unit='KiB'>2097152</memory>#<memory unit='KiB'>$mem_size</memory>#g"      ${xml_dir}/${new_kvm}.xml
sed    -i  "s#<currentMemory unit='KiB'>2097152</currentMemory>#<currentMemory unit='KiB'>$mem_size</currentMemory>#g"      ${xml_dir}/${new_kvm}.xml
sed    -i  "s#<vcpu placement='static'>2</vcpu>#$<vcpu placement='static'>$core_num</vcpu>#g"      ${xml_dir}/${new_kvm}.xml

这几个参数根据自己的模板虚拟机更改


赶紧测试一下吧!


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/70004783/viewspace-2843238/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle闪回
请登录后发表评论 登录
全部评论

注册时间:2021-08-05

  • 博文量
    59
  • 访问量
    19790