KVM和制作镜像以简单的虚拟化操作命令


真机上修改(制作镜像和KVM)

1 .安装虚拟软件包
[root@localhost ~]# yum -y install qemu-kvm \
> libvirt-daemon \
> libvirt-client \
> libvirt-daemon-driver-qemu \
> virt-install \
> virt-manager \
> virt-v2v \
> virt-p2v

2.禁用防火墙
[root@localhost ~]# vim /etc/selinux/config    #禁用防火墙
SELINUX=disabled
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl unmask firewalld

3.yum 源的安装和配置(网络yum源)
  光盘作为 yum 源 CentOS7-1708.iso (共9591包)
    有 repodata 目录的才可以作为 yum 源
  自定义 yum 源
    创建一个 repodata
    createrepo .
    更新
    createrepo --update .

4. dns 服务
[root@localhost ~]# yum -y install bind bind-chroot
[root@localhost ~]# vim /etc/named.conf
  listen-on port 53 { 192.168.1.254; };
  allow-query     { any; };
  forwarders { 202.106.196.115; };
  dnssec-enable no;
  dnssec-validation no;


5 时间服务器
  yum install -y chrony
  server:配置 /etc/chrony.conf    #真机上修改
  server ntp1.aliyun.com iburst
  bindacqaddress 0.0.0.0
  allow 0/0
 
  client:配置 /etc/chrony.conf    #虚拟机
  server 192.168.1.254 iburst
 
  检查状态
  chronyc sources -v


6 创建虚拟交换机
创建配置文件 /etc/libvirt/qemu/networks/vbr.xml
<network>
 <name>vbr</name>
 <bridge name="vbr"/>
 <forward mode="nat"/>
 <ip address="192.168.122.254" netmask="255.255.255.0">
  <dhcp>
   <range start="192.168.122.100" end="192.168.122.200"/>
  </dhcp>
 </ip>
</network>

virsh net-define vbr.xml
virsh net-autostart vbr
virsh net-start vbr

7 在虚拟机管理器上安装虚拟机
[root@localhost ~]# yum -y install vsftpd
[root@localhost ftp]# du -sh centos/    #把ISO镜像挂载,然后放在/var/ftp/下
8.2G    centos/
虚拟机管理器:
文件>网络安装FTP,HTTP,NFS>URL:ftp://176.121.207.149/centos>RAM:2048 CPU:2>9GiB,选择或创建自定义存储/var/lib/libvirt/images/node.qcow2>名称:centos>选择网络:虚拟网络'vbr':NAT
最小化安装,手动分区:自己配置分区>标准分区,分区位置为/

 

初始化虚拟机(在虚拟机里面操作)
1 修改 /etc/selinux/config
  SELINUX=disabled

2 配置网卡配置文件
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes“
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO ="dhcp"

3 禁用空路由
[root@localhost ~]# vi /etc/sysconfig/network
NOZEROCONF="yes"

4 停止 firewalld NetworkManager
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl stop NetworkManager

5 卸载
  yum remove -y NetworkManager-* firewalld-* python-firewall

6 重启机器

7 配置 yum 源(yum源IP为真机的一个IP,把真的yum源做虚拟机的yum源)
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# rm -rf *
[root@localhost yum.repos.d]# vi local.repo
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.122.1/centos7"
enabled=1
gpgcheck=0


8 安装软件(可装必要的软件包,比如tab)
yum provides 命令
yum install 包名

9 验证数字签名(没有设置)
下载 RPM-GPG-KEY-CentOS-7
导入 rpm --import RPM-GPG-KEY-CentOS-7
修改 local.repo  gpgcheck=1
使用 yum install lftp lrzsz 验证

10 添加串口终端
[root@localhost ~]# vi /etc/default/grub
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0
console=ttyS0,115200n8"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
 修改完成之后创建引导文件

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

11 修改 fstab(将UUID与磁盘相对应,然后再将UUID改为磁盘名字)
   blkid(可以查看磁盘的UUID)
   修改 UUID=xxxxxx 为 /dev/sda1

