CLOUD01 - KVM构建及管理 virsh控制工具、镜像管理 虚拟机快建技术

一、KVM简介

1.1 搭建KVM服务器

1.1.1 虚拟化概念

• virtualization 资源管理
– x个物理资源 --> y个逻辑资源
– 实现程度:完全、部分、硬件辅助(CPU)

1.1.2 虚拟化概述

• 虚拟化主要厂商及产品

1.1.3 安装虚拟化服务器平台

1. 虚拟化服务器软件
• qemu-kvm
– 为 kvm 提供底层仿真支持
• libvirt-daemon
– libvirtd 守护进程,管理虚拟机
• libvirt-client
– 用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu
– libvirtd 连接 qemu 的驱动   // libvirtd可以管理各种虚拟化技术

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

yum install -y qemu-kvm \
libvirt-daemon \
libvirt-client \
libvirt-daemon-driver-qemu
systemctl start libvirtd          //启动虚拟机管理服务

1.1.4 虚拟机的组成

• 虚拟机的组成
– 内核虚拟化模块(KVM)
– 系统设备仿真(QEMU)
– 虚拟机管理程序(LIBVIRT)

KVM提供CPU硬件的虚拟化,QEMU提供除CPU以外的辅助硬件虚拟化,LIVIRTD提供管理虚拟机的命令

1.KVM是linux内核的模块,它需要CPU的支持,采用硬
件辅劣虚拟化技术 Intel-VT,AMD-V,内存的相关如
Intel的 EPT 和 AMD 的 RVI 技术
2. QEMU 是一个虚拟化的仿真工具,通过 ioctl  与内核
kvm 交互完成对硬件的虚拟化支持
3. Libvirt 是一个对虚拟化管理的接口和工具,提供用户
端程序 virsh ,virt-install, virt-manager, virt-view 与用户交互

– 一个 XML 文件(虚拟机配置声明文件)  【告诉虚拟机,你有几个网卡,几个cpu,多大的磁盘】
– 位置 /etc/libvirt/qemu/
– 一个磁盘镜像文件(虚拟机的硬盘)        【虚拟机存放数据的地方】
– 位置 /var/lib/libvirt/images/

1.2 管理KVM平台

1.2.1 virsh 命令

1.virsh命令工具介绍

提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
– 格式:virsh 控制指令 [虚拟机名称] [参数]

[root@nova01 ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #

2.查看虚拟化信息

2.1 查看KVM节点(服务器)信息【物理机】
– virsh nodeinfo

2.2 列出虚拟机
– virsh list [--all]

2.3 列出虚拟网络
– virsh net-list [--all]

2.4 查看指定虚拟机的信息
– virsh dominfo 虚拟机名称

3.开关机操作

3.1 运行|重启|关闭指定的虚拟机
– virsh start|reboot|shutdown 虚拟机名称

3.2 强制关闭指定的虚拟机
– virsh destroy 虚拟机名称

3.3 将指定的虚拟机设为开机自劢运行【随着libvirtd启动】
– virsh autostart [--disable] 虚拟机名称

1.2.2 qcow2简介

1.常用镜像盘类型

• 虚拟机的磁盘镜像文件格式

qcow2的IO性能比RAW稍低,但是QCOW2文件格式占用的空间小,支持压缩、快照盘复用

1.2.3 qemu-img 命令

1.qemu-img命令简介

• qemu-img 是虚拟机的磁盘管理命令
• qemu-img 支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等

2.qemu-img 命令格式
– qemu-img 命令 参数 块文件名称 大小

 qemu-img create [-b 后端盘] -f qcow2 块文件名称   [大小]        //这个大小定的是最大能存多大的数据

– 常用的命令有
– create 创建一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– snapshot 管理磁盘快照

3.创建新的镜像盘文件
– qemu-img create -f 格式 磁盘路径 大小
– qemu-img create -f qcow2 disk.img 50G

4.查询镜像盘文件的信息
– qemu-img info 磁盘路径
– qemu-img info disk.img

5.-b 使用后端模板文件【以后端文件拷贝一个镜像文件,化整为零的拷贝】
– qemu-img create -b disk.img -f qcow2 disk1.img

1.2.4 COW技术原理

• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当对前端盘进行数据修改时,如果没有数据,会在修改之前从后端盘复制一份到前端盘
– 对前端盘的修改不回写到原始盘

二、Virsh管理

2.1 virsh虚拟机管理

2.1.1 连接本地/远程KVM

• 使用 virsh 客户端工具
1.连接本地
– virsh
– virsh# connect qemu:///system (默认选项)
2.连接远程
– virsh# connect
qemu+ssh://[email protected]:port/system

2.1.2 虚拟机远程管理

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

2.1.3 创建虚拟交换机

• 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>

2.1.4 网络管理

• 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管理

3.1 导出虚拟机

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

3.2 编辑虚拟机设置

3.2.1 对虚拟机的配置进行调整

– 编辑:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自劢保
存为新虚拟机配置
[root@kvmsvr ~]# virsh edit v1
<name>node</name>
<uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid>

<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/node.img'/>
.. ..
<interface type='network'>
<mac address='52:54:00:91:52:e4'/>
.. ..

3.3 导入虚拟机

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

– virsh define XML描述文件

定义域 CentOS7_node1.xml

~]# virsh define /etc/libvirt/qemu/CentOS7_node1.xml

