KVM

  • Post author:
  • Post category:其他


理论基础

例子

grub 的内容

ifcfg-eth0 的内容

vbr.xml 的内容

node.xml 参考/etc/libvirt/qemu/目录下的xml

虚拟化概述:

virtualization资源管理

1 x个物理资源—->y个逻辑资源 (不同的虚拟机可以装不同的系统或者不同的版本)

2 实现的程度:完全、部分、硬件辅助(CPU)

虚拟化主要厂商及产品

VMware VMware Workstation、vSphere

Microsoft VirtualPC、Hyper-V

RedHat KVM、RHEV

Citrix Xen

Oracle Oracle VM virtualBox

安装虚拟化服务器平台

KVM(模块)

linux内核的模块,需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术

QEMU(仿真)

虚拟化的仿真工具,通过ioctl与内核kvm交互完成对硬件的虚拟化支持

Libvirt(管理)

虚拟化管理的接口和工具,提供用户端程序virsh,virt-install,virt-manager,virt-view 与用户交互

必备软件说明

qemu-kvm

提供底层仿真技术

libvirt-daemon

libvirtd守护进程,管理虚拟机

libvirt-client

用户端软件,提供客户端管理命令

libvirt-daemon-driver-qemu

libvirtd连接qemu的驱动

可选功能

virt-install 系统安装工具

virt-manager 图形管理工具

virt-v2v 虚拟机迁移工具

virt-p2v 物理机迁移工具

虚拟化平台的安装

yum -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu

systemctl start libvirtd

虚拟机的组成

内核虚拟化模块(KVM)

系统设备仿真(QEMU)

虚拟机管理程序(LIBVIRT)

虚拟机配置声明文件XML文件 位置:/etc/libvirt/qemu/

虚拟机的硬盘 位置:/var/lib/libvirt/images/

管理KVM平台

virsh命令工具

提供管理各虚拟机的命令接口

支持交互模式,查看/创建/停止/关闭…

格式L:virsh 控制指令 [虚拟机名称] [参数]

查看虚拟化信息

查看KVM节点(服务器)信息 (CPU信息,内存大小)

virsh nodeinfo

列出虚拟机(正在运行的虚拟机,所有的虚拟机)

virsh list [–all]

列出虚拟网络(虚拟网卡,网桥)

virsh net-list [–all]

查看指定虚拟机的信息

virsh dominfo 虚拟机名称

运行|重启|关闭指定的虚拟机

virsh start|reboot|shutdown 虚拟机名称

强制关闭指定的虚拟机

virsh destory 虚拟机名称

将指定的虚拟机设为开机自动运行

virsh autostart [–disable] 虚拟机名称

磁盘镜像文件格式

RAW:KVM不默认,I/O效率高,占用空间大,不支持压缩、后端盘复用、快照(假如给50G给这个格式的磁盘,那么这个格式就是50G的大小)

QCOW2:KVM默认,I/O效率较高,占用空间小,持压缩、后端盘复用、快照(假如给这个格式的磁盘50G,那么磁盘的大小是实际使用的大小,不是50G,但是,实际使用不可超过50G,也相当于,是给这个磁盘的大小做一个限制,而不是规定)

qemu-img

1 虚拟机的磁盘管理命令

2 支持非常多的磁盘格式,如:raw,qcow2,vdi,vmdk 等等

3 命令格式

qemu-img 命令 参数 块文件名称 大小

4 常用的命令有

create 创建一个磁盘

convert 转换磁盘格式

info 查看磁盘信息

snapshot 管理磁盘快照

5 创建新的镜像文件盘

qemu-img create -f 格式 磁盘路径 大小

qemu-img create -f qcow2 disk.img 50G

6 查询镜像文件的信息

qemu-img info 磁盘路径

qemu-img info disk.img

7 使用后端模板文件

qemu-img create -b disk.img -f qcow2 disk1.img

8 前后端模版区别

后端模版文件: 根据真实机创建的模版,是通用的那个模版,用它来创建前端模版

前端模版文件: 根据后端模版创建的,创建新的虚拟机时使用的是它(创建新的虚拟机,要先根据后端模版文件创建新的模版,即前端模版,然后利用前端模版和XML文件来创建新的虚拟机)

COW技术原理 Copy On Write :写时复制 (前后端模版工作原理)

1 直接映射原始盘的数据内容

2 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘

