透過 Azure CLI 建立使用代理程式型錯誤的混沌實驗
您可以使用混沌實驗在受控環境中引發失敗,以驗證應用程式是否能夠從失敗中復原。 在本文中,您將透過使用混沌實驗和 Azure Chaos Studio,在 Linux 虛擬機器 (VM) 上引發高 CPU 使用率百分比事件。 執行此實驗可協助您防範應用程式發生資源不足。
您可以使用這些相同的步驟來設定和執行任何代理程式型錯誤的實驗。 若要造成代理程式型錯誤,就需要設定和安裝混沌代理程式。 服務直接錯誤會直接針對 Azure 資源執行,無需任何檢測。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
- 在版本相容性 (部分機器翻譯) 清單中執行作業系統的虛擬機器。 如果您沒有虛擬機器,則您可以建立一個。
- 網路設定,允許您透過 SSH 連線到虛擬機器。
- 使用者指派的受控識別。 如果您沒有使用者指派的受控識別,則您可以建立一個。
開啟 Azure Cloud Shell
Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。
若要開啟 Cloud Shell,請選取程式碼區塊右上角的 [試試看]。 您也可以移至 Bash,從另一個瀏覽器索引標籤開啟 Cloud Shell。 選取 [複製] 即可複製程式碼區塊,將其貼到 Cloud Shell 中,然後選取 Enter 鍵加以執行。
如果您偏好在本機安裝和使用 CLI,在進行本教學課程時將需要 Azure CLI 2.0.30 版或更新版本。 執行 az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。
注意
這些指示在 Cloud Shell 中使用 Bash 終端機。 如果在本機或 PowerShell 終端機執行 CLI,某些命令可能無法按所述運作。
將身分識別指派給虛擬機器
在 VM 上設定 Chaos Studio 之前,請將使用者指派的受控識別指派至您計劃安裝代理程式的每個 VM 或虛擬機器擴展集中。 使用 az vm identity assign
或 az vmss identity assign
命令。 將 $VM_RESOURCE_ID
/$VMSS_RESOURCE_ID
取代為您新增為混亂目標的虛擬機器資源識別碼。 將 $MANAGED_IDENTITY_RESOURCE_ID
取代為使用者指派的受控識別之資源識別碼。
虛擬機器
az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
虛擬機器擴展集
az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
在虛擬機器上啟用 Chaos Studio
除非您已先行將 VM 新增至 Chaos Studio,否則 Chaos Studio 無法對該 VM 插入錯誤。 若要將 VM 新增至 Chaos Studio,請在資源上建立目標與功能。 然後,您會安裝混沌代理程式。
虛擬機器有兩種目標型別。 其中一個目標類型可啟用服務直接錯誤 (不需要代理程式)。 另一個目標類型則會啟用代理程式型錯誤 (需要安裝代理程式)。 混沌代理程式是作為 VM 擴充功能安裝在 VM 上的應用程式。 您可以使用在客體作業系統中插入錯誤。
啟用混亂目標和功能
接著,在每個虛擬機器或虛擬機器擴展集上設定 Microsoft-Agent 目標,以指定代理程式將用來連線到 Chaos Studio 的使用者指派受控識別。 在此範例中,我們會為所有 VM 使用一個受控識別。 必須透過 REST API 建立目標。 在此範例中,我們使用 az rest
CLI 命令來執行 REST API 呼叫。
修改下列 JSON,將
$USER_IDENTITY_CLIENT_ID
替換為受控識別的用戶端識別碼。 您可以在所建立使用者指派的受控識別之 Azure 入口網站概觀中找到用戶端識別碼。 以您的 Azure AD 租用戶識別碼取代$USER_IDENTITY_TENANT_ID
。 其可在 Azure 入口網站 [租用戶資訊] 下的 [Microsoft Entra ID] 中找到。 將 JSON 檔案儲存在您執行 Azure CLI 的相同位置中。 在 Cloud Shell 中,您可以拖放 JSON 檔案進行上傳。{ "properties": { "identities": [ { "clientId": "$USER_IDENTITY_CLIENT_ID", "tenantId": "$USER_IDENTITY_TENANT_ID", "type": "AzureManagedIdentity" } ] } }
將
$RESOURCE_ID
取代為目標虛擬機器或虛擬機器擴展集的資源識別碼,以建立目標。 使用您在先前步驟中建立的 JSON 檔案名稱來取代target.json
。az rest --method put --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 --body @target.json --query properties.agentProfileId -o tsv
如果您收到 PowerShell 剖析錯誤,請切換至本教學課程中建議的 Bash 終端,或以單一引號 (
--body '@target.json'
) 環繞參照的 JSON 檔案。複製此命令所傳回之 agentProfileId 的 GUID,以供稍後步驟使用。
將
$RESOURCE_ID
取代為目標虛擬機器或虛擬機器擴展集的資源識別碼,以建立功能。 將$CAPABILITY
取代為您啟用的錯誤功能名稱 (例如,CPUPressure-1.0
)。az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
例如,如果您要啟用 CPU 壓力功能:
az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/CPUPressure-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
安裝 Chaos Studio 虛擬機器擴充功能
混亂代理程式是在虛擬機器或虛擬機器擴展集執行個體中執行的應用程式,以執行代理程式型錯誤。 在安裝期間,您可以設定:
- 擁有受控識別的代理程式,可向 Chaos Studio 進行代理程式驗證。
- 您所建立之 Microsoft-Agent 目標的設定檔識別碼。
- (選擇性) 使用 Application Insights 檢測金鑰,使代理程式能夠向 Application Insights 傳送診斷事件。
開始之前,請確定您具備下列詳細資料:
- agentProfileId:建立目標時傳回的屬性。 如果您沒有這個屬性,您可以執行
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
並複製agentProfileId
屬性。 - ClientId:目標中使用之使用者指派受控識別的用戶端識別碼。 如果您沒有這個屬性,您可以執行
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
並複製clientId
屬性。 - (選擇性) AppInsightsKey:Application Insights 元件的檢測金鑰,您可以在入口網站的 [基本資訊] 下的 Application Insights 分頁中找到此金鑰。
- agentProfileId:建立目標時傳回的屬性。 如果您沒有這個屬性,您可以執行
安裝 Chaos Studio VM 擴充功能。 將
$VM_RESOURCE_ID
取代為 VM 的資源識別碼,或用您虛擬機器擴展集的屬性取代$SUBSCRIPTION_ID
、$RESOURCE_GROUP
和$VMSS_NAME
。 將$AGENT_PROFILE_ID
取代為代理程式設定檔識別碼。 將$USER_IDENTITY_CLIENT_ID
取代為受控識別的用戶端識別碼。 將$APP_INSIGHTS_KEY
取代為您的 Application Insights 檢測金鑰。 如果您未使用 Application Insights,請移除該機碼/值組。預設代理程式虛擬機器擴充功能設定的完整清單
以下是使用者所需的最小代理程式 VM 擴充功能設定:
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID" }
以下是代理程式 VM 擴充功能設定的所有值
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID", "appinsightskey": "$APP_INSIGHTS_KEY", "overrides": { "region": string, default to be null "logLevel": { "default" : string , default to be Information }, "checkCertRevocation": boolean, default to be false. } }
在虛擬機器上安裝代理程式
Windows
az vm extension set --ids $VM_RESOURCE_ID --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vm extension set --ids $VM_RESOURCE_ID --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
在虛擬機器擴展集上安裝代理程式
Windows
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
如果您要設定虛擬機器擴展集,請確認執行個體已升級至最新的模型。 如有需要,請將模型內所有執行個體升級。
az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
建立實驗
成功部署 VM 之後,您現在即可建立實驗。 混沌實驗會定義您想要針對目標資源採取的動作。 動作會以循序步驟組織並執行。 混沌實驗也會定義您想要針對平行執行的分支採取的動作。
從下列 JSON 範例開始制定實驗 JSON。 使用建立實驗 API 和錯誤程式庫,修改 JSON 以對應至您要執行的實驗。
{ "identity": { "type": "SystemAssigned" }, "location": "centralus", "properties": { "selectors": [ { "id": "Selector1", "targets": [ { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myWindowsVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" }, { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myLinuxVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" } ], "type": "List" } ], "steps": [ { "branches": [ { "actions": [ { "duration": "PT10M", "name": "urn:csci:microsoft:agent:cpuPressure/1.0", "parameters": [ { "key": "pressureLevel", "value": "95" } ], "selectorId": "Selector1", "type": "continuous" } ], "name": "Branch 1" } ], "name": "Step 1" } ] } }
如果針對虛擬機器擴展集執行,請修改錯誤參數,以包含目標的執行個體號碼:
"parameters": [ { "key": "pressureLevel", "value": "95" }, { "key": "virtualMachineScaleSetInstances", "value": "[0,1,2]" } ]
您可以移至虛擬機器擴展集,然後選取 [執行個體] 來識別 Azure 入口網站中的擴展集執行個體數目。 執行個體名稱會以執行個體編號結尾。
使用 Azure CLI 建立實驗。 將
$SUBSCRIPTION_ID
、$RESOURCE_GROUP
和$EXPERIMENT_NAME
取代為您實驗的屬性。 請確定您已儲存並上傳實驗 JSON。 使用您的 JSON 檔案名稱更新experiment.json
。az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
每個實驗會建立對應的系統指派受控識別。 在回應中記下此身分識別的主體識別碼,下一個步驟將會用到。
將實驗權限授與虛擬機器
當您建立混沌實驗時,Chaos Studio 會建立系統指派的受控識別,以針對目標資源執行錯誤。 必須將目標資源的適當權限授與此身分識別,實驗才能順利執行。 代理程式型錯誤需要讀取者角色。 沒有 */讀取權限的其他角色 (例如虛擬機器參與者) 將不會授與代理程式型錯誤的適當權限。
使用下列命令,為您的 VM 或虛擬機器擴展集提供實驗存取權。 將 $EXPERIMENT_PRINCIPAL_ID
取代為上一個步驟中的主體識別碼。 將 $RESOURCE_ID
取代為目標虛擬機器或虛擬機器擴展集的資源識別碼。 請務必使用 VM 的資源識別碼,而不是實驗定義中所使用的混亂代理程式之資源識別碼。 為實驗目標的每個虛擬機器或虛擬機器擴展集執行此命令。
az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID
執行您的實驗
您現在可以開始執行實驗。 若要查看效果,建議您開啟 Azure 監視器計量圖表,並在另一個瀏覽器索引標籤中顯示 VM 的 CPU 壓力。
使用 Azure CLI 啟動實驗。 將
$SUBSCRIPTION_ID
、$RESOURCE_GROUP
和$EXPERIMENT_NAME
取代為您實驗的屬性。az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2023-11-01
回應包含狀態 URL,可在實驗執行時用來查詢實驗狀態。
下一步
現在已執行代理程式型實驗,您可以開始: