在虛擬機器擴展集中安裝和更新應用程式

已完成

當您在整個擴展集部署應用程式時,您需要一種機制,以一致的方式在擴展集中的所有執行個體上更新您的應用程式。 您可以使用自訂指令碼擴充功能來達到此結果。

在貨運公司案例中,您需要將更新推出到應用程式的快速方法,同時對使用者造成最少干擾。 自訂指令碼延伸模組是理想的解決方案。

在此單元中,您會了解如何使用自訂指令碼擴充功能來更新在擴展集上執行的應用程式。

什麼是 Azure 自訂指令碼擴充功能?

「Azure 自訂指令碼擴充功能」會在 Azure 虛擬機器上下載並執行指令碼。 其可以將擴展集中虛擬機器 (VM) 上的所有工作自動化。

您可以在 Azure 儲存體或 GitHub 中儲存自訂指令碼。 若要新增一個自訂指令碼到 VM,您可以使用 Azure 入口網站。 若要在範本式部署期間執行自訂指令碼,請將自訂指令碼延伸模組與 Azure Resource Manager 範本結合。

使用自訂指令碼延伸模組在整個擴展集上安裝應用程式

若要搭配 Azure CLI 使用自訂指令碼擴充功能,可建立設定檔來定義要取得的檔案和要執行的命令。 此檔案是 JSON 格式。

下列範例顯示自訂指令碼設定,此設定會從 GitHub 中的存放庫下載應用程式,並透過執行名為 custom_application_v1.sh 的指令碼,將其安裝在主控件執行個體上:

# yourConfigV1.json 
{
  "fileUris": ["https://raw.githubusercontent.com/yourrepo/master/custom_application_v1.sh"],
  "commandToExecute": "./custom_application_v1.sh"
}

若要在擴展集上部署此設定,請使用自訂指令碼延伸模組。 下列程式碼顯示如何使用 Azure CLI 為虛擬機器擴展集建立自訂指令碼。 此命令會在整個擴展集的 VM 上安裝新應用程式:

az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name yourScaleSet \
  --settings @yourConfigV1.json

使用自訂指令碼延伸模組更新整個擴展集中的應用程式

您可以使用自訂指令碼擴充功能,在整個虛擬機器擴展集上更新現有應用程式。 您可以參考已更新的部署指令碼,然後將延伸模組重新套用至擴展集。 例如,下列 JSON 程式碼顯示會擷取新版本應用程式並予以安裝的設定:

# yourConfigV2.json
{
  "fileUris": ["https://raw.githubusercontent.com/yourrepo/master/custom_application_v2.sh"],
  "commandToExecute": "./custom_application_v2.sh"
}

您可以使用與先前所顯示命令相同的 az vmss extension set 命令來部署已更新應用程式,差別在於您要參考新的設定檔:

az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group yourResourceGroup \
  --vmss-name yourScaleSet \
  --settings @yourConfigV2.json

會根據擴展集的升級原則來更新 VM。 當您第一次建立擴展集時為此原則。 升級原則可以是下列三種模式的其中一種:

  • 自動: 擴展集不會定義何時升級 VM。 它們可能全部更新,造成服務中斷。
  • 輪替: 擴展集會以批次方式在擴展集中的 VM 之間推出更新。 選擇性的暫停可將服務中斷情況降到最低。 在此模式中,擴展集中的機器可能會短暫時間執行不同版本的應用程式。 此模式需要您將健康情況探查新增到擴展集,或將應用程式健康情況延伸模組套用到擴展集。
  • 手動: 擴展集中的現有 VM 未更新。 必須手動完成所有變更。 此為「預設」模式。

若要在您佈建虛擬機器擴展集時指定升級原則,您可使用 --upgrade-policy-mode 選項。 下列範例程式碼使用 Azure CLI:

az vmss create \
  --resource-group MyResourceGroup \
  --name MyScaleSet \
  --image Ubuntu2204 \
  --upgrade-policy-mode automatic \
  --admin-username azureuser \
  --generate-ssh-keys