Udostępnij za pośrednictwem


Agenci zestawu skalowania maszyn wirtualnych platformy Azure

Azure DevOps Services

Agenci zestawu skalowania maszyn wirtualnych platformy Azure, zwani dalej agentami zestawu skalowania, są formą własnych agentów, które mogą być skalowane automatycznie w celu spełnienia wymagań. Ta elastyczność zmniejsza potrzebę korzystania z dedykowanych agentów przez cały czas. Inaczej niż w przypadku agentów hostowanych przez firmę Microsoft możesz elastycznie dostosowywać rozmiar i obraz maszyn, na których działają agenci.

Napiwek

Zarządzane pule DevOps to nowa usługa, która stanowi ewolucję pul agentów zestawu skalowania maszyn wirtualnych usługi Azure DevOps, co jeszcze bardziej upraszcza tworzenie puli niestandardowej przez zwiększenie skalowalności i niezawodności pul niestandardowych. Zarządzane pule DevOps to w pełni zarządzana usługa, w której maszyny wirtualne lub kontenery zasilające agentów działają w ramach subskrypcji platformy Microsoft Azure, a nie w ramach własnej subskrypcji platformy Azure, na przykład w przypadku korzystania z pul agentów zestawu skalowania maszyn wirtualnych usługi Azure DevOps. Aby uzyskać więcej informacji, zobacz dokumentację zarządzanych pul DevOps.

Jeśli lubisz agentów hostowanych przez firmę Microsoft, ale są one ograniczone przez oferowane przez nich agentów, rozważ użycie agentów zestawu skalowania. Oto kilka przykładów:

  • Potrzebujesz więcej pamięci, więcej procesora, więcej miejsca do magazynowania lub więcej operacji we/wy niż to, co oferujemy w natywnych agentach hostowanych przez firmę Microsoft.
  • Potrzebujesz maszyny wirtualnej NCv2 z określonymi zestawami instrukcji dla uczenia maszynowego.
  • Potrzebujesz wdrożyć w prywatnej usłudze Azure App Service w prywatnej sieci wirtualnej bez łączności przychodzącej.
  • Należy otworzyć zaporę firmową na określone adresy IP, aby agenci hostowani przez firmę Microsoft mogli komunikować się z serwerami.
  • Należy ograniczyć łączność sieciową maszyn agentów i umożliwić im dostęp tylko do zatwierdzonych lokacji.
  • Nie możesz uzyskać wystarczającej liczby agentów od firmy Microsoft, aby zaspokoić swoje potrzeby.
  • Zadania przekraczają limit czasu agenta hostowanego przez firmę Microsoft.
  • Nie można partycjonować zadań równoległych hostowanych przez firmę Microsoft do poszczególnych projektów lub zespołów w organizacji.
  • Chcesz uruchomić kilka kolejnych zadań na agencie, aby korzystać z przyrostowych pamięci podręcznych pakietów źródłowych i na poziomie maszyny.
  • Chcesz uruchomić konfigurację lub rozgrzewkę pamięci podręcznej przed rozpoczęciem akceptowania zadań przez agenta.

Jeśli lubisz własnych agentów, ale chcesz uprościć zarządzanie nimi, rozważ użycie agentów zestawu skalowania. Oto kilka przykładów:

  • Nie chcesz uruchamiać dedykowanych agentów przez całą dobę. Chcesz wyłączyć obsługę maszyn agentów, które nie są używane do uruchamiania zadań.
  • Uruchamiasz niezaufany kod w potoku i po każdym zadaniu chcesz odtwarzać maszyny agenta z obrazu.
  • Chcesz uprościć okresowe aktualizowanie obrazu podstawowego dla agentów.

Uwaga

  • Nie można uruchamiać agentów mac przy użyciu zestawów skalowania. W ten sposób można uruchamiać tylko agentów systemu Windows lub Linux.

  • Korzystanie z pul agentów usługi Virtual Machine Scale Sets dla usług Azure DevOps Services jest obsługiwane tylko w przypadku chmury publicznej platformy Azure (usługi globalnej). Obecnie pule agentów usługi Virtual Machine Scale Sets nie obsługują żadnej innej oferty chmury krajowej.

  • Nie należy kojarzyć zestawów skalowania maszyn wirtualnych z wieloma pulami.

Tworzenie zestawu skalowania

W ramach przygotowań do tworzenia agentów zestawu skalowania należy najpierw utworzyć zestaw skalowania maszyn wirtualnych w witrynie Azure Portal. Zestaw skalowania maszyn wirtualnych należy utworzyć w określony sposób, aby usługa Azure Pipelines mogła nim zarządzać. W szczególności należy wyłączyć skalowanie automatyczne, aby usługa Azure Pipelines mogła określić sposób wykonywania skalowania na podstawie liczby przychodzących zadań potoku. Zalecamy wykonanie poniższych kroków w celu utworzenia zestawu skalowania.

W poniższym przykładzie nowa grupa zasobów i zestaw skalowania maszyn wirtualnych są tworzone w usłudze Azure Cloud Shell przy użyciu obrazu maszyny wirtualnej UbuntuLTS.

Uwaga

