我們正在使用 Packer 為 Azure 規模集構建自定義 centos7 映像。其中一部分包括我們創建的自定義 rpm,它從源代碼構建 git(不能使用社區存盤庫,所以我們自己制作)并將其安裝到 /usr/local/bin 目錄。在正常實踐中,該軟體包運行良好。一切都被適當地安裝到正確的位置,我們可以使用我們的新版本 git。
當我們通過 Packer 運行時,我們通過 ansible 安裝它,然后最后 Packer 執行取消配置步驟,捕獲影像并將其放入一個 azure 共享影像庫,然后我們將其用于我們的 azure 比例集中。
Scale set 使用影像來制作一些實體,我們已經啟動并運行了。問題是,突然間,/usr/local/ 目錄似乎已重置為默認值。/usr/local/bin 中不再有任何內容,此外,我們作為依賴項安裝以構建 git(例如 gcc)的一些(不是全部)包也消失了。我們的 git rpm 仍然被列為已安裝,但 gcc 不是。
/usr/bin/ 看起來不錯(除了缺少的 gcc,雖然我們現在不需要它,但它似乎仍然令人擔憂),所以我們可能可以將它安裝在那里,但我仍然想知道如果發生了一些瘋狂的事情,我將來是否應該注意它,因為 /usr/local/ 似乎是安裝它的合乎邏輯的位置。
特爾;博士:
- packer 獲取基本的 centos7 鏡像
- 添加我們的自定義 git 包
- git 安裝到 /usr/local/bin (它有效!git 可用)
- 使用 waagent 取消配置和廣義
- 打包機捕獲影像并上傳
- azure 比例集使用影像創建新實體
- /usr/local/ 恢復到原始狀態?(因此缺少 git?)
- ???
Packer azure arm 檔案
waagent 取消配置工具檔案
uj5u.com熱心網友回復:
想通了這一點。
事實證明(至少在版本 1.7.2 中)即使使用 --force 標志,Packer 也不一定對與 Shared Image Gallery 版本相關的 azure arm 進行冪等操作。
在我們的 git 包完全運行并正確安裝之前,我們已經創建了 SIG 映像版本,因此它是在沒有修改 /usr/local/bin/ 的基本映像上創建的。
當我們使用 force 標志運行 Packer 構建時,它會洗掉并重新創建基礎鏡像,但它會使用 SIG 鏡像版本的配置資訊運行 PUT 呼叫,也就是說,如果遵循約定,它將“創建或更新” (除非您設定一些打包程式日志記錄變數并將詳細日志輸出到檔案或其他內容,否則您看不到這一點)。
因此,雖然基本映像已更新為已正確設定 git 的映像,但 SIG 版本認為它使用與以前相同的基本映像(名稱相同,沒有唯一識別符號),因此就配置而言沒有改變,也不需要發生任何事情。在我們洗掉舊版本或制作新版本后,它根據我們制作的基本映像正確啟動了一個虛擬機,一切都在它應該在的地方。
我絕對認為 --force應該是一個從頭到尾的冪等操作,我不確定這是否會在未來的版本中得到修復(在撰寫本文時,他們在 1.7.6 上)但也許我檢查完后會更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319022.html
標籤:linux 天蓝色 centos7 azure-vm-scale-set