12 安装分区扩展软件
[root@localhost ~]# yum -y install cloud-utils-growpart
 扩展磁盘分区空间(让 /dev/sda1 变大)
[root@localhost ~]#    /usr/bin/growpart /dev/sda 1
   扩展文件系统识别空间(让 df -h 可使用空间变大)
[root@localhost ~]#    /usr/sbin/xfs_growfs /

13 关闭虚拟机,清理信息 (真机)
   设置语言为英文 LANG=en_US.UTF-8
   virt-sysprep -d 虚拟机名称
[root@localhost ~]# LANG=en_US.UTF-8
[root@localhost ~]#  virt-sysprep -d centos

14 删除虚拟机定义(真机)
[root@localhost ~]#  virsh undefine centos

15 快速创建虚拟机(真机)
   例如创建虚拟机 node1
   创建磁盘文件
   cd /var/lib/libvirt/images
   qemu-img create -b node.img -f qcow2 node1.img 32G
   创建虚拟机配置文件 (将node.xml文件放在此文件夹内,node.xml内容见下!)
   sed 's/node/node1/' node.xml >/etc/libvirt/qemu/node1.xml
   virsh define /etc/libvirt/qemu/node1.xml
[root@localhost images]# find / -name node1.xml
/etc/libvirt/qemu/node1.xml
   启动虚拟机
   virsh start node1
   连接查看虚拟机
   virsh console node1

16 附加  virsh edit 虚拟机名
添加网卡
    <interface type='bridge'>
      <source bridge='private1'/>
      <model type='virtio'/>
    </interface>

添加硬盘
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>

node.xml内容
<domain type='kvm'>
  <name>node</name>
  <memory unit='KB'>2097152</memory>
  <currentMemory unit='KB'>2097152</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc'>hvm</type>
    <boot dev='hd'/>
    <bootmenu enable='yes'/>
    <bios useserial='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough'>
  </cpu>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/node.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <source bridge='vbr'/>
      <model type='virtio'/>
    </interface>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
    <serial type='pty'></serial>
    <console type='pty'>
      <target type='serial'/>
    </console>
    <memballoon model='virtio'></memballoon>
  </devices>
</domain>

 

 


[root@localhost images]# vim /etc/libvirt/qemu/networks/vbr.xml
[root@localhost images]# virsh net-start
error: command 'net-start' requires <network> option
[root@localhost images]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml

 

 


• 必备软件
• qemu-kvm
– 为 kvm 提供底层仿真支持
• libvirt-daemon
– libvirtd 守护进程,管理虚拟机
• libvirt-client
– 用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu
– libvirtd 连接 qemu 的驱劢

• 可选功能
– virt-install
# 系统安装工具
– virt-manager # 图形管理工具
– virt-v2v # 虚拟机迁移工具
– virt-p2v # 物理机迁移工具

虚拟机的组成
• 虚拟机的组成
– 内核虚拟化模块(KVM)
– 系统设备仿真(QEMU)
– 虚拟机管理程序(LIBVIRT)
– 一个 XML 文件(虚拟机配置声明文件)
– 位置 /etc/libvirt/qemu/
– 一个磁盘镜像文件(虚拟机的硬盘)
– 位置 /var/lib/libvirt/images/

查看虚拟化信息
• 查看KVM节点(服务器)信息
– virsh nodeinfo
• 列出虚拟机
– virsh list [--all]
• 列出虚拟网络
– virsh net-list [--all]
• 查看挃定虚拟机的信息
– virsh dominfo 虚拟机名称

开关机操作
• 运行|重启|关闭挃定的虚拟机
– virsh start|reboot|shutdown 虚拟机名称
• 强制关闭挃定的虚拟机
– virsh destroy 虚拟机名称
• 将挃定的虚拟机设为开机自劢运行
– virsh autostart [--disable] 虚拟机名称

qemu-img
• qemu-img 是虚拟机的磁盘管理命令
• qemu-img 支持非常多的磁盘格式,例如 raw、
qcow2、vdi、vmdk 等等
• qemu-img 命令格式
– qemu-img 命令 参数 块文件名称 大小
– 常用的命令有
– create 创建一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– snapshot 管理磁盘快照