– 查看域主机
[root@kvmsvr ~]# virsh list --all

3.4 删除虚拟机

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

– 比如虚拟机改名的情况
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[root@kvmsvr ~]# virsh undefine node1       //node1对应的xml配置文件会从/etc/libvirt/qemu目录下删除

四、自定义虚拟机

4.1 自定义虚拟机安装

4.1.1 网络 yum 源的安装配置

1.快速配置网络 yum 源

– 配置ftp
yum install vsftp
– 修改配置文件 /etc/vsftpd/vsftpd.conf
– listen=YES
– listen_ipv6=NO
– systemctl enable vsftpd
– systemctl start vsftpd
– vsftp 默认根目录为 /var/ftp

– 在 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

4.1.2 virt-manager 安装虚拟机

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

2.选择网络安装源

        

3.在/var/lib/libvirt/images目录下创建node.qcow2

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

       

4.网络选择自定义的 vbr,这张网卡的模式是nat模式

5.语言选择英语English (United States)

6.软件选择 minimal 、关闭 KDUMP、选择手工分区

6.手动分区,点击左上角的DONE

7.使用标准分区格式,只分一个根分区

8.点击New CentOS7 Instatllation下面的小加号,选择跟挂载点,选择Add mount point

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

五、虚拟机模板制作

5.1 初始化虚拟机

5.1.1 修改 /etc/selinux/config

  SELINUX=disabled

5.1.2 配置网卡配置文件

~] # vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"  //网卡设备名称
ONBOOT="yes“  //开机自动启动
NM_CONTROLLED="no"   //不让NetWorkManger控制网络服务
TYPE="Ethernet" //网卡类型是Ethernet
BOOTPROTO ="dhcp" //网卡启动协议是dhcp

5.1.3 停止 firewalld NetworkManager

~] # systemctl stop firewalld
~] # systemctl stop NetworkManager

5.1.4 卸载firewalld NetworkManger

~] # yum remove -y NetworkManager-* firewalld-* python-firewall

5.1.5 重启机器/查看eth0的ip

配置正确会重新给接在vbr网桥上的eth0分配ip地址 

[root@centos7temp ~]# ip a ls dev eth0
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ....
    inet 192.168.5.154/24 brd 192.168.5.255 scope global dynamic eth0

5.1.6 配置 yum 源

yum.repos.d]# vim CentOS7.repo

[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.5.254/CentOS7-Base"
enabled=1
gpgcheck=0

5.1.7 安装软件

1.安装必须的软件包

yum provides 命令
yum install 包名

5.1.8 验证数字签名

1. 下载 RPM-GPG-KEY-CentOS-7

[root@room9pc01 CentOS7-Base]# scp RPM-GPG-KEY-CentOS-7 192.168.5.112:/root/

2. 导入 rpm --import RPM-GPG-KEY-CentOS-7

[root@centos7_temp ~]# rpm --import RPM-GPG-KEY-CentOS-7 

3.修改CentOS7.repo 配置文件

[root@centos7_temp ~]# vim /etc/yum.repos.d/CentOS7.repo 

local.repo  gpgcheck=1

4.使用 yum install lftp lrzsz briges-utils 验证,不报错就证明签名文件导入成功

[root@centos7_temp ~]# yum -y install lftp

lftp sftp://192.168.5.254/ -u root   //通过lftp直接下载对方主机文件

5.1.9 配置网络,禁用空路由

1. 修改配置文件 /etc/sysconfig/network
]# vim /etc/sysconfig/network
  NOZEROCONF="yes"

[root@centos7_temp ~]# systemctl restart network
]# ip r s              //查看空路由的命令    -r, -resolve   -s, -stats

5.1.10 添加串口终端

1.配置文件 /etc/default/grub
 GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0
 console=ttyS0,115200n8"
 GRUB_DISABLE_LINUX_UUID="true"
 GRUB_ENABLE_LINUX_LABEL="true"
2.修改完成之后创建grub.cfg引导文件

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

5.1.11 修改 fstab

1. 不同磁盘的UUID不同,需要指定设备路径

[root@centos7_temp ~]# blkid
/dev/vda1: UUID="c4b11f39-6a67-471f-865f-a88a5e589712" TYPE="xfs"

[root@centos7_temp ~]# vim /etc/fstab 

修改 UUID=xxxxxx 为 /dev/vda1

5.1.12 安装分区扩展软件

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

2.安装分区软件
~] # yum install -y cloud-utils-growpart

3.扩展磁盘分区空间(让 /dev/vda1 变大)
~]#/usr/bin/growpart /dev/vda 1  (1代表vda磁盘的第一个分区)

4.扩展文件系统识别空间(让 df -h 可使用空间变大)
~]#/usr/sbin/xfs_growfs /

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

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

2.关闭虚拟机

