Rozwiązywanie problemów powodowanych przez błędy rozszerzenia maszyny wirtualnej z systemem Windows na platformie Azure

Omówienie szablonów usługi Azure Resource Manager

Szablony usługi Azure Resource Manager umożliwiają deklaratywne określenie infrastruktury IaaS platformy Azure w języku JSON przez zdefiniowanie zależności między źródłami.

Zobacz Tworzenie szablonów rozszerzeń, aby uzyskać więcej informacji na temat tworzenia szablonów do używania rozszerzeń.

W tym artykule omówiono rozwiązywanie problemów związanych z typowymi błędami rozszerzeń maszyn wirtualnych.

Wyświetlanie stanu rozszerzenia

Szablony usługi Azure Resource Manager można wykonywać z poziomu programu Azure PowerShell. Po wykonaniu szablonu stan rozszerzenia można wyświetlić w Eksploratorze zasobów platformy Azure lub w narzędziach wiersza polecenia.

Oto przykład:

Azure PowerShell:

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

Oto przykładowe dane wyjściowe:

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
    }
  ]
}

Rozwiązywanie problemów z błędami rozszerzeń

Sprawdź, czy agent maszyny wirtualnej jest uruchomiony i gotowy

Agent maszyny wirtualnej jest wymagany do zarządzania, instalowania i wykonywania rozszerzeń. Jeśli agent maszyny wirtualnej nie jest uruchomiony lub nie zgłosi stanu Gotowe na platformę Azure, rozszerzenia nie będą działać poprawnie.

Aby rozwiązać problemy z agentem maszyny wirtualnej, zapoznaj się z następującymi stronami:

Sprawdzanie konkretnego przewodnika rozwiązywania problemów z rozszerzeniem

Niektóre rozszerzenia mają określoną stronę opisującą sposób ich rozwiązywania. Listę tych rozszerzeń i stron można znaleźć na stronie Rozwiązywanie problemów z rozszerzeniami .

Wyświetlanie stanu rozszerzenia

Jak wyjaśniono powyżej, stan rozszerzenia można znaleźć, uruchamiając polecenie cmdlet programu PowerShell:

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

lub polecenie interfejsu wiersza polecenia:

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

lub w witrynie Azure Portal, przechodząc do bloku maszyny wirtualnej / ustawień / rozszerzeń. Następnie możesz kliknąć rozszerzenie i sprawdzić jego stan i komunikat.

Ponowne uruchamianie rozszerzenia na maszynie wirtualnej

Jeśli uruchamiasz skrypty na maszynie wirtualnej przy użyciu rozszerzenia niestandardowego skryptu, czasami może wystąpić błąd polegający na tym, że maszyna wirtualna została utworzona pomyślnie, ale skrypt zakończył się niepowodzeniem. W tych warunkach zalecanym sposobem odzyskania po tym błędzie jest usunięcie rozszerzenia i ponowne uruchomienie szablonu. Uwaga: w przyszłości ta funkcja zostanie rozszerzona, aby usunąć konieczność odinstalowania rozszerzenia.

Usuwanie rozszerzenia z programu Azure PowerShell

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

Po usunięciu rozszerzenia można go ponownie wykonać w celu uruchomienia skryptów na maszynie wirtualnej.

Wyzwalanie nowego elementu GoalState na maszynie wirtualnej

Możesz zauważyć, że rozszerzenie nie zostało wykonane lub nie jest wykonywane z powodu braku "Generator certyfikatów CRP platformy Windows Azure" (ten certyfikat jest używany do zabezpieczania transportu ustawień chronionych rozszerzenia). Ten certyfikat zostanie automatycznie wygenerowany ponownie przez ponowne uruchomienie agenta gościa systemu Windows z poziomu maszyny wirtualnej:

  • Otwórz Menedżera zadań
  • Przejdź do karty Szczegóły
  • Lokalizowanie procesu WindowsAzureGuestAgent.exe
  • Kliknij prawym przyciskiem myszy i wybierz pozycję "Zakończ zadanie". Proces zostanie automatycznie uruchomiony ponownie

