Sdílet prostřednictvím


Ř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.

V článku Vytváření šablon rozšíření najdete další informace o vytváření šablon pro použití 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 Manageru je možné spouštět z Azure PowerShellu. Po spuštění šablony se stav rozšíření dá 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 nedaří nahlásit stav Připraveno na platformě Azure, rozšíření nebudou fungovat správně.

Při řešení potíží s agentem virtuálního počítače si projděte následující stránky:

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

Některá rozšíření obsahují konkrétní stránku popisující jejich řešení. Seznamtěchtoch

Zobrazení stavu rozšíření

Jak je vysvětleno výše, stav rozšíření najdete 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 na webu Azure Portal přejděte do okna virtuálního počítače / Nastavení / Rozšíření. Potom můžete kliknout na rozšíření a zkontrolovat její 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ůžete někdy narazit na chybu, kdy se virtuální počítač úspěšně vytvořil, ale skript selhal. Za těchto podmínek doporučujeme obnovit tuto chybu odebráním rozšíření a opětovným spuštěním šablony. Poznámka: V budoucnu by se tato funkce zlepšila, aby se odebrala potřeba rozšíření odinstalovat.

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

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č

Možná si všimnete, že se rozšíření nespustí nebo se nedaří spustit kvůli chybějícímu generátoru certifikátů CRP Služby Azure (tento certifikát se používá k zabezpečení přenosu chráněných nastavení rozšíření). Tento certifikát se automaticky znovu vygeneruje restartováním agenta hosta systému 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 úkol. Proces se automaticky restartuje.

Nový cílový stav můžete pro virtuální počítač aktivovat také spuštěním příkazu Reapply virtuálního počítače. Opětovné použití virtuálního počítače je rozhraní API zavedené v roce 2020 pro 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á aplikace Reapply nezpůsobí restartování virtuálního počítače a většina volání reapply virtuální počítač nerestartuje, existuje velmi malé riziko, že se některé další čekající aktualizace modelu virtuálního počítače použijí při opětovném spuštění nového cílového stavu a že další změna může vyžadovat restartování.

Azure Portal:

Na portálu vyberte virtuální počítač a v levém podokně v části 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 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 odebrat, jakmile se certifikát přidá zpět.

Podívejte se na protokoly rozšíření uvnitř virtuálního počítače.

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

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

C:\WindowsAzure\Logs\Plugins

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

C:\Packages\Plugins

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

/var/log/azure/

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

/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 stáhnou 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 obslužné rutině 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í uvnitř virtuálního počítače 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 budou hlásit platformě Azure. Tento stav je ten, který se hlásí prostřednictvím PowerShellu, rozhraní příkazového řádku nebo v okně rozšíření virtuálního počítače na webu Azure Portal.

Zapisují také podrobné protokoly jejich provádě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 původní virtuální počítač obsahoval rozšíření, takže budou mít 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í. Před vytvořením nového virtuálního počítače důrazně doporučujeme odebrat rozšíření ze starého virtuálního počítače a po vytvoření nového virtuálního počítače znovu nainstalovat tato rozšíření. Totéž se může stát, když vytvoříte generalizovanou image z existujícího virtuálního počítače Azure. Zveme vás, abyste odebrali rozšíření, aby se zabránilo nekonzistentnímu stavu rozšíření.

Známé problémy

PowerShell se nerozpozná jako interní nebo externí příkaz

Všimněte si následujících chybových položek ve výstupu rozšíření RunCommand:

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

Analýza

Rozšíření běží v rámci místního systémového účtu, 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í pomocí RunCommand selže.

Řešení

  • Zkontrolujte, jestli 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 je PowerShell v proměnné prostředí PATH (obvykle: C:\Windows\System32\WindowsPowerShell\v1.0).
  • Restartujte virtuální počítač nebo restartujte službu WindowsAzureGuestAgent a zkuste spustit příkaz znovu.

Příkaz se nerozpozná 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ěží v rámci místního systémového účtu, 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í pomocí RunCommand selže.

Řešení

  • Otevřete na virtuálním počítači příkazový řádek a spusťte příkaz pro reprodukci chyby. Agent virtuálního počítače používá cmd.exe správce a můžete mít nějaký předem nakonfigurovaný příkaz ke spuštění při každém spuštění příkazu cmd.
  • Je také pravděpodobné, že je vaše proměnná PATH chybně nakonfigurovaná, ale to bude záviset na příkazu, který má problém.

VMAccessAgent selhává s nemožností aktualizovat nastavení připojení ke vzdálené ploše pro účet správce. Chyba: System.Runtime.InteropServices.COMException (0x800706D9): V mapovači koncových bodů nejsou 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 povolená a spuštěná služba Brána Windows Firewall. Pokud tomu tak není, povolte ho a spusťte ho – zkuste to znovu spustit VMAccessAgent.

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

V WaAppAgent.log uvidíte 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 části Důvěryhodné kořenové certifikační autority.

Řešení

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

Dalším možným problémem je, že řetěz certifikátů nefunguje 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.