kvm
服务安装
查看机器是否支持虚拟化
cat /proc/cpuinfo | egrep ‘vmx|svm’
安装软件:
yum groupinstall "Virtualization Client" "Virtualization Platform" "Virtualization Tools" -y
yum install -y qemu-kvm libvirt ###qemu-kvm用来创建虚拟机硬盘,libvirt用来管理虚拟机
yum install -y virt-install ###用来创建虚拟机
跟虚拟机相关的目录:
/etc/libvirt/storage #存储池配置文件存放位置
/etc/libvirt/qemu/ #虚拟机配置文件存放位置
/etc/libvirt/qemu/networks #虚拟网络配置文件存放位置
/var/lib/libvirt/images/ #虚拟磁盘文件存放位置(默认存储池)
启动服务:
systemctl start libvirtd
图形管理器
virt-manager
命令方式安装虚拟机:
virt-install
存储
存储池:
存储池(Storage pools)是放置虚拟机的存储位置,存储池可以建立在好几种方式的存储上,我们以基于目录为存储池来学习。
默认存储池位置: **/var/lib/libvirt/images/**
创建存储池(目录)[非必须]
1.图形方式:
编辑 → 连接详情 → 存储
2.命令方式:
# mkdir /kvm/disk
定义存储池
# virsh pool-define-as vmdisk --type dir --target /kvm/disk
查看已定义的存储池
#virsh pool-list --all
激活并自动启动已定义的存储池,存储池不激活无法使用。
# virsh pool-start vmdisk
# virsh pool-autostart vmdisk
这里vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘文件了。
存储卷:
存储卷(storage volume)指虚拟磁盘文件,可以理解为虚拟机的硬盘
在存储池中创建虚拟机存储卷
virsh命令:
创建存储卷:
# virsh vol-create-as vmdisk mini.qcow2 20G --format qcow2
查看存储卷:
# virsh vol-list vmdisk
名称 路径
----------------------------------------------------------------------------
mini.qcow2 /kvm/disk/mini.qcow2
3.qemu命令(不会被存储池管理)
# qemu-img create -f qcow2 /var/lib/libvirt/images/mini.qcow2 20G
注1:KVM存储池主要是体现一种管理方式,可以通过挂载存储目录,lvm逻辑卷的方式创建存储池
注2:KVM存储池也要用于虚拟机迁移任务。
存储池相关管理命令
取消激活存储池
# virsh pool-destroy vmdisk
取消定义存储池
# virsh pool-undefine vmdisk
网络
KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式。
NAT–用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机。
Bridge–虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。
一. Bridge方式
Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。
配置:
1、编辑修改网络设备脚本文件,增加网桥设备br0
# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
TYPE=bridge
IPADDR=192.168.50.40
GATEWAY=192.168.40.254
DNS1=114.114.114.114
DNS2=8.8.8.8
2、编辑修改网络设备脚本文件,修改网卡设备ens33
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BRIDGE=br0
BOOTPROTO=none
DEVICE=enp33
ONBOOT=yes
3、重启网络服务
# /etc/init.d/network restart
4、校验桥接接口
# ifconfig br0
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f0795962c1cc no en33
virbr0 8000.5254005a2e43 yes virbr0-nic
启动STP
# brctl stp sr0 on
二. NAT方式(默认)
NAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
修改NAT网络
例:将default网络的dhcp功能关闭
1). 修改网络配置文件
# virsh net-edit defult #删除以下三行
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
2). 重启default网络
# virsh net-destroy default #关闭default网络
# virsh net-start default #启动default网络
1.创建NAT网络:
1). 图形方法:
2). 命令方法:
# cd /etc/libvirt/qemu/networks/
创建配置文件:
# cp default.xml nat-20.xml
修改配置文件:
# vim nat-20.xml #改名称,UUID,MAC地址
#加一行nat网络名称
创建网络:
# virsh net-create nat-20.xml
查看网络:
# virsh net-list --all
# virsh net-define /etc/libvirt/qemu/networks/nat-20.xml
# virsh net-autostart nat-20
虚拟机安装
virt-install -n c7 \
--memory 1024 \
--vcpus=1 \
--cdrom /data/iso/CentOS-7-x86_64-DVD-1908.iso \
--disk /data/img/c7.qcow2,size=10,format=qcow2,bus=scsi \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
参数说明:
--name # 虚拟机名称,需全局惟一
--memory # 虚拟机内在大小,单位为MB
--vcpus # VCPU个数及相关配置
--virt-type # 使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用virsh capabilities命令获取;
--cdrom # 光盘安装介质
--disk # 指定存储设备及其属性
--network bridge=br0 # 将虚拟机连入宿主机的网络中
--graphics vnc,listen=0.0.0.0 # 使vnc可以连接
--noautoconsole # 禁止自动连接至虚拟机的控制台
虚拟机管理:
连接
vncview 端口可用netstat -tnlp 查看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pvHt7cpn-1607307552811)(_v_images/20201019113245168_30097.png)]
安装过程和vmware 安装无异
vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
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=eth0
UUID=0e913cd6-599e-4bdb-a2ca-2c15bb87ea60
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.50.100
GATEWAY=192.168.50.254
DNS1=114.114.114.114
DNS2=8.8.8.8
[root@localhost ~]# ping -c 3 g.cn
PING g.cn (203.208.41.98) 56(84) bytes of data.
64 bytes from 203.208.41.98 (203.208.41.98): icmp_seq=1 ttl=128 time=22.7 ms
64 bytes from 203.208.41.98 (203.208.41.98): icmp_seq=2 ttl=128 time=18.9 ms
64 bytes from 203.208.41.98 (203.208.41.98): icmp_seq=3 ttl=128 time=22.2 ms
--- g.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 18.998/21.344/22.752/1.678 ms
[root@localhost ~]#
使用 ssh 可直接连接
初始化
systemctl stop firewalld
systemctl stop NetworkManager
systemctl disable firewalld
systemctl disable NetworkManager
宿主机能使用console命令连接
systemctl start serial-getty@ttyS0.service
systemctl enable serial-getty@ttyS0.service
setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
epel源
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum install -y net-tools vim lrzsz tree screen lsof tcp wget tcpdump nc mtr nmap openssl-devel ntpdate glances bash-completion psmisc
文件描述符数量
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
记录历史命令
echo 'export HISTTIMEFORMAT=" %F %T `whoami` "' >> /etc/profile
source /etc/profile
ntp配置
crontab -e
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com
【内核参数优化】
cat /etc/sysctl.conf
# 表示套接字由本端要求关闭,这个参数决定了它保持在FIN-wAIT-2状态的时间,默认值是60秒,建议调整为2,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_fin_timeout 60
net.ipv4.tcp_fin_timeout = 2
# 表示开启TCP链接中TIME_WAIT sockets的快速回收,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0 表示关闭,不建议开>启,因为nat网络问题
net.ipv4.tcp_tw_reuse = 1
# reuse和recycle这俩个参数是为防止生产环境下web,squid等业务服务器time_wait网络状态数量过多设置的
net.ipv4.tcp_tw_recycle = 0
#表示开启SYN Cookies功能,当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syscookies,默认为1,表示开启
net.ipv4.tcp_syncookies = 1
# 关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
#允许系统打开的端口范围,不建议从1024开始,因为某些端口会存在10000以内。一般情况下已够用。
net.ipv4.ip_local_port_range = 10000 65000
缓存设置
yum makecache
克隆
将c7克隆一个为c7-2
virt-clone -o c7 -n c7-2 -f /data/img/c7-2.qcow2
修改ip地址之后即可使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1PvkWbB4-1607307552814)(_v_images/20201019115130279_16425.png =467x)]
删除
#!/bin/bash
#delete KVM host completely
read -p "please input host that you want to delete:" $host
virsh destroy $host
virsh undefine $host
rm -f /var/lib/libvirt/images/$host.qcow2
快照
创建
virsh snapshot-create-as c7 c7-mir
恢复
yum install acpid -y
恢复快照前虚拟机需要关闭
virsh snapshot-revert c7 c7-mir
删除
删除快照也需要虚拟机关闭
virsh snapshot-delete c7 c7-mir
查看
[root@km img]# virsh snapshot-list c7
Name Creation Time State
------------------------------------------------------------
c7-mir 2020-10-18 23:58:49 -0400 running
[root@km img]#
virsh snapshot-dumpxml c7 c7-mir ## 查看一个快照的详细信息
virsh snapshot-current #查看最新的快照
迁移
虚拟机迁移分为冷迁和热迁
冷迁:又叫静态迁移,虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标主机中,实现的迁移。
热迁:又叫动态迁移,虚拟机无需关机,无需拷贝虚拟磁盘文件,但是需要迁移到的虚拟主机之间需要有相同的目录结构虚拟机磁盘文件.
基于共享存储的热迁移
冷迁
迁移源主机: 192.168.50.40 km
迁移目标主机: 192.168.50.41 km2
1.确定虚拟机处于关机状态
# virsh list --all
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z9Ev8yvD-1607307552815)(_v_images/20201019121720164_5506.png =498x)]
2准备迁移c7虚拟机,查看该虚拟机配置的磁盘文件
virsh domblklist c7
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aB6nhsGl-1607307552818)(_v_images/20201019122004881_14856.png =360x)]
3.拷贝磁盘文件,配置文件到目标宿主机
# cd /data/img
# rsync c7.qcow2 192.168.50.41:/data/img
# cd /etc/libvirt/qemu
# rsync c7.xml 192.168.50.41:/etc/libvirt/qemu
4.在目标宿主机上激活虚拟机
# virsh define /etc/libvirt/qemu/test.xml
5.启动虚拟机
# virsh start test
热迁(基于本地存储)
迁移源主机: 192.168.50.40
迁移目标主机: 192.168.50.41
使用tcp认证
配置libvirtd服务** 源宿主机和目标宿主机都要执行**
vim /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "0.0.0.0"
auth_tcp = "none"
mdns_adv = 0
配置libvirtd监听方式(无论是tcp,ssh,tls认证方式都需要配置) ** 源宿主机和目标宿主机都要执行**
# vim /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"
**编辑/etc/libvirt/qemu.conf文件 **源宿主机和目标宿主机都要执行
#vim /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"
重启libvirtd服务,使配置生效, 源宿主机和目标宿主机都要执行
systemctl restart libvirtd
检查端口和进程,源宿主机和目标宿主机都要执行
# netstat -tanp |grep libv
tcp 0 0 0.0.0.0:16509 0.0.0.0:* LISTEN 5061/libvirtd
原机器和目标机器要做好hosts解析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y4Lo7cr9-1607307552819)(_v_images/20201019143319844_22546.png =650x)]
在源宿主机测试连接目标宿主机
# virsh -c qemu+tcp://192.168.50.41/system list --all
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iAGbjQBr-1607307552820)(_v_images/20201019141636057_21240.png =580x)]
在目标宿主机上创建同样大小的磁盘文件,名称,路径,大小都要一样
# virsh vol-create-as img c7-2.qcow2 10G --format qcow2
迁移
# virsh migrate --live --copy-storage-all --unsafe --persistent test qemu+tcp://km-2/system
不知道是不是宿主机是vmware 的缘故报错说cpu 不支持
硬件管理
添加硬件都可以用virsh edit DomainName 来修改
cpu
生成环境只增不减
virsh setvcpus c7 2
硬盘
创建一个硬盘
qemu-img create -f qcow2 c7-sdb.qcow2 20G
#新建xml文件
[root@idc img]# vim temp.xml
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback'/>
<source file='/data/img/c7-sdb.qcow2'/>
<target dev='sdb' bus='scsi'/>
</disk>
#加载xml文件 参数 --config 是写入配置文件 --live 是热添加
virsh attach-device c7 temp.xml --config --live
Device attached successfully
#查看虚拟机c7的硬盘信息
virsh domblklist c7
讨论技术可加群:438676220