如何配置 VMWare 複製映像以獲取唯一 IP 地址?
我正在使用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,我們所有的建構都是容器化的。我使用的是複製的虛擬機,而不是模板。
有人可以指出我正確的方向嗎?
不確定這是否理想,但我將描述我為解決此問題所做的工作。這是一個hack,所以請不要使用它,除非所有其他事情都失敗了
啟用
netplan
,但禁用 IPv4 DHCP。出於某種原因,當我製作同一個複製的多個實例時,一些實例獲得了相同的 IPsudo nano /etc/netplan/00-installer-config.yaml --- network: version: 2 renderer: networkd ethernets: ens160: dhcp4: false ---
添加作業以在啟動時配置 IPv4 地址
sudo crontab -e -- @reboot /usr/bin/bash /boot-config.sh > /boot-config.log --
創建啟動配置文件
sudo touch /boot-config.sh sudo chown root:root /boot-config.sh sudo chmod +x /boot-config.sh
使用某些程序的完整路徑很重要,因為
$PATH
它不包含/usr/sbin
,例如,在啟動時cron
呼叫腳本時sudo nano /boot-config.sh --- #!/bin/bash echo "*********************" echo "Boot config script" echo "*********************" echo "PATH: " $PATH echo "Running via " $SHELL echo "Current working directory " $(pwd) echo "" echo "Releasing IP address for ens160" /usr/sbin/dhclient -v -r ens160 echo "Removing DHCP lease files" rm /var/lib/dhcp/* echo "Generating new machine id" echo "Old id: " $(cat /etc/machine-id) rm /etc/machine-id systemd-machine-id-setup echo "New id: " $(cat /etc/machine-id) echo "Requesting new IP" /usr/sbin/dhclient -v ens160 echo "" echo "Finished" --- # You should be able to see the result in the log file sudo cat /boot-config.log
PS:將此標記為答案,但https://serverfault.com/a/1034226/82856有助於解決問題。
我的建構代理 VM 是 Ubuntu 20.04 LTS,當我製作快照時它沒有預先配置 DHCP。
它應該有。
如果在您拍攝虛擬機快照時 VM 具有靜態 IP 地址,則從該快照創建的所有複製在啟動時都將嘗試使用相同的網路配置。即使您在部署它們時等待,這根本不應該工作。
我認為正在發生的事情是,當 VM 啟動並發現其 IP 地址已被使用時,它會自動切換到 DHCP 以獲取新地址;但是如果您同時啟動其中兩個,它們不會檢測到任何 IP 衝突,而只是嘗試使用它們現有的配置。
在複製它之前,您應該為 DHCP 配置基本映像。