• 创建新的镜像盘文件
– qemu-img create -f 格式 磁盘路径 大小
– qemu-img create -f qcow2 disk.img 50G
• 查询镜像盘文件的信息
– qemu-img info 磁盘路径
– qemu-img info disk.img
• -b 使用后端模板文件
– qemu-img create -b disk.img -f qcow2 disk1.img

连接本地/远程KVM
• 使用 virsh 客户端工具
– 连接本地
– virsh
– virsh# connect qemu:///system (默认选项)
– 连接远程
– virsh# connect
qemu+ssh://user@ip.xx.xx.xx:port/system

虚拟机远程管理
• 使用 virt-manager 客户端工具
– virt-manager 也可以通过 add connection 管理其它
机器上的虚拟机,一般通过"remote tunnel over ssh"
就可以了
– 需要注意的是 virt-manager 需要使用 ssh 免密码登录
如果没有免密码登录需要单独安装 python 的 ssh 相
关模块,这里我们可以使用部署 key 的方法解决

创建虚拟交换机
• libvirtd 网络接口
– 原理:调用 dnsmasq 提供DNS、DHCP等功能
– 创建配置文件 /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name>
<bridge name="vbr"/>
<forward mode="nat"/>
<ip address="192.168.1.254" netmask="255.255.255.0">
<dhcp>
<range start="192.168.1.100" end="192.168.1.200"/>
</dhcp>
</ip>
</network>

网络管理
• virsh 管理虚拟网络
– net-list 查看虚拟网络
– net-define vbr.xml 创建虚拟网络
– net-undefine vbr 初除虚拟网络
– net-start vbr 启劢虚拟网络
– net-destroy vbr 停止虚拟网络
– net-edit vbr 修改 vbr 网络的配置
– net-autostart vbr 设置 vbr 虚拟网络开机自启劢

导出虚拟机
• xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、
网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
• 导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml

编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自劢保
存为新虚拟机配置
[root@kvmsvr ~]# virsh edit rhel-207
<domain type='kvm'>
<name>rhel-207</name>
<uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid>
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/rhel7.2.qcow2'/>
.. ..
<interface type='network'>
<mac address='52:54:00:91:52:e4'/>

导入虚拟机
• 根据修改后的独立xml文件定义新虚拟机
– virsh define XML描述文件
[root@kvmsvr ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)
[root@kvmsvr ~]# virsh list --all
Id 名称
状态
----------------------------------------------------
- rhel-207
关闭
- rhel7.2
关闭

删除虚拟机
• 必要时可去除多余的xml配置
– 比如虚拟机改名的情冴
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[root@kvmsvr ~]# virsh undefine rhel7.2
域 rhel7.2 已经被取消定义

 

 

自定义虚拟机安装

 


网络yum源的安装和配置
• 快速配置网络 yum 源
– 配置ftp
yum install vsftp
– 修改配置文件 /etc/vsftpd/vsftpd.conf
– listen=YES
– listen_ipv6=NO
– systemctl enable vsftpd
– systemctl start vsftpd
– vsftp 默认根目录为 /var/ftp

• 快速配置网络 yum 源
– 在 ftp 跟目录创建文件夹 centos7
– 把 CentOS7 的光盘挂载到刚刚创建的目录上
mount –t iso9660 –o loop,ro /xx/xx.iso /var/ftp/centos7
– 在客户机里面配置 /etc/yum.repos.d/xxx.repo
[Centos_repo]
name= CentOS packet
baseurl=ftp://xx.xx.xx.xx/centos7
enabled=1
gpgcheck=0
– yum repolist

软件包安装及yum配置
• 把刚刚安装好的系统刜始化
– 1、禁用 selinux /etc/selinux/config
SELINUX=disabled
– 2、卸载防火墙不NetworkManager
yum remove -y NetworkManager-* firewalld-* python-
firewall
– 3、配置 yum 源
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos7"
enabled=1
gpgcheck=0

