Řešení potíží se selháními rozšíření virtuálního počítače Azure s Windows

Přehled šablon Azure Resource Manageru

Šablony Azure Resource Manageru umožňují deklarativně specifikovat infrastrukturu Azure IaaS v jazyce JSON definováním závislostí mezi prostředky.

Další informace o vytváření šablon pro použití rozšíření najdete v tématu Vytváření šablon rozšíření.

V tomto článku si řekneme něco o řešení potíží s některými běžnými chybami rozšíření virtuálních počítačů.

Zobrazení stavu rozšíření

Šablony Azure Resource Manager je možné spouštět z Azure PowerShell. Po spuštění šablony je možné stav rozšíření zobrazit v Průzkumníku prostředků Azure nebo v nástrojích příkazového řádku.

Tady je příklad:

Azure PowerShell:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

Tady je ukázkový výstup:

Extensions:  {
  "ExtensionType": "Microsoft.Compute.CustomScriptExtension",
  "Name": "myCustomScriptExtension",
  "SubStatuses": [
    {
      "Code": "ComponentStatus/StdOut/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "    Directory: C:\\temp\\n\\n\\nMode                LastWriteTime     Length Name
          \\n----                -------------     ------ ----                              \\n-a---          9/1/2015   2:03 AM         11
          test.txt                          \\n\\n",
                  "Time": null
      },
    {
      "Code": "ComponentStatus/StdErr/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "",
      "Time": null
    }
  ]
}

Řešení potíží se selháním rozšíření

Ověřte, že je agent virtuálního počítače spuštěný a připravený.

Agent virtuálního počítače se vyžaduje ke správě, instalaci a spouštění rozšíření. Pokud agent virtuálního počítače není spuštěný nebo se mu nedaří nahlásit stav Připraveno platformě Azure, rozšíření nebudou fungovat správně.

Informace o řešení potíží s agentem virtuálního počítače najdete na následujících stránkách:

Projděte si průvodce odstraňováním potíží s konkrétním rozšířením.

Některá rozšíření mají konkrétní stránku popisující, jak je řešit. Seznam těchto rozšíření a stránky najdete na stránce Řešení potíží s rozšířeními .

Zobrazení stavu rozšíření

Jak je vysvětleno výše, stav rozšíření můžete zjistit spuštěním rutiny PowerShellu:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

nebo příkaz rozhraní příkazového řádku:

az vm extension show -g <RG Name> --vm-name <VM Name>  --name <Extension Name>

nebo v Azure Portal přejděte do okna virtuálního počítače / Nastavení / Rozšíření. Potom můžete na rozšíření kliknout a zkontrolovat jeho stav a zprávu.

Opětovné spuštění rozšíření na virtuálním počítači

Pokud na virtuálním počítači spouštíte skripty pomocí rozšíření vlastních skriptů, může někdy dojít k chybě, kdy se virtuální počítač úspěšně vytvořil, ale skript selhal. Za těchto podmínek je doporučeným způsobem zotavení z této chyby odebrání rozšíření a opětovné spuštění šablony. Poznámka: V budoucnu bude tato funkce vylepšena, aby se odstranila potřeba odinstalovat rozšíření.

Odebrání rozšíření z Azure PowerShell

Remove-AzVMExtension -ResourceGroupName $RGName -VMName $vmName -Name "myCustomScriptExtension"

Po odebrání rozšíření je možné šablonu znovu spustit a spustit skripty na virtuálním počítači.

Aktivace nového cíle pro virtuální počítač

Můžete si všimnout, že rozšíření nebylo spuštěno nebo se ho nedaří spustit kvůli chybějícímu generátoru certifikátů Windows Azure CRP (tento certifikát se používá k zabezpečení přenosu chráněných nastavení rozšíření). Tento certifikát se automaticky vygeneruje restartováním agenta hosta Windows z virtuálního počítače:

  • Otevřete Správce úloh.
  • Přechod na kartu Podrobnosti
  • Vyhledání procesu WindowsAzureGuestAgent.exe
  • Klikněte pravým tlačítkem myši a vyberte Ukončit úlohu. Proces se automaticky restartuje.