W tym przykładzie obraz maszyny wirtualnej UbuntuLTS jest używany dla zestawu skalowania. Jeśli potrzebujesz dostosowanego obrazu maszyny wirtualnej jako podstawy agenta, utwórz dostosowany obraz przed utworzeniem zestawu skalowania, wykonując kroki opisane w temacie Tworzenie zestawu skalowania z niestandardowym obrazem, oprogramowaniem lub rozmiarem dysku.

  1. Przejdź do usługi Azure Cloud Shell pod adresem https://shell.azure.com/.

  2. Uruchom następujące polecenie, aby zweryfikować domyślną subskrypcję platformy Azure.

    az account list -o table
    

    Jeśli żądana subskrypcja nie jest wyświetlana jako domyślna, wybierz żądaną subskrypcję.

    az account set -s <your subscription ID>
    
  3. Utwórz grupę zasobów dla zestawu skalowania maszyn wirtualnych.

    az group create \
    --location westus \
    --name vmssagents
    
  4. Utwórz zestaw skalowania maszyn wirtualnych w grupie zasobów. W tym przykładzie określono obraz maszyny wirtualnej z systemem Ubuntu2204.

    az vmss create \
    --name vmssagentspool \
    --resource-group vmssagents \
    --image Ubuntu2204 \
    --vm-sku Standard_D2_v4 \
    --storage-sku StandardSSD_LRS \
    --authentication-type SSH \
    --generate-ssh-keys \
    --instance-count 2 \
    --disable-overprovision \
    --upgrade-policy-mode manual \
    --single-placement-group false \
    --platform-fault-domain-count 1 \
    --load-balancer "" \
    --orchestration-mode Uniform
    

    Uwaga

    Usługa Azure Pipelines nie obsługuje aprowizacji zestawu skalowania i skalowania automatycznego. Upewnij się, że obie funkcje są wyłączone dla zestawu skalowania.

    Ponieważ usługa Azure Pipelines zarządza zestawem skalowania, wymagane lub zalecane są następujące ustawienia:

    • --disable-overprovision -Wymagane
    • --upgrade-policy-mode manual -Wymagane
    • --load-balancer "" — Usługa Azure Pipelines nie wymaga modułu równoważenia obciążenia do kierowania zadań do agentów w puli agentów zestawu skalowania, ale konfigurowanie modułu równoważenia obciążenia jest jednym ze sposobów uzyskania adresu IP dla agentów zestawu skalowania, których można użyć dla reguł zapory. Inną opcją uzyskiwania adresu IP dla agentów zestawu skalowania jest utworzenie zestawu skalowania --public-ip-address przy użyciu opcji. Aby uzyskać więcej informacji na temat konfigurowania zestawu skalowania przy użyciu modułu równoważenia obciążenia lub publicznego adresu IP, zobacz dokumentację zestawów skalowania maszyn wirtualnych i az vmss create.
    • --instance-count 2 — to ustawienie nie jest wymagane, ale daje możliwość sprawdzenia, czy zestaw skalowania jest w pełni funkcjonalny przed utworzeniem puli agentów. Tworzenie dwóch maszyn wirtualnych może potrwać kilka minut. Później podczas tworzenia puli agentów usługa Azure Pipelines usuwa te dwie maszyny wirtualne i tworzy nowe.

    Ważne

    Jeśli uruchomisz ten skrypt przy użyciu interfejsu wiersza polecenia platformy Azure w systemie Windows, musisz ująć "" element w cudzysłów --load-balancer "" pojedynczych w następujący sposób: --load-balancer '""'

    Jeśli rozmiar maszyny wirtualnej obsługuje efemeryczne dyski systemu operacyjnego, następujące parametry umożliwiające włączenie efemerycznych dysków systemu operacyjnego są opcjonalne, ale zalecane, aby poprawić czas ponownego obrazu maszyny wirtualnej.

    • --ephemeral-os-disk true
    • --os-disk-caching readonly

    Ważne

    Efemeryczne dyski systemu operacyjnego nie są obsługiwane we wszystkich rozmiarach maszyn wirtualnych. Aby uzyskać listę obsługiwanych rozmiarów maszyn wirtualnych, zobacz Efemeryczne dyski systemu operacyjnego dla maszyn wirtualnych platformy Azure.

    Wybierz dowolny obraz systemu Linux lub Windows — z witryny Azure Marketplace lub własnego obrazu niestandardowego — aby utworzyć zestaw skalowania. Nie instaluj wstępnie agenta usługi Azure Pipelines na obrazie. Usługa Azure Pipelines automatycznie instaluje agenta, ponieważ aprowizuje nowe maszyny wirtualne. W powyższym przykładzie użyliśmy zwykłego UbuntuLTS obrazu. Aby uzyskać instrukcje dotyczące tworzenia i używania obrazu niestandardowego, zobacz Często zadawane pytania.

    Wybierz dowolną jednostkę SKU maszyny wirtualnej i jednostkę SKU magazynu.

    Uwaga

    Zagadnienia dotyczące licencjonowania ograniczają nas do rozpowszechniania obrazów hostowanych przez firmę Microsoft. Nie możemy udostępnić tych obrazów do użycia w agentach zestawu skalowania. Jednak skrypty używane do generowania tych obrazów to open source. Możesz używać tych skryptów i tworzyć własne obrazy niestandardowe.

  5. Po utworzeniu zestawu skalowania przejdź do zestawu skalowania w witrynie Azure Portal i sprawdź następujące ustawienia:

    • Zasady uaktualniania — ręczne

      Sprawdź zasady uaktualniania.

      To ustawienie można również sprawdzić, uruchamiając następujące polecenie interfejsu wiersza polecenia platformy Azure.

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
      
    • Skalowanie — skalowanie ręczne

      Sprawdź zasady skalowania ręcznego.

Ważne

Usługa Azure Pipelines nie obsługuje ochrony wystąpień. Upewnij się, że włączono ochronę wystąpień akcji skalowania i zestawu skalowania.

Tryby aranżacji

Zestawy skalowania maszyn wirtualnych platformy Azure można skonfigurować za pomocą dwóch trybów aranżacji: Jednolity i Elastyczny. Obsługa usługi Azure Pipelines dla trybu jednolitej aranżacji jest ogólnie dostępna dla wszystkich klientów.

Tryb elastycznej aranżacji umożliwia usłudze Azure Pipelines równoległe kolejkowanie wielu operacji zestawu skalowania. Obsługa usługi Azure Pipelines dla elastycznej aranżacji jest dostępna na żądanie i podlega ocenie. Wzorce użycia klientów muszą wskazywać na znaczną korzyść. Tacy klienci mają duże zestawy skalowania, nie używają ponownie agentów dla wielu zadań, uruchamiają wiele zadań krótkotrwałych równolegle i używają wyłącznie dysków efemerycznych na swoich maszynach wirtualnych. Jeśli chcesz użyć tej funkcji, skontaktuj się z naszym zespołem pomocy technicznej.

