Vmware-Esxi

如何配置 VMWare 複製映像以獲取唯一 IP 地址?

  • September 30, 2020

我正在使用Teamcity和 VMWare vSphere 配置內部建構系統。配置完成後,建構伺服器應該使用 vSphere API 啟動建構代理虛擬機。我已經到了 TeamCity 建構伺服器啟動我需要的建構代理虛擬機的地步,但是有一個問題。

當建構伺服器檢測到它需要多個代理虛擬機時,它會非常快速地啟動虛擬機,並且在大約 80% 的情況下,這些虛擬機往往會獲得相同的 IP 地址。如果我在呼叫之間稍作停頓,手動開始建構代理,虛擬機將獲得唯一的 IP 地址。

相同的 IP 地址會導致許多網路問題。這是來自具有相同 IP 地址的 2 個建構代理 VM 的螢幕截圖。 虛擬機 IP4 相同

我認為 vSphere 正在使用具有 DHCP 服務的 Cisco Meraki 盒子,但我無權訪問它。我花了幾天時間試圖將這個問題縮小到上面的螢幕截圖,但我不知道從哪裡開始。我認為 DHCP 服務應該可以很好地處理這種情況,但我一定是在某種程度上錯誤地配置了它。

我的建構代理 VM 是 Ubuntu 20.04 LTS,當我製作快照時它沒有預先配置 DHCP。我沒有執行任何腳本來為快照準備圖像,它或多或少是安裝了 docker 的香草 Ubuntu,我們所有的建構都是容器化的。我使用的是複製的虛擬機,而不是模板。

有人可以指出我正確的方向嗎?

不確定這是否理想,但我將描述我為解決此問題所做的工作。這是一個hack,所以請不要使用它,除非所有其他事情都失敗了

啟用netplan,但禁用 IPv4 DHCP。出於某種原因,當我製作同一個複製的多個實例時,一些實例獲得了相同的 IP

sudo 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 配置基本映像。

引用自:https://serverfault.com/questions/1034224