Spuštěním příkazu "VM Reapply" můžete pro virtuální počítač také aktivovat nový Stav cíle. Reapply virtuálního počítače je rozhraní API zavedené v roce 2020, které umožňuje opětovné použití stavu virtuálního počítače. Doporučujeme to udělat v době, kdy můžete tolerovat krátký výpadek virtuálního počítače. I když samotné opětovné použití nezpůsobí restartování virtuálního počítače a ve velké většině případů volání reapply virtuální počítač nerestartuje, existuje velmi malé riziko, že se při opětovném použití znovu spustí nějaká další čekající aktualizace modelu virtuálních počítačů, která by mohla vyžadovat restartování.

Azure Portal:

Na portálu vyberte virtuální počítač a v levém podokně pod položkou Podpora a řešení potíží vyberte Znovu nasadit a znovu použít a pak vyberte Znovu použít.

Azure PowerShell (nahraďte název skupiny prostředků a název virtuálního počítače vašimi hodnotami):

Set-AzVM -ResourceGroupName <RG Name> -Name <VM Name> -Reapply

Azure CLI (nahraďte název skupiny prostředků a název virtuálního počítače vašimi hodnotami):

az vm reapply -g <RG Name> -n <VM Name>

Pokud opětovné použití virtuálního počítače nefunguje, můžete do virtuálního počítače přidat nový prázdný datový disk z portálu pro správu Azure a později ho po opětovném přidání certifikátu odebrat.

Prohlédněte si protokoly rozšíření ve virtuálním počítači.

Pokud předchozí kroky nepomohly a vaše rozšíření je stále ve stavu selhání, dalším krokem je podívat se na jeho protokoly ve virtuálním počítači.

Na virtuálním počítači s Windows se protokoly rozšíření obvykle nacházejí ve

C:\WindowsAzure\Logs\Plugins

A nastavení rozšíření a stavové soubory budou v části

C:\Packages\Plugins

Na virtuálním počítači s Linuxem se protokoly rozšíření obvykle nacházejí ve

/var/log/azure/

A nastavení rozšíření a stavové soubory budou v části

/var/lib/waagent/

Každé rozšíření je jiné, ale obvykle se řídí podobnými principy:

Balíčky rozšíření a binární soubory se stahují na virtuálním počítači (např. "/var/lib/waagent/custom-script/download/1" pro Linux nebo C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads\0 pro Windows).

Jejich konfigurace a nastavení se předávají z platformy Azure do obslužné rutiny rozšíření prostřednictvím agenta virtuálního počítače (např. "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/config" pro Linux nebo "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\RuntimeSettings" pro Windows)

Obslužné rutiny rozšíření ve virtuálním počítači zapisují do stavového souboru (např. "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/status/1.status" pro Linux nebo C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Status pro Windows), který se pak bude hlásit platformě Azure. Tento stav se hlásí prostřednictvím PowerShellu, rozhraní příkazového řádku nebo v okně rozšíření virtuálního počítače v Azure Portal.

Zapisují také podrobné protokoly o svém spuštění (např. "/var/log/azure/custom-script/handler.log" pro Linux nebo "C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\CustomScriptHandler.log" pro Windows).

Pokud se virtuální počítač znovu vytvoří z existujícího virtuálního počítače

Může se stát, že vytváříte virtuální počítač Azure založený na specializovaném disku pocházejícím z jiného virtuálního počítače Azure. V takovém případě je možné, že starý virtuální počítač obsahoval rozšíření, takže zbyly binární soubory, protokoly a stavové soubory. Nový model virtuálního počítače nebude vědět o stavech rozšíření předchozího virtuálního počítače a může hlásit nesprávný stav těchto rozšíření. Důrazně doporučujeme před vytvořením nového virtuálního počítače odebrat rozšíření ze starého virtuálního počítače a po vytvoření nového virtuálního počítače tato rozšíření znovu nainstalovat. K tomu může dojít, když vytvoříte generalizovanou image z existujícího virtuálního počítače Azure. Zveme vás k odebrání rozšíření, abyste se vyhnuli nekonzistentnímu stavu rozšíření.