Tworzenie puli agentów zestawu skalowania

  1. Przejdź do ustawień projektu usługi Azure DevOps, wybierz pozycję Pule agentów w obszarze Potoki i wybierz pozycję Dodaj pulę, aby utworzyć nową pulę agentów.

    Utwórz pulę agentów.

    Ważne

    Możesz utworzyć pulę zestawów skalowania w ustawieniach projektu lub ustawieniach organizacji, ale po usunięciu puli zestawów skalowania musisz usunąć ją z ustawień organizacji, a nie ustawień programu Project.

  2. Wybierz pozycję Zestaw skalowania maszyn wirtualnych platformy Azure dla typu puli. Wybierz subskrypcję platformy Azure zawierającą zestaw skalowania, wybierz pozycję Autoryzuj, a następnie wybierz odpowiedni zestaw skalowania maszyn wirtualnych z tej subskrypcji. Jeśli masz istniejące połączenie z usługą, możesz wybrać to z listy zamiast subskrypcji.

    Ważne

    • Aby skonfigurować pulę agentów zestawu skalowania, musisz mieć uprawnienia Właściciel lub Administrator dostępu użytkowników do wybranej subskrypcji. Jeśli masz jedno z tych uprawnień, ale podczas wybierania pozycji Autoryzuj występuje błąd, zobacz Rozwiązywanie problemów.

    • Jedynym obsługiwanym obecnie połączeniem usługi jest połączenie usługi Azure Resource Manager (ARM) na podstawie klucza jednostki usługi. Połączenia usługi ARM oparte na poświadczenie certyfikatu lub tożsamość zarządzana zakończy się niepowodzeniem. Podczas próby wyświetlenia listy istniejących zestawów skalowania w ramach subskrypcji zostanie wyświetlony błąd podobny do następującego:

      Invalid Service Endpoint with Id <guid> and Scope <guid>

  3. Wybierz żądany zestaw skalowania maszyn wirtualnych z tej subskrypcji.

  4. Określ nazwę puli agentów.

  5. Skonfiguruj wymienione poniżej opcje:

    • Automatyczne odłącz maszyny wirtualne po każdym użyciu — nowe wystąpienie maszyny wirtualnej jest używane dla każdego zadania. Maszyna wirtualna przechodzi w tryb offline po uruchomieniu zadania i jest odtwarzana przed rozpoczęciem innego zadania.
    • Zapisz agenta w złej kondycji na potrzeby badania — czy zapisać maszyny wirtualne agenta w złej kondycji na potrzeby rozwiązywania problemów zamiast ich usuwania.
    • Maksymalna liczba maszyn wirtualnych w zestawie skalowania — usługa Azure Pipelines automatycznie skaluje liczbę agentów, ale nie przekroczy tego limitu.
    • Liczba agentów do utrzymania w stanie wstrzymania — usługa Azure Pipelines będzie automatycznie skalowana w liczbie agentów, ale zapewni, że zawsze jest dostępnych tych wielu agentów do uruchamiania nowych zadań. Jeśli ustawisz opcję Liczba agentów, aby zachować stan wstrzymania na wartość 0, na przykład aby zaoszczędzić koszty dla małej liczby zadań, usługa Azure Pipelines uruchomi maszynę wirtualną tylko wtedy, gdy ma zadanie.
    • Opóźnienie w minutach przed usunięciem nadmiaru bezczynnych agentów — aby uwzględnić zmienność obciążenia kompilacji przez cały dzień, usługa Azure Pipelines będzie czekać na określony czas przed usunięciem nadmiarowego bezczynnego agenta.
    • Konfigurowanie maszyn wirtualnych pod kątem uruchamiania testów interakcyjnych (tylko system operacyjny Windows Server) — agenci systemu Windows mogą być skonfigurowani do uruchamiania niezaufanych przy użyciu autologonu i interakcyjnego interfejsu użytkownika lub można je skonfigurować do uruchamiania z podwyższonym poziomem uprawnień. Zaznacz to pole, aby uruchomić niezauwzwany interakcyjny interfejs użytkownika. W obu przypadkach użytkownik agenta jest członkiem grupy Administratorzy.
  6. Po skonfigurowaniu ustawień wybierz pozycję Utwórz , aby utworzyć pulę agentów.

Korzystanie z puli agentów zestawu skalowania

Użycie puli agentów zestawu skalowania jest podobne do każdej innej puli agentów. Można go używać w klasycznych potokach kompilacji, wydania lub YAML. Uprawnienia użytkownika, uprawnienia potoku, zatwierdzenia i inne kontrole działają tak samo jak w każdej innej puli agentów. Aby uzyskać więcej informacji, zobacz Pule agentów.

Ważne

Należy zachować ostrożność podczas wprowadzania zmian bezpośrednio w zestawie skalowania w witrynie Azure Portal.

  • W witrynie Azure Portal nie można zmienić wielu ustawień konfiguracji zestawu skalowania. Usługa Azure Pipelines aktualizuje konfigurację zestawu skalowania. Wszelkie ręczne zmiany wprowadzone w zestawie skalowania mogą zakłócać działanie usługi Azure Pipelines.
  • Nie można zmienić nazwy ani usunąć zestawu skalowania bez uprzedniego usunięcia puli zestawu skalowania w usłudze Azure Pipelines.

Jak usługa Azure Pipelines zarządza zestawem skalowania

Po utworzeniu puli agentów zestawu skalowania usługa Azure Pipelines automatycznie skaluje maszyny agentów.

Usługa Azure Pipelines próbkuje stan agentów w puli i maszynach wirtualnych w zestawie skalowania co 5 minut. Decyzja o skalowaniu w poziomie jest oparta na liczbie bezczynnych agentów w tym czasie. Agent jest uważany za bezczynny, jeśli jest w trybie online i nie uruchamia zadania potoku. Usługa Azure Pipelines wykonuje operację skalowania w poziomie, jeśli spełniony jest jeden z następujących warunków:

  • Liczba bezczynnych agentów spadnie poniżej określonej liczby agentów rezerwowych
  • Brak bezczynnych agentów do zadań potoku obsługi oczekujących w kolejce