3 对前端盘的修改不回写到原始盘

virsh管理

1 使用virsh连接本地/远程KVM

连接本地

virsh

virsh# connct qemu:///system(默认选项)

连接远程

virsh# connect qemu+ssh://user@ip.xx.xx.xx:port/system

2 虚拟机远程管理

使用virt-manager客户端工具

virt-manager可以通过add connection管理其他机器上的虚拟机,一般通过”remote tunnel over ssh”就可以了

注意: virt-manager需要使用ssh免密码登陆,如果没有免密码登陆,需要单独安装python的ssh相关模块,我们可以使用部署key的方法解决

3创建虚拟交换机(虚拟网络)

libvirtd网络接口

原理:调用dnsmasq提供DNS、DHCP等功能

创建配置文件 /etc/libvirt/qemu/networks/vir.xml

vbr

网络管理

virsh管理虚拟网络

net-list 查看虚拟网络

net-define vbr.xml 创建虚拟网络

net-undefine vbr 删除虚拟网络

net-start vbr 启动虚拟网络

net-destory vbr 停止虚拟网络

net-edit vbr 修改vbr网络的配置

net-autostart vbr 设置vbr虚拟网络开机自动启动

xml管理

1 导出虚拟机

xml配置文件

定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置

默认位于 /etc/libvirt/qemu/虚拟机名.xml

导出xml配置文件

查看:virsh dumpxml 虚拟机名

备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml

2 编辑虚拟机设置

对虚拟机的配置进行调整

编辑:virsh edit 虚拟机名

若修改 name、memory、disk、network,可自动保存为新虚拟机配置

3 导入虚拟机

根据修改后的独立xml文件定义新虚拟机

vivirsh define XML描述文件

4 删除虚拟机

必要时可去除多余的xml配置

比如虚拟机改名的情况

避免出现多个虚拟机的磁盘戒MAC地址冲突

virsh undefine 虚拟机名

自定义虚拟机

自定义虚拟机安装

1 配置网络 yum 源

2 virt-manager安装虚拟机

a1 启劢 virt-manager 软件,选择新建虚拟机

b1 选择网络安装源

c1 qemu-img create -f qcow2 node.qcow2 16G

d1 2G内存 2个CPU 选择或创建自定义存储:/var/libvirt/images/node.qcow2

e1 网络选择自定义的 vbr

f1 软件选择 minimal ,关闭 KDUMP,选择手工分区

g1 手动分区 I will configure partitioning

h1 使用标准分区格式,只分一个根分区 standard Partition

i1 选取一个根分区,开启安装系统

虚拟机模板制作

1 把刚刚安装好的系统刜始化

禁用 selinux /etc/selinux/config

SELINUX=disabled

卸载防火墙不NetworkManager

yum remove -y NetworkManager-* firewalld-* python-firewall

配置 yum 源

yum 源导入公钥验证配置,gpgcheck=1

导入 gpg key,rpm –import

ftp://192.168.1.254/centos7/RPM-GPG-KEY-CentOS-7

常用系统命令安装,yum install -y net-tools vim-enhanced bridge-utils psmisc

2 网卡及配置文件设置

初除网络配置里的个性化信息

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=”eth0”

ONBOOT=”yes“

IPV6INIT=”no”

TYPE=”Ethernet”

BOOTPROTO =”dhcp”

禁用空路由

vim /etc/sysconfig/network

NOZEROCONF=”yes”

3 Console及磁盘分区配置

添加 Console 配置及初除磁盘分区里的个性化信息

vim /etc/default/grub

GRUB_CMDLINE_LINUX=”biosdevname=0 net.ifnames=0

console=ttyS0,115200n8”

GRUB_DISABLE_LINUX_UUID=”true”

GRUB_ENABLE_LINUX_LABEL=”true”

重新生成 grub.cfg

grub2-mkconfig -o /boot/grub2/grub.cfg

/etc/fstab 文件中到 UUID 手工修改成系统设备

blkid 查看 uuid 对应的磁盘设备,修改 fstab 文件

4 去除个性化信息

安装分区扩展软件

yum install -y cloud-utils-growpart

设置第一次开机自动扩容根目录

chmod 755 /etc/rc.local

在 rc.local 里加入如下配置

#

/usr/bin/growpart /dev/vda 1

/usr/sbin/xfs_growfs /

