本发明涉及pve平台下虚拟机处理,具体是一种pve平台下的虚拟机之间动态获取ip地址的方法。
背景技术:
1、proxmox virtual environment也叫proxmox ve,可以简称为pve,其是一个集计算、网络及存储的平台,该平台集成了基于内核的虚拟机管理程序(kvm)和基于linux容器(lxc)这两种虚拟化技术,同时还集成了软件定义存储和虚拟网络功能。借助web的管理界面工具,可以轻松地管理和配置虚拟机、容器、高可用性集群、软件定义存储、虚拟网络以及备份等。pve的主要特性包括去中心化、超融合、高可用、开源低成本、易于实施管理等。基于pve平台的特性,使得pve平台在很多场景下得到应用,例如,基于pve平台使得需要在一台服务器上部署多台虚拟机变得异常方便、稳定且高效,并且可以同时部署linux和windows多套不同系统的虚拟机。
2、但在pve平台上部署了不同系统的虚拟机之间动态获取对方的ip地址是一件非常难的事情,目前并没有针对这种情况的解决方案。在现有技术中,往往是通过预先固定写死ip地址或者手动临时操作命令来配置ip地址,这种解决方案,一旦ip地址有编号,则需要重复之前的操作,无法动态来获取ip地址,非常不灵活,效率低下。为此,希望具有能够动态获取虚拟机之间特别是不同系统的虚拟机之间的ip地址。
技术实现思路
1、针对现有技术的不足,本发明的目的是提供一种pve平台下的虚拟机之间动态获取ip地址的方法,其能够解决背景技术所描述的问题。
2、实现本发明的目的的技术方案为:一种pve平台下的虚拟机之间获取ip地址的方法,包括如下步骤:
3、步骤1:在pve平台上安装至少两台虚拟机,分别记为第一虚拟机和第二虚拟机,第一虚拟机和第二虚拟机的操作系统相异,
4、在pve平台上启用分别与第一虚拟机和第二虚拟机通讯连接的qga,在第一虚拟机和第二虚拟机上也各自安装qga;
5、步骤2:通过shell脚本上运行预设指令,获取包括虚拟机id的第一虚拟机的网卡信息;
6、步骤3:通过shell脚本上运行预设指令获取第二虚拟机的虚拟机id,并且通过第一虚拟机的虚拟机id和第二虚拟机的虚拟机id建立两个虚拟机通讯连接,将包括第一虚拟机的虚拟机id的网卡信息写入到第二虚拟机的指定文件,
7、遍历指定文件,找到满足prefix=24并且 ip_address_type=ipv4的地址为第一虚拟机的ip地址;
8、步骤4:每间隔预设时间重复执行步骤2和步骤3,从而使得第二虚拟机动态地获得第一虚拟机ip地址。
9、进一步地,第一虚拟机为采用window系统,其作为ip广播系统,第二虚拟机采用debian9.9系统,其作为云控系统。
10、进一步地,在步骤1中,还包括在pve平台上将网卡模式设置为半虚拟化。
11、进一步地,在步骤1中,对于ip广播系统的第一虚拟机直接下载qga的软件,对于云控系统的第二虚拟机,通过执行命令apt-get install qemu-guest-agent来安装qga。
12、进一步地,在步骤2中和步骤3中,所述shell脚本安装在pve平台上。
13、进一步地,在步骤2中,获得第一虚拟机的虚拟机id的具体实现,包括以下步骤:
14、先执行命令ipvmid=`qm list|grep 'ipbroadcast'|awk '{print $1}'`,其中,ipbroadcast是第一虚拟机的名称,然后再执行以下命令a:qm agent $ipbroadcastnetwork-get-interfaces |tr -s "-" "_" |jq '.[0].ip_addresses'>/usr/src/dip.txt,从而获得第一虚拟机的网络配置信息的json表达式,执行前述命令a后,将第一虚拟机的网卡信息的配置信息以json的格式写入/usr/src/dip.txt 文件中,
15、其中,网卡信息的json表达式先做了字符替换,字符替换包括-替换为_,最后用jq命令来做内容解析,取第一个数组中的所有网卡配置信息。
16、进一步地,在步骤3中,将包括第一虚拟机的虚拟机id的网卡信息写入到第二虚拟机的指定文件的具体实现,包括以下步骤:
17、先运行命令ykvmid=`qm list|grep 'yunkong'|awk '{print $1}'`,其中,yunkong是第二虚拟机的名称,然后再依次执行命令1和命令2,以将步骤2中获取到的包括第一虚拟机的虚拟机id的网卡信息json表达式写入到第二虚拟机的指定文件中,其中,命令1为ipstr=`cat /usr/src/dip.txt,命令2为pvesh create /nodes/pve/qemu/$ykvmid/agent/file-write --content $ipstr --file /home/webserver/yk_dockerfiles/dip.txt,
18、其中,依次执行命令1和命令2的结果存放到指定文件中,指定文件的存储路径是/home/webserver/yk_dockerfiles,dip.txt是所述存储路径下的指定文件,指定文件的内容也是json格式。
19、本发明的有益效果为:本发明只需要在pve平台上设置好qga(包括设置两个虚拟机的名称、网卡模式)以及在虚拟机上安装qga即可,部署简单,只需要shell脚本即可自动动态地获得目标虚拟机的ip地址,免除了手动配置麻烦,效率更高效。
1.一种pve平台下的虚拟机之间获取ip地址的方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的pve平台下的虚拟机之间获取ip地址的方法,其特征在于,第一虚拟机为采用window系统,其作为ip广播系统,第二虚拟机采用debian9.9系统,其作为云控系统。
3.根据权利要求1所述的pve平台下的虚拟机之间获取ip地址的方法,其特征在于,在步骤1中,还包括在pve平台上将网卡模式设置为半虚拟化。
4.根据权利要求1所述的pve平台下的虚拟机之间获取ip地址的方法,其特征在于,在步骤1中,对于ip广播系统的第一虚拟机直接下载qga的软件,对于云控系统的第二虚拟机,通过执行命令apt-get install qemu-guest-agent来安装qga。
5.根据权利要求1所述的pve平台下的虚拟机之间获取ip地址的方法,其特征在于,在步骤2中和步骤3中,所述shell脚本安装在pve平台上。
6.根据权利要求1或5所述的pve平台下的虚拟机之间获取ip地址的方法,其特征在于,在步骤2中,获得第一虚拟机的虚拟机id的具体实现,包括以下步骤:
7.根据权利要求6所述的pve平台下的虚拟机之间获取ip地址的方法,其特征在于,在步骤3中,将包括第一虚拟机的虚拟机id的网卡信息写入到第二虚拟机的指定文件的具体实现,包括以下步骤: