云原生—虚拟化中间适配层libvirt(二)

目录

libvirt简介

管理工具

管理能力

三个基本概念

五个管理功能

libvirt安装

libvirt配置文件

配置文件详解

libvirtd的使用


libvirt简介

属于CS架构中间适配层管理软件,本身拥有客户机的管理能力,还能提供统一、稳定的API接口,方便其它管理工具使用。

管理工具

一些常用的虚拟机管理工具(如virsh、.virt-install、virt-manager等)和云计算框架平台(如OpenStack、ZStack等)都在底层使用libvirt的应用程序接口。

管理能力

  1. libvirt是为了更方便地管理平台虚拟化技术而设计的开放源代码的应用程序接口、守护进程和管理工具,它不仅提供了对虚拟化客户机的管理,也提供了对虚拟化网络和存储的管理。
  2. libvirt支持多种虚拟化方案,既支持包括KVM、QEMU、Xen、VMware、VirtualBox、Hyper-V等在内的平台虚拟化方案,也支持OpenVZ、LXC等容器系统。
  3. libvirt本身提供了一套较为稳定的C语言应用程序接口,目前,在其它一些流行的编程语言中也提供了对libvirt的绑定,在Python、.Perl、Java、Ruby、PHP、OCaml等。
  4. 高级编程语言中已经有libvirt的程序库可以直接使用。libvirt还提供了为基于AMQP(高级消息队列协议)的消息系统(如Apache Qpid)提供QMF代理,这可以让云计算管理系统中宿主机与客户机、客户机与客户机之间的消息通信变得更易于实现。
  5. libvirt还为安全地远程管理虚拟客户机提供了加密和认证等安全措施。正是由于libvirt拥有这些强大的功能和较为稳定的应用程序接口,而且它的许可证(license)也比较宽松,所以libvirt的应用程序接口已被广泛地用在基于虚拟化和云计算的解决方案中,主要作为连接底层Hypervisor和上层应用程序的一个中间适配层。
  6. libvirt对多种不同的Hypervisor的支持是通过一种基于驱动程序的架构来实现的。libvirt对不同的Hypervisor提供了不同的驱动:对Xen有Xen的驱动,对QEMU/KVM有QEMU驱动,对VMware有VMware驱动。在libvirt源代码中,可以很容易找到qemu_driver.c、xen_driver.c、xenapi_driver.c、VMware_driver.c、vbox_driver.c这样的驱动程序源代码文件。

三个基本概念

  1. 节点(Node)是一个物理机器,上面可能运行着多个虚拟客户机。Hypervisor和Domaini都运行在节点上。
  2. Hypervisort也称虚拟机监控器(VMM),如KVM、Xen、VMware、Hyper-V等,是虚拟化中的一个底层软件层,它可以虚拟化一个节点让其运行多个虚拟客户机(不同客户机可能不同的配置和操作系统)。
  3. 域(Domain)是在Hypervisor.上运行的一个客户机操作系统实例。域也被称为实例(instance,如在亚马逊的AWS云计算服务中客户机就被称为实例)、客户机操作系统(guest OS)、虚拟机(virtual machine),它们都是指同一个概念。