/usr/bin/sed ‘/^###/,$d’ -i /etc/rc.d/rc.local

关闭虚拟机后执行信息清理工作

virt-sysprep -d node

5 虚拟设备管理

XML 配置文件

保存 node 虚拟机配置文件

virsh dumpxml node >demo.xml

清除模板配置

virsh undefine node


centos7.0

8413f30a-c978-4796-a28f-8ba9fe74b759

2097152

2097152

id=4 个性化设置 ,去掉

uuid 去掉

memory unit 虚拟机最大使用内存,可以手劢调整

currentmemory 创建虚拟机使用内存

cpu 设置,可以调整

2

资源设置,可以删除

… …

系统配置及引导设备,不需要修改

电源相关配置无需修改

… …

cpu配置,可以修改成使用真机cpu

————————————————————————

初始化虚拟机

1 修改 /etc/selinux/config

SELINUX=disabled

2 配置网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0

3 停止 firewalld NetworkManager

systemctl stop firewalld

systemctl stop NetworkManager

4 卸载

yum remove -y NetworkManager-* firewalld-* python-firewall

5 重启机器

6 配置 yum 源

[local_repo]

name=CentOS-$releasever – Base

baseurl=”ftp://192.168.1.254/centos7”

enabled=1

gpgcheck=0

7 安装软件

yum provides 命令

yum install 包名

8 验证数字签名

下载 RPM-GPG-KEY-CentOS-7

导入 rpm –import RPM-GPG-KEY-CentOS-7

修改 local.repo gpgcheck=1

使用 yum install lftp lrzsz 验证

9 配置网络,禁用空路由

配置文件 /etc/sysconfig/network

NOZEROCONF=”yes”

网卡配置文件见范例

10 添加串口终端

配置文件 /etc/default/grub

修改内容看范例

修改完成之后创建引导文件

grub2-mkconfig -o /boot/grub2/grub.cfg

11 修改 fstab

blkid

修改 UUID=xxxxxx 为 /dev/xvda1

12 安装分区扩展软件

yum install -y cloud-utils-growpart

扩展磁盘分区空间(让 /dev/vda1 变大)

/usr/bin/growpart /dev/vda 1

扩展文件系统识别空间(让 df -h 可使用空间变大)

/usr/sbin/xfs_growfs /

13 关闭虚拟机,清理信息 (真机)

设置语言为英文 LANG=en_US.UTF-8

virt-sysprep -d 虚拟机名称

14 删除虚拟机定义

virsh undefine centos7.0

15 快速创建虚拟机

例如创建虚拟机 node1

创建磁盘文件

cd /var/lib/libvirt/images

qemu-img create -b node.img -f qcow2 node1.img 32G

创建虚拟机配置文件

sed ‘s/node/node1/’ node.xml >/etc/libvirt/qemu/node1.xml

virsh define /etc/libvirt/qemu/node1.xml

启动虚拟机

virsh start node1

连接查看虚拟机

virsh console node1

—————————————–

添加网卡

添加硬盘

cd /var/lib/libvirt/images/

qemu-img create -f qcow2 disk.img 20G

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/libvirt/images/disk.img'/>
  <target dev='vdb' bus='virtio'/>
</disk>

grub 内容

GRUB_TIMEOUT=5

GRUB_DISTRIBUTOR=”







(


s


e





d
















s


,


r


e


l


e


a


s


e


.













(

s

e

d

s

,

r

e

l

e

a

s

e

.





,,g’ /etc/system-release)”

GRUB_DEFAULT=saved

GRUB_DISABLE_SUBMENU=true

GRUB_TERMINAL=”serial console”

GRUB_SERIAL_COMMAND=”serial –speed=115200”

GRUB_CMDLINE_LINUX=”biosdevname=0 net.ifnames=0 console=ttyS0,115200n8”

GRUB_DISABLE_RECOVERY=”true”

GRUB_DISABLE_LINUX_UUID=”true”

GRUB_ENABLE_LINUX_LABEL=”true”

ifcfg-eth0 的内容

Generated by dracut initrd

DEVICE=”eth0”

ONBOOT=”yes”

NM_CONTROLLED=”no”

TYPE=”Ethernet”

BOOTPROTO=”dhcp”

IPADDR=”192.168.1.50”

PREFIX=”24”

GATEWAY=”192.168.1.254”

vbr.xml 的内容

vbr



版权声明:本文为liao__ran原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。