Możesz również wyzwolić nową wartość GoalState na maszynie wirtualnej, wykonując polecenie "Maszyna wirtualna ponownie zastosować". Ponowne zastosowania maszyny wirtualnej to interfejs API wprowadzony w 2020 r. w celu ponownego zastosowania stanu maszyny wirtualnej. Zalecamy wykonanie tej czynności w czasie, gdy można tolerować krótki przestój maszyny wirtualnej. Chociaż sama aplikacja Reapply nie powoduje ponownego uruchomienia maszyny wirtualnej, a zdecydowana większość wywołań funkcji Reapply nie spowoduje ponownego uruchomienia maszyny wirtualnej, istnieje bardzo małe ryzyko, że niektóre inne oczekujące aktualizacje do modelu maszyny wirtualnej zostaną zastosowane, gdy aplikacja Ponownie wyzwoli nowy stan celu i że inna zmiana może wymagać ponownego uruchomienia.

Azure Portal:

W portalu wybierz maszynę wirtualną, a następnie w okienku po lewej stronie w obszarze Pomoc techniczna i rozwiązywanie problemów wybierz pozycję Ponownie wdróż i ponownie zastosuj, a następnie wybierz pozycję Ponownie zastosuj.

Azure PowerShell (zastąp nazwę grupy zasobów i nazwę maszyny wirtualnej swoimi wartościami)::

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

Interfejs wiersza polecenia platformy Azure (zastąp wartościami Nazwa grupy zasobów i Nazwa maszyny wirtualnej):

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

Jeśli aplikacja maszyny wirtualnej nie zadziałała, możesz dodać nowy pusty dysk danych do maszyny wirtualnej z portalu zarządzania Azure, a następnie usunąć go później po dodaniu certyfikatu z powrotem.

Przyjrzyj się dziennikom rozszerzeń wewnątrz maszyny wirtualnej

Jeśli poprzednie kroki nie zadziałały i jeśli rozszerzenie jest nadal w stanie niepowodzenia, następnym krokiem jest przyjrzenie się jego dziennikom wewnątrz maszyny wirtualnej.

Na maszynie wirtualnej z systemem Windows dzienniki rozszerzenia zwykle znajdują się w

C:\WindowsAzure\Logs\Plugins

Ustawienia rozszerzenia i pliki stanu będą znajdować się w

C:\Packages\Plugins

Na maszynie wirtualnej z systemem Linux dzienniki rozszerzeń zwykle znajdują się w

/var/log/azure/

Ustawienia rozszerzenia i pliki stanu będą znajdować się w

/var/lib/waagent/

Każde rozszerzenie jest inne, ale zwykle są zgodne z podobnymi regułami:

Pakiety rozszerzeń i pliki binarne są pobierane na maszynie wirtualnej (np. " /var/lib/waagent/custom-script/download/1" dla systemu Linux lub "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads\0" dla systemu Windows).

Ich konfiguracja i ustawienia są przekazywane z platformy Azure do programu obsługi rozszerzeń za pośrednictwem agenta maszyny wirtualnej (np. " /var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/config" dla systemu Linux lub "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\RuntimeSettings" dla systemu Windows)

Programy obsługi rozszerzeń wewnątrz maszyny wirtualnej zapisują się w pliku stanu (np. " /var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/status/1.status" dla systemu Linux lub "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Status" dla systemu Windows), które następnie zostaną zgłoszone do platformy Azure. Ten stan jest zgłaszany za pośrednictwem programu PowerShell, interfejsu wiersza polecenia lub w bloku rozszerzenia maszyny wirtualnej w witrynie Azure Portal.

Zapisują również szczegółowe dzienniki wykonywania (np. " /var/log/azure/custom-script/handler.log" dla systemu Linux lub "C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\CustomScriptHandler.log" dla systemu Windows).

Jeśli maszyna wirtualna zostanie ponownie utworzona z istniejącej maszyny wirtualnej

Może się zdarzyć, że tworzysz maszynę wirtualną platformy Azure na podstawie wyspecjalizowanego dysku pochodzącego z innej maszyny wirtualnej platformy Azure. W takim przypadku istnieje możliwość, że stara maszyna wirtualna zawiera rozszerzenia, dlatego pliki binarne, dzienniki i pliki stanu pozostaną w lewo. Nowy model maszyny wirtualnej nie będzie wiedział o stanach rozszerzeń poprzedniej maszyny wirtualnej i może zgłosić nieprawidłowy stan tych rozszerzeń. Zdecydowanie zalecamy usunięcie rozszerzeń ze starej maszyny wirtualnej przed utworzeniem nowego, a następnie ponowne zainstalowanie tych rozszerzeń po utworzeniu nowej maszyny wirtualnej. To samo może wystąpić podczas tworzenia uogólnionego obrazu na podstawie istniejącej maszyny wirtualnej platformy Azure. Zachęcamy do usunięcia rozszerzeń, aby uniknąć niespójnego stanu z rozszerzeń.