[root@room9pc01 ~] # virsh destroy CentOS7_TEMP[虚拟机名称]

3.清理虚拟机

[root@room9pc01 ~] # virt-sysprep -d 虚拟机名称

[   0.0] Examining the guest ...
[  38.5] Performing "abrt-data" ...
[  38.5] Performing "backup-files" ...
[  39.9] Performing "bash-history" ...
[  39.9] Performing "blkid-tab" ...
[  39.9] Performing "crash-data" ...
[  39.9] Performing "cron-spool" ...

....

5.1.14 删除虚拟机定义 

1.取消虚拟机定义,会删除CentOS7_TEMP.xml配置文件

~] # virsh undefine CentOS7_TEMP

5.1.15 使用后端盘创建虚拟机

   例如创建虚拟机 node1
1.创建磁盘文件
cd /var/lib/libvirt/images
images]# qemu-img create -b node.img -f qcow2 node1.img 32G

2.创建虚拟机配置文件,定义虚拟机
qemu]#  sed 's/node/CentOS7_node1/' node.xml >/etc/libvirt/qemu/CentOS7_node1.xml
virsh define /etc/libvirt/qemu/node1.xml

3.启动虚拟机
~] # virsh start CentOS7_node1

4.连接查看虚拟机
~] # virsh console CentOS7_node1

六、虚拟设备管理

6.1 xml详解

6.1.1 内存、cpu设置

1.保存 node 虚拟机配置文件
virsh dumpxml node >demo.xml

2.内存设置,以KB为单位

  <name>centos7.0</name>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  – memory unit 虚拟机最大使用内存,可以手动调整
  – currentmemory 创建虚拟机使用内存

3.cpu 设置,可以调整
  <vcpu placement='static'>2</vcpu>

6.1.2 磁盘、网卡设置

1.磁盘配置

<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>    //磁盘类型
      <source file='/var/lib/libvirt/images/node.img'/>  //使用的磁盘镜像
      <target dev='vda' bus='virtio'/> //磁盘名称
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>   //总线地址,再添加一块磁盘这行可以删除
    </disk>
2.网卡设置

<interface type='bridge'>
      <mac address='52:54:00:dd:9d:9b'/>
      <source bridge='vbr'/>                //网卡的名称
      <model type='virtio'/>                 //网卡的类型
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>   //总线地址,再添加一块磁盘这行可以删除

6.2 创建访问虚拟机

6.2.1 快速创建虚拟机

1. xml 文件配置
把我们的 xml 模板文件进行复制
修改名称及磁盘文件

sed 's/node/CentOS7_node1/' node.xml >/etc/libvirt/qemu/CentOS7_node1.xml

2. img 文件创建
以我们刚刚装系统的模板为后端文件创建虚拟机
qemu-img create –b CentOS7_TEMP.img -f qcow2 CentOS7_node1.img

3.完成虚拟机注册及启动虚拟机
– virsh define CentOS7_node1.xml
– virst start CentOS7_node1
– virsh console CentOS7_node1

6.2.2 使用 guestmount 工具

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

2. 基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点

[root@kvmsvr ~]# mkdir /mnt/kdisk
[root@kvmsvr ~]# guestmount -a CentOS7_node1.img -i /mnt/kdisk
[root@kvmsvr ~]# ls /mnt/kdisk

七、OpenStack环境准备 (真机)

7.1 禁用Selinux和firewalld

1.禁用 selinux , 配置文件 /etc/selinux/config

     SELINUX=disabled

2.禁用 firewalld

     systemctl stop firewalld
     systemctl (un)mask firewalld

7.2 yum 源的安装和配置(网络yum源)

1.光盘作为 yum 源 CentOS7-1708.iso (共9591包),把这个镜像挂载到/var/www/html目录下,这样可以让虚拟机访问到磁盘镜像
有 repodata 目录的才可以作为 yum 源

2.自定义 yum 源    [这一步是扩展操作,可以跳过]

创建一个 repodata
createrepo .
更新
createrepo --update .

7.3 dns 服务

1.装bind,bind-chroot软件包~] # yum install bind bind-chroot

2.编辑配置文件 named.conf
  listen-on port 53 { 192.168.5.254; };
  allow-query     { any; };
  forwarders { 8.8.8.8; };   //缓存服务器的的关键配置
 dnssec-enable no;
 dnssec-validation no;

3.重启服务测试
~ ] # nslookup www.baidu.com 192.168.5.254

7.4 时间服务器

1.服务端安装chrony

yum install -y chrony
2.服务端配置[服务端是阿里云时间服务器的客户端,是其他同步时间虚拟机的服务端]

server:配置 /etc/chrony.conf
server ntp1.aliyun.com iburst
bindacqaddress 0.0.0.0
allow 0/0

3.客户端

client:配置 /etc/chrony.conf
server 192.168.5.254 iburst

检查状态
  chronyc sources -v
  * 同步成功,+ 备胎 , ? 同步失败

附:openstack准备环境文档 cloud.txt

猜你喜欢

转载自blog.csdn.net/qq_36441027/article/details/81637589