五个管理功能

  1. 域的管理:包括对节点上的域的各个生命周期的管理,如启动、停止、暂停、保存、恢复和动态迁移。还包括对多种设备类型的热插拔操作,包括磁盘、网卡、内存和CPU。当然不同的Hypervisor_上对这些热插拔的支持程度有所不同。
  2. 远程节点的管理。只要物理节点上运行了libvirtd这个守护进程,远程的管理程序就可以连接到该节点进程管理操作,经过认证和授权之后,所有的libvirt功能都可以被访问和使用。libvirt支持多种网络远程传输类型,如SSH、TCP套接字、Unix domainsocket、TLS的加密传输等。假设使用了最简单的SSH,不需要额外的配置工作,比如,在example.com节点上运行了libvirtd,而且允许SSH访问,在远程的某台管理机器上就可以用如下的命令行来连接到example.com上,从而管理其上的域。
    virsh -c qemu+ssh://root@example.com/system
  3. 存储的管理:任何运行了libvirtd守护进程的主机,都可以通过libvirt来管理不同类型的存储,如创建不同格式的客户机镜像(qcow2、raw、qde、vmdk等)、挂载NFS共享存储系统、查看现有的LVM卷组、创建新的LVM卷组和逻辑卷、对磁盘设备分区、挂载iSCSl共享存储、使用Ceph系统支持的RBD远程存储等等。当然在libvirt中,对存储的管理也是支持远程的。
  4. 网络的管理:任何运行了libvirtd守护进程的主机,都可以通过ibvirt来管理物理的和逻辑的网络接口。包括列出现有的网络接口卡,配置网络接口,创建虚拟网络接口,网络接口的桥接,VLAN管理,NAT网络设置,为客户机分配虚拟网络接口等等。
  5. API接口:提供一个稳定、可靠、高效的应用程序API接口,以便可以完成前面的4个管理功能。

libvirt安装

很多流行的Linux发行版(如RHEL7.x、CentOS7.x、Fedora24、Ubuntu16.04等)都提供了libvirt相关的软件包,按照安装普通软件包的方式安装libvirt相关的软件包即可。在笔者当前使用的RHEL7.3中可以使用yum或rpm工具来安装对应的RPM包。查看某系统中已经安装的libvirt相关的RPM包,命令行如下:

[root@kvm-host ]rpm -qa grep libvirt

1 ibvirt-2.0.0-4.e17.x8664

libvirt-client-2.0.0-4.el7.x86 64

libvirt-python-2.0.0-2.el7.x86 64

libvirt-daemon-2.0.0-4.el7.x86_64

libvirt-daemon-driver-qemu-2.0.0-4.el7.x86_64

libvirt-daemon-kvm-2.0.0-4.el7.x86_64

libvirt-daemon-config-network-2.0.0-4.el7.x86_64

#省略其余libvirt相关的软件包;安装时直接运行yum install libvirt即可

当然,RHEL7.3默认采用QEMU/KVM的虚拟化方案,所以应该安装QEMU相关的软件包。查看这些软件包的命令行操作如下:

[root@kvm-host]#rpm -ga grep 'qemu'

qemu-kvm-common-1.5.3-121.el7.x86 64

qemu-img-1.5.3-121.e17.x8664

qemu-kvm-1.5.3-121.e17.x8664

#安装时,运行命令yum install qemu-kvm即可

libvirt配置文件

以RHEL7.3为例,libvirt相关的配置文件都在/etc/libvirt/.目录之中,如下:

[root@kvm-host libvirt]#cd /etc/libvirt/

[root@kvm-host libvirt]#ls

libvirt.conf libvirtd.conf 1xc.conf qemu.conf qemu-lockd.conf nwfilter qemu

配置文件详解

下面简单介绍其中几个重要的配置文件和目录。

1、/etc/libvirt/libvirt.conf

libvirt..conf文件用于配置一些常用libvirti连接(通常是远程连接)的别名。

2、/etc/libvirt/libvirtd.conf

libvirtd.conf是libvirt的守护进程libvirtd的配置文件,被修改后需要让libvirtd重新加载配置文件(或重启libvirtd)才会生效。在Elibvirtd.conf文件中,用井号(#)开头的行是注释内容,真正有用的配置在文件的每一行中使用“配置项=值”(如tcp_port="16509")这样配对的格式来设置。在:libvirtd.conf中配置了libvirtd启动时的许多设置,包括是否建立TCP、UNIX domain socket等连接方式及其最大连接数,以及这些连接的认证机制,设置libvirtd的日志级别等。

例如,下面的几个配置项表示关闭TLS安全认证的连接(默认值是打开的),打开TCP连接(默认是关闭TCP连接的),设置TCP监听的端口,TCP连接不使用认证授权方式,设置JNIX domain socket的保存目录等。

listen_tls 0

listen_tcp =1

tcp_port="16666”

unix sock dir "/var/run/libvirt"

auth_tcp "none"

注意

要让TCP、TLS等连接生效,需要在启动ibvirtd时加上-listen参数(简写为-l)。而默认的systemctl start libvirtdi命令在启动libvirtd服务时并没带--listen参数。所以如果要使用TCP等连接方式,可以使用ibvirtd.--listen-d命令来启动]ibvirtd。

