我正在使用Teamcity和 VMWare vSphere 配置内部构建系统。配置完成后,构建服务器应该使用 vSphere API 启动构建代理虚拟机。我已经到了 TeamCity 构建服务器启动我需要的构建代理虚拟机的地步,但是有一个问题。
当构建服务器检测到它需要多个代理虚拟机时,它会非常快速地启动虚拟机,并且在大约 80% 的情况下,这些虚拟机往往会获得相同的 IP 地址。如果我在调用之间稍作停顿,手动开始构建代理,虚拟机将获得唯一的 IP 地址。
相同的 IP 地址会导致许多网络问题。这是来自具有相同 IP 地址的 2 个构建代理 VM 的屏幕截图。
我认为 vSphere 正在使用具有 DHCP 服务的 Cisco Meraki 盒子,但我无权访问它。我花了几天时间试图将这个问题缩小到上面的屏幕截图,但我不知道从哪里开始。我认为 DHCP 服务应该可以很好地处理这种情况,但我一定是在某种程度上错误地配置了它。
我的构建代理 VM 是 Ubuntu 20.04 LTS,当我制作快照时它没有预先配置 DHCP。我没有运行任何脚本来为快照准备图像,它或多或少是安装了 docker 的香草 Ubuntu,我们所有的构建都是容器化的。我使用的是克隆的虚拟机,而不是模板。
有人可以指出我正确的方向吗?
它应该有。
如果在您拍摄虚拟机快照时 VM 具有静态 IP 地址,则从该快照创建的所有克隆在启动时都将尝试使用相同的网络配置。即使您在部署它们时等待,这根本不应该工作。
我认为正在发生的事情是,当 VM 启动并发现其 IP 地址已被使用时,它会自动切换到 DHCP 以获取新地址;但是如果您同时启动其中两个,它们不会检测到任何 IP 冲突,而只是尝试使用它们现有的配置。
在克隆它之前,您应该为 DHCP 配置基本映像。
不确定这是否理想,但我将描述我为解决此问题所做的工作。这是一个hack,所以请不要使用它,除非所有其他事情都失败了
启用
netplan
,但禁用 IPv4 DHCP。出于某种原因,当我制作同一个克隆的多个实例时,一些实例获得了相同的 IP添加作业以在启动时配置 IPv4 地址
创建启动配置文件
使用某些程序的完整路径很重要,因为
$PATH
它不包含/usr/sbin
,例如,在启动时cron
调用脚本时PS:将此标记为答案,但https://serverfault.com/a/1034226/82856有助于解决问题。