Jeśli zostanie spełniony jeden z tych warunków, usługa Azure Pipelines zwiększa liczbę maszyn wirtualnych. Skalowanie w górę odbywa się w przyrostach określonej wartości procentowej maksymalnego rozmiaru puli. Poczekaj 20 minut na utworzenie maszyn dla każdego kroku.

Usługa Azure Pipelines skaluje się w agentach, gdy liczba bezczynnych agentów przekracza liczbę wstrzymania przez ponad 30 minut (można skonfigurować przy użyciu opóźnienia w minutach przed usunięciem nadmiaru bezczynnych agentów).

Aby umieścić to wszystko w przykładzie, rozważ pulę agentów zestawu skalowania skonfigurowaną z dwoma agentami rezerwowymi i czterema maksymalnymi agentami. Załóżmy, że chcesz usunąć maszynę wirtualną po każdym użyciu. Załóżmy również, że w zestawie skalowania nie ma żadnych maszyn wirtualnych do rozpoczęcia.

  • Ponieważ liczba bezczynnych agentów wynosi 0, a liczba bezczynnych agentów jest niższa od liczby rezerwowej 2, usługa Azure Pipelines skaluje w poziomie i dodaje dwie maszyny wirtualne do zestawu skalowania. Po przejściu tych agentów do trybu online będą istnieć dwa bezczynne agenty.

  • Załóżmy, że jedno zadanie potoku dociera i jest przydzielane jednemu z agentów.

  • Obecnie liczba bezczynnych agentów wynosi 1 i jest mniejsza niż liczba rezerw 2. Dlatego usługa Azure Pipelines skaluje w poziomie i dodaje 2 kolejne maszyny wirtualne (rozmiar przyrostu używany w tym przykładzie). Obecnie pula ma trzech bezczynnych agentów i jednego zajętego agenta.

  • Załóżmy, że zadanie pierwszego agenta zostanie ukończone. Usługa Azure Pipelines przełącze tego agenta w tryb offline, aby odtworzyć obraz tej maszyny. Po kilku minutach wraca ze świeżym obrazem. W tej chwili będziemy mieć czterech bezczynnych agentów.

  • Jeśli żadne inne zadania nie zostaną dostarczone przez 30 minut (konfigurowalne przy użyciu opóźnienia w minutach przed usunięciem nadmiaru bezczynnych agentów), usługa Azure Pipelines ustali, że istnieje więcej bezczynnych agentów niż jest to konieczne. Dlatego jest skalowana w puli do dwóch agentów.

W trakcie tej operacji celem usługi Azure Pipelines jest osiągnięcie żądanej liczby bezczynnych agentów w stanie wstrzymania. Pule są skalowane w poziomie i powoli. W ciągu dnia pula będzie skalowana w poziomie w miarę kolejkowania żądań rano i skalowania w miarę upływu obciążenia wieczorem. Możesz obserwować więcej bezczynnych agentów niż chcesz w różnych momentach, co jest oczekiwane, ponieważ usługa Azure Pipelines stopniowo zbliża się do określonych ograniczeń.

Uwaga

Skalowanie lub skalowanie maszyn wirtualnych w poziomie może potrwać co najmniej godzinę. Usługa Azure Pipelines będzie skalowana w poziomie w krokach, monitoruje operacje pod kątem błędów i reaguje, usuwając niezdatne do użycia maszyny i tworząc nowe w czasie. Ta operacja naprawcza może potrwać ponad godzinę.

Aby osiągnąć maksymalną stabilność, operacje zestawu skalowania są wykonywane sekwencyjnie. Jeśli na przykład pula musi zostać skalowana w poziomie i istnieje również maszyny w złej kondycji do usunięcia, usługa Azure Pipelines najpierw przeskaluje pulę w poziomie. Po skalowaniu puli w poziomie w celu osiągnięcia żądanej liczby bezczynnych agentów w stanie wstrzymania maszyny zostaną usunięte w złej kondycji, w zależności od ustawienia Zapisz agenta w złej kondycji na potrzeby badania . Aby uzyskać więcej informacji, zobacz Agenci w złej kondycji.

Ze względu na rozmiar próbkowania 5 minut możliwe jest, że wszyscy agenci mogą uruchamiać potoki przez krótki czas i nie nastąpi skalowanie.

Dostosowywanie konfiguracji agenta potoku

Konfigurację agenta usługi Azure Pipelines można dostosować, definiując zmienne środowiskowe w niestandardowym obrazie systemu operacyjnego dla zestawu skalowania. Na przykład katalog roboczy agenta zestawu skalowania jest domyślnie ustawiony na C:\a dla systemu Windows i /agent/_work dla systemu Linux. Jeśli chcesz zmienić katalog roboczy, ustaw zmienną środowiskową o nazwie VSTS_AGENT_INPUT_WORK z żądanym katalogiem roboczym. Więcej informacji można znaleźć w dokumentacji konfiguracji nienadzorowanej agenta potoków. Przykłady obejmują:

  • VSTS_AGENT_INPUT_WORK
  • VSTS_AGENT_INPUT_PROXYURL
  • VSTS_AGENT_INPUT_PROXYUSERNAME
  • VSTS_AGENT_INPUT_PROXYPASSWORD

Ważne

Należy zachować ostrożność podczas dostosowywania agenta pipelines. Niektóre ustawienia będą powodować konflikt z innymi wymaganymi ustawieniami, co powoduje niepowodzenie rejestracji agenta i usunięcie maszyny wirtualnej. Te ustawienia nie powinny być ustawiane ani zmieniane:

  • VSTS_AGENT_INPUT_URL
  • VSTS_AGENT_INPUT_AUTH
  • VSTS_AGENT_INPUT_TOKEN
  • VSTS_AGENT_INPUT_USERNAME
  • VSTS_AGENT_INPUT_PASSWORD
  • VSTS_AGENT_INPUT_POOL
  • VSTS_AGENT_INPUT_AGENT
  • VSTS_AGENT_INPUT_RUNASSERVICE
  • ... i wszystkie elementy związane z grupami wdrożeń.

Dostosowywanie uruchamiania maszyny wirtualnej za pomocą rozszerzenia niestandardowego skryptu