– 安装软件
yum install -y lftp
– 1、yum 源导入公钥验证配置
gpgcheck=1
– 2、导入 gpg key
rpm --import ftp://192.168.1.254/centos7/RPM-GPG-KEY-
CentOS-7
– 3、常用系统命令安装
yum install -y net-tools vim-enhanced bridge-utils psmisc

网卡及配置文件设置
• 初除网络配置里的个性化信息
– /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes“
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO ="dhcp"
– 禁用空路由
– /etc/sysconfig/network
NOZEROCONF="yes"

Console及磁盘分区配置
• 添加 Console 配置及初除磁盘分区里的个性化信息
– /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 文件

去除个性化信息
• 安装分区扩展软件
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

XML详解
• XML 配置文件
– 保存 node 虚拟机配置文件
virsh dumpxml node >demo.xml
– 清除模板配置
virsh undefine node
– xml 模板
– <!-- 是注释的开始

--> 是注释的结尾
– xml 标签必须成对出现
– <keyword> ... ... </keyword>

• XML 配置文件
<domain type='kvm' id='4'>
<name>centos7.0</name>
<uuid>8413f30a-c978-4796-a28f-8ba9fe74b759</uuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
– id=4 个性化设置 ,去掉
– uuid 去掉
– memory unit 虚拟机最大使用内存,可以手劢调整
– currentmemory 创建虚拟机使用内存

• XML 配置文件
– cpu 设置,可以调整
<vcpu placement='static'>2</vcpu>
– 资源设置,可以初除
<resource> ... ... </resource>
– 系统配置及引导设备,丌需要修改
<os>
<boot dev='hd'/>
</os>
– 电源相关配置无需修改
<features> ... ... </features>

• XML 配置文件
– cpu配置,可以修改成使用真机cpu
<cpu ... ... />
<cpu mode='host-passthrough'></cpu>
– 时钟相关配置,可以初除
<clock ... ... </clock>
– 重启,关机,强制关闭对应命令
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>

• XML 配置文件
– 内存及硬盘休眠相关设置,可以初除
<pm> ... ... </pm>
– 仿真设备相关配置
<devices> ... ... </devices>
– 其他配置
– 驱劢安全标签,可初除
<seclabel> ... ... </seclabel>

• 仿真设备配置
– 总线地址,别名配置,都可以初除
<address ....
<alias ...
– 硬盘配置,需要修改
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk ... ... </disk>
– usb 相关设备配置,可以初除
<controller type='usb'

• 仿真设备配置
– type='pci' pci总线设备,可初除
– type='virtio-serial' 串口设备需要保留串口终端
– type='network' 网络配置需要修改
– type='pty' 串口终端,需要保留
– type='unix' 虚拟机通讯控制接口
– type='spicevmc' 图形图像相关配置可以初除
– type='tablet' 数位板,可以初除

• 仿真设备配置
– type='mouse' 鼠标,保留
– type='keyboard' 键盘保留
– graphics、video 图形图像显卡相关配置,可以初除
– sound 声卡相关配置,可以初除
– redirdev 设备重定向,可以初除
– memballoon 内存气泡,可以劢态调整内存

快速创建虚拟机
• 如何快速创建虚拟机
– 1、 xml 文件配置
– 把我们的 xml 模板文件进行复制
– 修改名称及磁盘文件
– 2 img 文件创建
– 以我们刚刚装系统的模板为后端文件创建虚拟机
qemu-img create –b node.qcow2 –f qcow2 node1.img

快速创建虚拟机
• 如何快速创建虚拟机
– 完成虚拟机注册及启劢虚拟机
– virsh define node1.xml
– virst start node1
– virsh console node

配置虚拟机系统有奇招
• 使用 guestmount 工具
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 可以在虚拟机关机的情冴下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
!!! 需要注意 SELinux 机制的影响

如何挂载虚拟盘
• 基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点
[root@kvmsvr ~]# mkdir /mnt/kdisk
[root@kvmsvr ~]# guestmount -a node1.qcow2 -i /mnt/kdisk
[root@kvmsvr ~]# ls /mnt/kdisk
bin
home media opt
sbin
tmp
boot
lib
misc
proc
selinux usr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值