以上配置选项实现将UNIX socketj放到/var/run/libvirt目录下,启动ibvirtd并检验配置是否生效。命令行操作如下:

[root@kvm-host]#libvirtd --listen -d

[root@kvm-host ]1s /var/run/libvirt/libvirt-sock*

/var/run/libvirt/libvirt-sock /var/run/libvirt/libvirt-sock-ro

3、/etc/libvirt/qemu.conf

qemu.conf是libvirt对QEMU的驱动的配置文件,包括VNC、SPICE等,以及连接它们时采用的权限认证方式的配置,也包括内存大页、SELinux、Cgroups等相关配置。

4、/etc/libvirt/qemu/*.xml

在qemu目录下存放的是使用QEMU驱动的域的配置文件。查看qemu目录如下:

[root@kvm-host ]ls /etc/libvirt/qemu/

networks centos7u2-1.xml centos7u2-2.xml

其中包括了两个域的XML配置文件(centos?7u2-1.xml和centos7u2-2.xml),这就是笔者用virt-manager_工具创建的两个域,默认会将其配置文件保存到/etc/libvirt/qemu/目录下。而其中的networks目录保存了创建一个域时默认使用的网络配置。在使用libvirt对虚拟化系统进行管理时,很多地方都是以XML文件作为配置文件的,包括客户机(域)的配置、宿主机网络接口配置、网络过滤、各个客户机的磁盘存储配置、磁盘加密、宿主机和客户机的CPU特性等等。libvirtd在启动或重启完成时,只要客户机的XML配置文件是存在的,libvirtd会自动加载这些客户的配置,获取它们的信息。当然,如果客户机没有基于libvirt格式的XML文件来运行(例如直接使用qemu命令行来启动的客户机),libvirtd则不能自动发现它。

查询qemu命令行参数的操作如下:

[root@kvm-host ~]# ps -ef | grep qemu-kvm | grep centos7u2-1

详细配置参考libvirt 官方xml链接:https://libvirt.org/formatdomain.html

libvirtd的使用

libvirtd是一个作为libvirt)虚拟化管理系统中的服务器端的守护程序,要让某个节点能够利用libvirti进行管理(无论是本地还是远程管理),都需要在这个节点上运行libvirtd这个守护进程,以便让其它上层管理工具可以连接到该节点,libvirtd负责执行其它管理工具发送给它的虚拟化管理操作指令。而ilibvirt的客户端工具(包括virsh、virt-manager等)可以连接到本地或远程的libvirtd进程,以便管理节点上的客户机(启动、关闭、重启、迁移等)、收集节点上的宿主机和客户机的配置和资源使用状态。

在RHEL7.3中,libvirtd是作为一个服务(service)配置在系统中的,所以可以通过systemctl命令来对其进行操作(RHEL6.x等系统中使用service命令)。常用的操作方式有:

“systemctl start libvirtd"命令表示启动libvirtd,

“systemctl restartlibvirtd"表示重启libvirtd,

“systemctl reload libvirtd"表示不重启服务但重新加载配置文件(即/etc/libvirt/libvirtd.conf配置文件),

“systemctl status libvirtd"表示查询libvirtd服务的运行状态。

在默认情况下,libvirtd在监听一个本地的Jnix domain socket,.而没有监听基于网络的TCP/IP socket,需要使用“-或--listen”的命令行参数来开启对libvirtd.conf配置文件中TCP/IP socket的配置。另外,libvirtd守护进程的启动或停止,并不会直接影响正在运行中的客户机。

上一篇:云原生—虚拟化基本概念(一)​​​​​​

下一篇:云原生—虚拟化管理工具virsh(三)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值