Użytkownicy mogą chcieć wykonywać skrypty uruchamiania na maszynach agentów zestawu skalowania, zanim te maszyny zaczną uruchamiać zadania potoku. Niektóre typowe przypadki użycia skryptów uruchamiania obejmują instalowanie oprogramowania, rozgrzewanie pamięci podręcznych lub pobieranie repozytoriów. Skrypty uruchamiania można wykonać, instalując rozszerzenie niestandardowego skryptu dla systemu Windows lub rozszerzenie niestandardowego skryptu dla systemu Linux.

To rozszerzenie zostanie wykonane na każdej maszynie wirtualnej w zestawie skalowania natychmiast po utworzeniu lub ponownym obrazie. Rozszerzenie niestandardowego skryptu zostanie wykonane przed wykonaniem rozszerzenia agenta usługi Azure Pipelines.

Oto przykład tworzenia niestandardowego rozszerzenia skryptu dla systemu Linux.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScript \
--version 2.0 \
--publisher Microsoft.Azure.Extensions \
--settings '{ \"fileUris\":[\"https://<myGitHubRepoUrl>/myScript.sh\"], \"commandToExecute\": \"bash ./myScript.sh /myArgs \" }'

Oto przykład tworzenia niestandardowego rozszerzenia skryptu dla systemu Windows.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScriptExtension \
--version 1.9 \
--publisher Microsoft.Compute \
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/myscript.ps1\"], \"commandToExecute\": \"Powershell.exe -ExecutionPolicy Unrestricted -File myscript.ps1 -myargs 0 \" }'

Ważne

Skrypty wykonywane w rozszerzeniu niestandardowego skryptu muszą zwracać kod zakończenia 0, aby maszyna wirtualna zakończyła proces tworzenia maszyny wirtualnej. Jeśli rozszerzenie niestandardowego skryptu zgłasza wyjątek lub zwraca kod zakończenia inny niż zero, rozszerzenie usługi Azure Pipeline nie zostanie wykonane, a maszyna wirtualna nie zarejestruje się w puli agentów usługi Azure DevOps.

Może się zdarzyć, że rozszerzenie jest uruchamiane przed aprowizowaniem wszystkich zasobów maszyny wirtualnej, w takim przypadku zostanie wyświetlony błąd podobny do "niepowodzenie instalacji podstawowych wymagań wstępnych". Można to naprawić, dodając sleep polecenie na początku skryptu, na przykład sleep 30.

Cykl życia agenta zestawu skalowania

Oto przepływ operacji agenta zestawu skalowania maszyn wirtualnych usługi Azure Pipelines

  1. Zadanie określania rozmiaru puli agentów zestawu skalowania usługi Azure DevOps określa, że pula ma zbyt mało bezczynnych agentów i musi skalować w poziomie. Usługa Azure Pipelines wykonuje wywołanie usługi Azure Scale Sets w celu zwiększenia pojemności zestawu skalowania.

  2. Zestaw skalowania platformy Azure rozpoczyna tworzenie nowych maszyn wirtualnych. Po uruchomieniu maszyn wirtualnych usługa Azure Scale Sets sekwencyjnie wykonuje wszystkie zainstalowane rozszerzenia maszyn wirtualnych.

  3. Jeśli rozszerzenie niestandardowego skryptu jest zainstalowane, jest wykonywane przed rozszerzeniem agenta usługi Azure Pipelines. Jeśli rozszerzenie niestandardowego skryptu zwróci kod zakończenia niezerowy, proces tworzenia maszyny wirtualnej zostanie przerwany i zostanie usunięty.

  4. Zostanie wykonane rozszerzenie agenta usługi Azure Pipelines. To rozszerzenie pobiera najnowszą wersję agenta usługi Azure Pipelines wraz z najnowszą wersją skryptu konfiguracji. Skrypty konfiguracji można znaleźć pod adresem URL z następującymi formatami:

    • Linux: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/<script_version>/enableagent.sh, na przykład wersja 15
    • Windows: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Windows/<script_version>/enableagent.ps1, na przykład wersja 17
  5. Skrypt konfiguracji tworzy użytkownika lokalnego o nazwie AzDevOps , jeśli system operacyjny to Windows Server lub Linux. W przypadku systemu operacyjnego klienta systemu Windows 10 agent działa jako LocalSystem. Następnie skrypt rozpakowuje, instaluje i konfiguruje agenta usługi Azure Pipelines. W ramach konfiguracji agent rejestruje się w puli agentów usługi Azure DevOps i pojawia się na liście puli agentów w stanie Offline.

  6. W większości scenariuszy skrypt konfiguracji natychmiast uruchamia agenta do uruchomienia jako użytkownik AzDevOpslokalny . Agent przechodzi w tryb online i jest gotowy do uruchamiania zadań potoku.

    Jeśli pula jest skonfigurowana na potrzeby interaktywnego interfejsu użytkownika, maszyna wirtualna zostanie ponownie uruchomiona po skonfigurowaniu agenta. Po ponownym uruchomieniu użytkownik lokalny automatycznie loguje się i uruchamia agent potoków. Następnie agent przechodzi do trybu online i jest gotowy do uruchamiania zadań potoku.

Tworzenie zestawu skalowania z niestandardowym obrazem, oprogramowaniem lub rozmiarem dysku