Znane problemy

Program PowerShell nie jest rozpoznawany jako wewnętrzne lub zewnętrzne polecenie

W danych wyjściowych rozszerzenia RunCommand są wyświetlane następujące wpisy o błędzie:

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

Analiza

Rozszerzenia są uruchamiane na koncie systemu lokalnego, więc jest bardzo możliwe, że powershell.exe działa prawidłowo podczas nawiązywania połączenia RDP z maszyną wirtualną, ale kończy się niepowodzeniem po uruchomieniu z poleceniem RunCommand.

Rozwiązanie

  • Sprawdź, czy program PowerShell jest poprawnie wymieniony w zmiennej środowiskowej PATH:
    • Otwórz Panel sterowania
    • System i zabezpieczenia
    • System
    • Karta Zaawansowane —> Zmienne środowiskowe
  • W obszarze "Zmienne systemowe" kliknij pozycję Edytuj i upewnij się, że program PowerShell znajduje się w zmiennej środowiskowej PATH (zwykle: "C:\Windows\System32\WindowsPowerShell\v1.0")
  • Uruchom ponownie maszynę wirtualną lub uruchom ponownie usługę WindowsAzureGuestAgent, a następnie spróbuj ponownie uruchomić polecenie.

Polecenie nie jest rozpoznawane jako wewnętrzne lub zewnętrzne polecenie

W pliku C:\WindowsAzure\Logs\Plugins<ExtensionName><Version>\CommandExecution.log zobaczysz następujące informacje:

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

Analiza

Rozszerzenia są uruchamiane na koncie systemu lokalnego, więc jest bardzo możliwe, że powershell.exe działa prawidłowo podczas nawiązywania połączenia RDP z maszyną wirtualną, ale kończy się niepowodzeniem po uruchomieniu z poleceniem RunCommand.

Rozwiązanie

  • Otwórz wiersz polecenia na maszynie wirtualnej i wykonaj polecenie w celu odtworzenia błędu. Agent maszyny wirtualnej używa cmd.exe administratora i może mieć pewne wstępnie skonfigurowane polecenie do wykonania za każdym razem, gdy polecenie cmd jest uruchamiane.
  • Prawdopodobnie zmienna PATH jest nieprawidłowo skonfigurowana, ale będzie to zależeć od polecenia, które ma problem.

Agent VMAccessAgent kończy się niepowodzeniem z błędem Nie można zaktualizować ustawień połączenia pulpitu zdalnego dla konta administratora. Błąd: System.Runtime.InteropServices.COMException (0x800706D9): nie ma więcej punktów końcowych dostępnych z mapatora punktu końcowego.

W stanie rozszerzenia są widoczne następujące elementy:

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

Analiza

Ten błąd może wystąpić, gdy usługa Zapory systemu Windows nie jest uruchomiona.

Rozwiązanie

Sprawdź, czy usługa Zapora systemu Windows jest włączona i uruchomiona. Jeśli tak nie jest, włącz go i uruchom — spróbuj ponownie uruchomić agenta VMAccessAgent.

Certyfikat zdalny jest nieprawidłowy według procedury weryfikacji.

W WaAppAgent.log zobaczysz następujące informacje

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.

Analiza

Prawdopodobnie brakuje certyfikatu głównego Baltimore CyberTrust w "Zaufanych głównych urzędach certyfikacji".

Rozwiązanie

Otwórz konsolę certyfikatów za pomocą narzędzia certmgr.msc i sprawdź, czy istnieje certyfikat.

Innym możliwym problemem jest to, że łańcuch certyfikatów jest uszkodzony przez narzędzie inspekcji SSL innej firmy, takie jak ZScaler. Tego rodzaju narzędzie należy skonfigurować do obejścia inspekcji protokołu SSL.