Známé problémy

PowerShell se nerozpoznal jako interní nebo externí příkaz

Ve výstupu rozšíření RunCommand si všimnete následujících chybových položek:

RunCommandExtension failed with "'powershell' isn't recognized as an internal or external command,"

Analýza

Rozšíření běží pod místním systémovým účtem, takže je velmi možné, že powershell.exe funguje správně, když se k virtuálnímu počítači připojíte pomocí protokolu RDP, ale při spuštění s příkazem RunCommand selže.

Řešení

  • Zkontrolujte, že je PowerShell správně uvedený v proměnné prostředí PATH:
    • Otevřete Ovládací panely.
    • Systém a zabezpečení
    • Systémový
    • Karta Upřesnit –> Proměnné prostředí
  • V části Systémové proměnné klikněte na upravit a ujistěte se, že powerShell je v proměnné prostředí PATH (obvykle C:\Windows\System32\WindowsPowerShell\v1.0).
  • Restartujte virtuální počítač nebo službu WindowsAzureGuestAgent a zkuste spustit příkaz znovu.

Příkaz není rozpoznán jako interní nebo externí příkaz.

V souboru C:\WindowsAzure\Logs\Plugins<ExtensionName><Version>\CommandExecution.log se zobrazí následující:

Execution Error: '<command>' isn't recognized as an internal or external command, operable program or batch file.

Analýza

Rozšíření běží pod místním systémovým účtem, takže je velmi možné, že powershell.exe funguje správně, když se k virtuálnímu počítači připojíte pomocí protokolu RDP, ale při spuštění s příkazem RunCommand selže.

Řešení

  • Na virtuálním počítači otevřete příkazový řádek a spuštěním příkazu chybu reprodukujte. Agent virtuálního počítače používá cmd.exe správce a můžete mít předkonfigurovaný příkaz, který se spustí při každém spuštění nástroje cmd.
  • Je také pravděpodobné, že proměnná PATH je chybně nakonfigurovaná, ale to bude záviset na příkazu, u kterého dochází k problému.

Agent VMAccessAgent selhává kvůli nemožnosti aktualizovat nastavení Připojení ke vzdálené ploše pro účet správce. Chyba: System.Runtime.InteropServices.COMException (0x800706D9): Mapovač koncových bodů nemá k dispozici žádné další koncové body.

Ve stavu rozšíření se zobrazí následující:

Type Microsoft.Compute.VMAccessAgent
Version 2.4.8
Status Provisioning failed
Status level Error
Status message Cannot update Remote Desktop Connection settings for Administrator account. Error: System.Runtime.InteropServices.COMException (0x800706D9): There are no more endpoints available from the endpoint mapper. (Exception from HRESULT: 0x800706D9) at NetFwTypeLib.INetFwRules.GetEnumerator() at 
Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktopFirewallRules() 
at Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktop() at

Analýza

K této chybě může dojít, když není spuštěná služba Brána Windows Firewall.

Řešení

Zkontrolujte, jestli je služba Brána Windows Firewall povolená a spuštěná. Pokud není, povolte ho a spusťte ho a pak zkuste znovu spustit agenta VMAccessAgent.

Vzdálený certifikát je podle ověřovací procedury neplatný.

V souboru WaAppAgent.log se zobrazí následující

System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.
Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

Analýza

Ve vašem virtuálním počítači pravděpodobně chybí kořenový certifikát Baltimore CyberTrust v důvěryhodných kořenových certifikačních autoritách.

Řešení

Otevřete konzolu certifikátů pomocí nástroje certmgr.msc a zkontrolujte, jestli tam certifikát je.

Dalším možným problémem je přerušení řetězu certifikátů nástrojem pro kontrolu SSL třetí strany, jako je ZScaler. Tento druh nástroje by měl být nakonfigurovaný tak, aby obešel kontrolu SSL.