Jeśli chcesz utworzyć zestaw skalowania z domyślnym dyskiem systemu operacyjnego 128 GB przy użyciu publicznie dostępnego obrazu platformy Azure, przejdź bezpośrednio do kroku 10 i użyj nazwy obrazu publicznego (UbuntuLTS, Win2019DataCenter itp.), aby utworzyć zestaw skalowania. W przeciwnym razie wykonaj następujące kroki, aby dostosować obraz maszyny wirtualnej.

  1. Utwórz maszynę wirtualną z żądanym obrazem systemu operacyjnego i opcjonalnie rozwiń rozmiar dysku systemu operacyjnego z 128 GB do <myDiskSizeGb>.

    • Jeśli zaczynasz od dostępnego obrazu platformy Azure, na przykład <myBaseImage> = (Win2019DataCenter, UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
      
    • Jeśli zaczyna się od uogólnionego wirtualnego dysku twardego:

      1. Najpierw utwórz maszynę wirtualną z dyskiem niezarządzanym o żądanym rozmiarze, a następnie przekonwertuj na dysk zarządzany:

        az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myVhdUrl> --os-type windows --os-disk-size-gb <myDiskSizeGb> --use-unmanaged-disk --admin-username <myUserName> --admin-password <myPassword> --storage-account <myVhdStorageAccount>
        
      2. Zamykanie maszyny wirtualnej

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
        
      3. Cofanie przydziału maszyny wirtualnej

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
        
      4. Konwertowanie na dysk zarządzany

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
        
      5. Uruchom ponownie maszynę wirtualną

        az vm start --resource-group <myResourceGroup> --name <MyVM>
        
  2. Pulpit zdalny (lub SSH) do publicznego adresu IP maszyny wirtualnej w celu dostosowania obrazu. Może być konieczne otwarcie portów w zaporze, aby odblokować porty RDP (3389) lub SSH (22).

    1. Windows — jeśli <MyDiskSizeGb> jest większy niż 128 GB, rozszerz rozmiar dysku systemu operacyjnego, aby wypełnić rozmiar dysku określony przez <MyDiskSizeGb>.

      Otwórz narzędzie DiskPart jako administrator i uruchom następujące polecenia narzędzia DiskPart:

      1. list volume (aby wyświetlić woluminy)
      2. select volume 2 (zależy od tego, który wolumin jest dyskiem systemu operacyjnego)
      3. extend size 72000 (aby rozszerzyć dysk o 72 GB, z 128 GB do 200 GB)
  3. Zainstaluj dowolne wymagane dodatkowe oprogramowanie na maszynie wirtualnej.

  4. Aby dostosować uprawnienia użytkownika agenta potoku, możesz utworzyć użytkownika o nazwie AzDevOpsi przyznać temu użytkownikowi wymagane uprawnienia. Ten użytkownik zostanie utworzony przez skrypt uruchamiania agenta zestawu skalowania, jeśli jeszcze nie istnieje.

  5. Ponowne uruchamianie maszyny wirtualnej po zakończeniu z dostosowaniami

  6. Uogólnij maszynę wirtualną.

    • Windows — w oknie konsoli administracyjnej:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
      
    • Linux:
      sudo waagent -deprovision+user -force
      

    Ważne

    Poczekaj na zakończenie uogólniania i zamknięcia maszyny wirtualnej. Nie kontynuuj, dopóki maszyna wirtualna nie zostanie zatrzymana. Zezwól na 60 minut.

  7. Cofanie przydziału maszyny wirtualnej

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
    
  8. Oznacz maszynę wirtualną jako uogólnioną

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
    
  9. Utwórz obraz maszyny wirtualnej na podstawie uogólnionego obrazu. Podczas wykonywania tych kroków w celu zaktualizowania istniejącego obrazu zestawu skalowania zanotuj adres URL identyfikatora obrazu w danych wyjściowych.

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
    
  10. Tworzenie zestawu skalowania na podstawie niestandardowego obrazu maszyny wirtualnej

    az vmss create --resource-group <myResourceGroup> --name <myScaleSet> --image <MyImage> --admin-username <myUsername> --admin-password <myPassword> --instance-count 2 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
    
  11. Sprawdź, czy obie maszyny wirtualne utworzone w zestawie skalowania są dostępne w trybie online, mają różne nazwy i osiągną stan Powodzenie

Teraz możesz utworzyć pulę agentów przy użyciu tego zestawu skalowania.

Aktualizowanie istniejącego zestawu skalowania przy użyciu nowego obrazu niestandardowego

Aby zaktualizować obraz w istniejącym zestawie skalowania, wykonaj kroki opisane w poprzedniej sekcji Tworzenie zestawu skalowania z niestandardowym obrazem, oprogramowaniem lub rozmiarem dysku w górę, az image create aby wygenerować niestandardowy obraz systemu operacyjnego. Zanotuj adres URL właściwości ID, który jest wynikiem az image create polecenia . Następnie zaktualizuj zestaw skalowania przy użyciu nowego obrazu, jak pokazano w poniższym przykładzie. Po zaktualizowaniu obrazu zestawu skalowania wszystkie przyszłe maszyny wirtualne w zestawie skalowania zostaną utworzone przy użyciu nowego obrazu.

az vmss update --resource-group <myResourceGroup> --name <myScaleSet> --set virtualMachineProfile.storageProfile.imageReference.id=<id url>

Obsługiwane systemy operacyjne

Agenci zestawu skalowania obsługują obecnie systemy Ubuntu Linux, Windows Server/DataCenter 2016/2019 i klienta systemu Windows 10.

Znane problemy

  • Dystrybucje Debian lub RedHat Linux nie są obsługiwane. Tylko Ubuntu jest.
  • Klient systemu Windows 10 nie obsługuje uruchamiania agenta potoku jako użytkownik lokalny i dlatego agent nie może wchodzić w interakcje z interfejsem użytkownika. Agent będzie zamiast tego uruchamiany jako usługa lokalna.

Rozwiązywanie problemów

Przejdź do ustawień projektu usługi Azure DevOps, wybierz pozycję Pule agentów w obszarze Potoki i wybierz pulę agentów. Wybierz kartę z etykietą Diagnostyka.

Na karcie Diagnostyka są wyświetlane wszystkie akcje wykonywane przez usługę Azure DevOps w celu tworzenia, usuwania lub odtwarzania obrazów maszyn wirtualnych w zestawie skalowania platformy Azure. Diagnostyka rejestruje również wszelkie błędy napotkane podczas próby wykonania tych akcji. Przejrzyj błędy, aby upewnić się, że zestaw skalowania ma wystarczające zasoby do skalowania w poziomie. Jeśli Twoja subskrypcja platformy Azure osiągnęła limit zasobów na maszynach wirtualnych, rdzeniach procesora CPU, dyskach lub adresach IP, te błędy zostaną wyświetlone tutaj.

Agenci w złej kondycji

Gdy agenci lub maszyny wirtualne nie uruchamiają się, nie łączą się z usługą Azure DevOps lub w trybie offline nieoczekiwanie, usługa Azure DevOps rejestruje błędy na karcie Diagnostyka puli agentów i próbuje usunąć skojarzona maszyna wirtualna. Konfiguracja sieci, dostosowywanie obrazu i oczekujące ponowne uruchomienie mogą powodować te problemy. Nawiązywanie połączenia z maszyną wirtualną w celu debugowania i zbierania dzienników może pomóc w zbadaniu.

Jeśli chcesz, aby usługa Azure DevOps zapisywała maszynę wirtualną agenta w złej kondycji na potrzeby badania i nie usuwała jej automatycznie po wykryciu stanu złej kondycji, przejdź do ustawień projektu usługi Azure DevOps, wybierz pozycję Pule agentów w obszarze Potoki i wybierz pulę agentów. Wybierz pozycję Ustawienia, wybierz opcję Zapisz agenta w złej kondycji na potrzeby badania, a następnie wybierz pozycję Zapisz.

Zapisz ustawienie agenta w złej kondycji.

Teraz, gdy w zestawie skalowania zostanie wykryty agent w złej kondycji, usługa Azure DevOps zapisuje tego agenta i skojarzona maszyna wirtualna. Zapisany agent będzie widoczny na karcie Diagnostyka interfejsu użytkownika puli agentów. Przejdź do ustawień projektu usługi Azure DevOps, wybierz pozycję Pule agentów w obszarze Potoki, wybierz pulę agentów, wybierz pozycję Diagnostyka i zanotuj nazwę agenta.

Zapisano kartę agentów.

Znajdź skojarzona maszyna wirtualna w zestawie skalowania maszyn wirtualnych platformy Azure za pośrednictwem witryny Azure Portal na liście Wystąpienia .

Wystąpienia zestawu skalowania maszyn wirtualnych w witrynie Azure Portal.

Wybierz wystąpienie, wybierz pozycję Połącz i wykonaj badanie.

Nawiązywanie połączenia z wystąpieniem maszyny wirtualnej.

Aby usunąć zapisanego agenta po zakończeniu badania, przejdź do ustawień projektu usługi Azure DevOps, wybierz pozycję Pule agentów w obszarze Potoki i wybierz pulę agentów. Wybierz kartę z etykietą Diagnostyka. Znajdź agenta na karcie Agenci zapisani na potrzeby badania , a następnie wybierz pozycję Usuń. Spowoduje to usunięcie agenta z puli i usunięcie skojarzonej maszyny wirtualnej.

Przycisk usuwania kart zapisanych agentów.

Często zadawane pytania

Jakie są typowe problemy i ich rozwiązania?

Obserwowanie większej liczby bezczynnych agentów niż jest to wymagane w różnych momentach

Aby lepiej zrozumieć, dlaczego tak się dzieje, zobacz Jak usługa Azure Pipelines zarządza zestawem skalowania. W trakcie operacji skalowania celem usługi Azure Pipelines jest osiągnięcie żądanej liczby bezczynnych agentów w stanie wstrzymania. Pule są skalowane w poziomie i powoli. W ciągu dnia skala puli będzie rano zwiększana w poziomie w miarę kolejkowania żądań, a wieczorem zmniejszana w miarę zmniejszania się obciążenia. Jest to oczekiwane zachowanie, ponieważ usługa Azure Pipelines stopniowo zbliża się do określonych przez Ciebie ograniczeń.

Skalowanie zestawów skalowania maszyn wirtualnych w górę nie jest wykonywane w oczekiwanym interwale pięciu minut

Zadanie skalowania jest uruchamiane co pięć minut, ale jeśli jest przetwarzana tylko jedna operacja, możesz zauważyć, że skalowanie w górę nie odbywa się w ciągu pięciu minut — jest to obecnie zgodnie z projektem.

Zestaw skalowania maszyn wirtualnych z systemem Linux w usłudze Azure DevOps często nie może uruchomić potoku

Pierwszym miejscem, w którym występują problemy z agentami zestawu skalowania, jest karta Diagnostyka w puli agentów.

Należy również rozważyć zapisanie maszyny wirtualnej w złej kondycji na potrzeby debugowania. Aby uzyskać więcej informacji, zobacz Agenci w złej kondycji.

Zapisani agenci są tam, chyba że zostaną usunięte. Jeśli agent nie jest dostępny w trybie online w ciągu 10 minut, zostanie oznaczony jako w złej kondycji i zapisany, jeśli jest to możliwe. Tylko jedna maszyna wirtualna jest przechowywana w stanie zapisanym. Jeśli agent przejdzie w tryb offline nieoczekiwanie (z powodu ponownego uruchomienia maszyny wirtualnej lub zdarzenia z obrazem), nie zostanie on zapisany do zbadania.

Zapisane są tylko maszyny wirtualne, dla których agenci nie mogą uruchomić. Jeśli maszyna wirtualna ma stan niepowodzenia podczas tworzenia, nie jest zapisywana. W takim przypadku komunikat na karcie Diagnostyka to "usuwanie maszyny w złej kondycji" zamiast "nie można uruchomić".

Możesz sprawdzić opcję automatycznego usuwania maszyn wirtualnych po każdym użyciu dla puli agentów, ale widać, że maszyny wirtualne nie są ponownie obrazowane, tak jak powinny i po prostu pobierają nowe zadania w kolejce

Opcja usuwania maszyny wirtualnej po każdej kompilacji będzie działać tylko dla systemu Windows Server i obsługiwanych obrazów systemu Linux. Nie jest ona obsługiwana w przypadku obrazów klienta systemu Windows.

Zestawy skalowania maszyn wirtualnych pokazują agenta w trybie offline, jeśli maszyna wirtualna zostanie ponownie uruchomiona

Pokazywanie agentów jako offline, jeśli maszyna wirtualna zostanie uruchomiona ponownie, jest oczekiwanym zachowaniem. Usługa agenta działa tylko w kontekście systemowym. Jeśli jednak maszyna zostanie ponownie uruchomiona z jakiegoś powodu, zostanie uznana za maszynę wirtualną w złej kondycji i usunięta. Aby uzyskać więcej informacji, zobacz Agenci w złej kondycji.

Gdy nie można uruchomić agentów lub maszyn wirtualnych, nie można nawiązać połączenia z usługą Azure DevOps lub nieoczekiwanie przejść w tryb offline, usługa Azure DevOps rejestruje błędy na karcie Diagnostyka puli agentów i próbuje usunąć skojarzą maszynę wirtualną. Konfiguracja sieci, dostosowywanie obrazu i oczekujące ponowne uruchomienie mogą powodować te problemy. Aby uniknąć problemu, wyłącz aktualizację oprogramowania w obrazie. Możesz również nawiązać połączenie z maszyną wirtualną w celu debugowania i zbierania dzienników, aby pomóc w zbadaniu problemu.

W usłudze Cost Management można zobaczyć wiele tagów, takich jak _AzureDevOpsElasticPoolTimeStamp dla zestawów skalowania maszyn wirtualnych

Po utworzeniu puli do zestawu skalowania jest dodawany tag, aby oznaczyć zestaw skalowania jako używany (w celu uniknięcia używania tego samego zestawu skalowania przez dwie pule), a do znacznika czasu jest dodawany kolejny tag, który jest aktualizowany za każdym razem, gdy jest uruchamiane zadanie konfiguracji (co dwie godziny).

Nie można utworzyć nowej puli agentów zestawu skalowania i wyświetlić komunikat o błędzie informujący, że pula o tej samej nazwie już istnieje

Może zostać wyświetlony komunikat o błędzie podobny This virtual machine scale set is already in use by pool <pool name> do tego, że tag nadal istnieje w zestawie skalowania nawet po jego usunięciu. Gdy pula agentów zostanie usunięta, spróbujesz usunąć tag z zestawu skalowania, ale jest to najlepsza próba i zrezygnowasz po trzech ponownych próbach. Ponadto może istnieć maksymalnie dwugodzinna luka, w której zestaw skalowania maszyn wirtualnych, który nie jest używany przez żadną pulę agentów, nie może być przypisany do nowej. Rozwiązaniem tego problemu jest zaczekanie na upłynięcie tego interwału czasu lub ręczne usunięcie tagu zestawu skalowania z witryny Azure Portal. Podczas wyświetlania zestawu skalowania w witrynie Azure Portal wybierz link Tagi po lewej stronie i usuń tag z etykietą _AzureDevOpsElasticPool.

Zadanie konserwacji zestawów skalowania maszyn wirtualnych nie jest uruchomione na agentach ani w dziennikach

Zadanie konserwacji jest uruchamiane co 24 godziny. Istnieje możliwość, że maszyny wirtualne zostaną wypełnione przed tym czasem. Rozważ zwiększenie rozmiaru dysku na maszynie wirtualnej i dodanie skryptu w potoku w celu usunięcia zawartości.

Jeśli zostanie określony AzDevOps jako administrator podstawowy w skryscie dla zestawów skalowania maszyn wirtualnych, mogą wystąpić problemy z konfiguracjami agenta w wystąpieniach zestawu skalowania

Jeśli zostanie określony AzDevOps jako administrator podstawowy w skrypcie zestawu skalowania maszyn wirtualnych, mogą wystąpić problemy z konfiguracjami agenta w wystąpieniach zestawu skalowania (hasło użytkownika zostanie zmienione, jeśli już istnieje).

Ten problem występuje, ponieważ skrypty rozszerzenia agenta próbują utworzyć użytkownika AzDevOps i zmienić jego hasło.

Uwaga

Możesz utworzyć użytkownika i przyznać mu dodatkowe uprawnienia, ale nie powinien być administratorem podstawowym i nic nie powinno zależeć od hasła, ponieważ hasło zostanie zmienione. Aby uniknąć tego problemu, wybierz innego użytkownika jako administratora podstawowego podczas tworzenia zestawu skalowania AzDevOpszamiast .

Instalacja rozszerzenia agenta kończy się niepowodzeniem w wystąpieniach zestawu skalowania z powodu zabezpieczeń sieci i konfiguracji zapory

Rozszerzenie musi mieć możliwość pobierania plików agenta kompilacji z witryny https://vstsagentpackage.azureedge.net/agent, a agent kompilacji musi być w stanie zarejestrować się w usłudze Azure DevOps Services. Upewnij się, że ten adres URL i adresy URL oraz adresy IP związane z usługą Azure DevOps Services są otwarte w wystąpieniu. Aby dowiedzieć się, które adresy IP i adresy URL muszą być odblokowane w zaporze, zobacz Dozwolone adresy IP i adresy URL domeny.

Dlaczego skrypt konfiguracji agenta zestawu skalowania wywołuje funkcję Add-MpPreference i konfiguruje usługę Windows Defender na agencie?

Aby zwiększyć wydajność i niezawodność, skrypty konfiguracji wywołają funkcję Add-MpPreference z elementem zawierającym C:\ ExclusionPath element i D:\, co wyłącza zaplanowane i w czasie rzeczywistym skanowanie w usłudze Windows Defender dla plików w tych folderach na agencie. Aby zmienić domyślne zachowanie, ustaw zmienną środowiskową o nazwie ELASTIC_POOLS_SKIP_DEFENDER_EXCLUSION na true.

Chcę zwiększyć rozmiar puli. Co należy wziąć pod uwagę?

Przed zwiększeniem rozmiaru puli upewnij się, że sieć wirtualna platformy Azure skonfigurowana dla puli zestawów skalowania maszyn wirtualnych ma wystarczająco duży zakres przestrzeni adresowej , aby pomieścić wszystkich nowych agentów. Jeśli nie, może wystąpić błąd podobny do Niepowodzenie zwiększenia pojemności. Podsieć azure-devops-agent-pool-fabrikam-fiber z prefiksem adresu 12.123.45.224/28 nie ma wystarczającej pojemności dla 5 adresów IP.