Skonfiguruj ustawienia skalowania, aby zarządzać wydajnością i kosztami zarządzanej puli DevOps. Aby uzyskać informacje na temat cen i wydajności, zobacz Zarządzanie kosztami i wydajnością.
Stan agenta
Zarządzane pule DevOps można skonfigurować jako bezstanowe lub stanowe.
Pule bezstanowe — udostępniają nowego agenta dla każdego zadania.
Pule stanowe — umożliwia udostępnianie agentów między wieloma zadaniami.
Ustawieniem domyślnym dla zarządzanej puli DevOps jest bezstanowy (odświeżony agent za każdym razem), ale w niektórych przypadkach zespoły mogą chcieć ponownie używać agentów w celu ponownego użycia pakietów lub plików utworzonych podczas poprzedniego uruchomienia potoku. Obciążenie kompilacji to typowy scenariusz, w którym zespoły chcą zachować stan i użyć ponownie agentów. Pule stanowe można osiągnąć za pomocą zarządzanych pul DevOps, równoważąc je przy użyciu najlepszych rozwiązań w zakresie zabezpieczeń. Domyślnie agent może być ponownie używany przez maksymalnie 7 dni, ale można go skonfigurować do ponownego recyklingu wcześniej.
Uwaga
Pule bezstanowe lub użycie ustawienia stanu agenta za każdym razem są zalecane przez ekspertów ds. zabezpieczeń jako ochronę przed atakami łańcucha dostaw.
Pule bezstanowe
Po skonfigurowaniu agenta bezstanowego nowy agent jest pozyskiwany dla każdego zadania i jest odrzucany po zakończeniu zadania.
Agenci są skonfigurowani przy użyciu agentProfile właściwości w zasobie Zarządzane pule DevOps. W poniższym przykładzie określono agenta bezstanowego .
Gdy "kind": "stateful" zasobów lub { "stateful": {...} } w interfejsie wiersza polecenia platformy Azure), agenci w puli są traktowani jako stanowi. Pule stanowe są konfigurowane przy użyciu następujących ustawień.
Maksymalny czas wygaśnięcia dla agentów rezerwowych (maxAgentLifetime) konfiguruje maksymalny czas trwania agenta w puli stanowej, zanim zostanie zamknięty i odrzucony. Format maksymalnego czasu wygaśnięcia dla agentów rezerwowych to dd.hh:mm:ss. Wartość domyślna maksymalna czasu wygaśnięcia dla agentów rezerwowych jest ustawiona na maksymalny dozwolony czas trwania siedmiu dni (7.00:00:00).
Okres prolongaty (gracePeriodTimeSpan) konfiguruje czas oczekiwania agenta w puli stanowej na nowe zadania przed zamknięciem po zakończeniu wszystkich bieżących i w kolejce zadań. Format okresu prolongaty to dd.hh:mm:ss i domyślny okres prolongaty nie jest okresem prolongaty.
Podczas gdy agenci w pulach bezstanowych są zamykani i odrzucani po każdym zadaniu, agenci w pulach stanowych nadal działają, jeśli zostaną spełnione jakiekolwiek z poniższych warunków.
Jeśli istnieje inne zadanie w kolejce po zakończeniu pierwszego zadania, zarządzane pule DevOps wysyła to zadanie do agenta, który uruchomił pierwsze zadanie, zamiast go zamknąć.
Jeśli dla puli skonfigurowano okres prolongaty, agenci czekają na nowe zadania na czas określony przez okres prolongaty przed zamknięciem.
Jeśli agenci rezerwowi są włączeni, a obraz agenta spełnia kryteria aktywnego okresu aprowizacji, agent będzie nadal działać i czekać na zadania.
Uruchamianie agentów w pulach stanowych jest zamykane i odrzucane, jeśli są one uruchamiane w sposób ciągły przez czas określony przez maksymalny czas wygaśnięcia dla agentów rezerwowych, nawet jeśli poprzednie warunki są spełnione. Jeśli na przykład maksymalny czas wygaśnięcia dla agentów rezerwowych jest skonfigurowany przez trzy dni, a tryb agenta rezerwowego jest ustawiony na Ręczne, Schemat wszystkich tygodni (maszyny dostępne 24/7), agenci są ponownie uruchamiani po trzech ciągłych dniach pracy.
Ważne
Agenci w pulach stanowych mogą być nadal zamykani i odrzucani po zakończeniu zadania, jeśli nie ma okresu prolongaty, bez aktywnego okresu aprowizacji dla agentów rezerwowych i bez zadań w kolejce pasujących do agenta. Po odrzuceniu agenta każdy stan zostanie utracony.
Okres prolongaty umożliwia najbardziej ekonomiczny sposób uruchamiania pul stanowych dla potoków ze spójnym obciążeniem i nie wymaga korzystania z trybu agenta rezerwowego, aby zapewnić agentom online i gotowym do akceptowania zadań.
Tryb agenta rezerwowego
Podczas tworzenia puli tryb agenta rezerwowego jest domyślnie wyłączony i nie ma agentów rezerwowych do natychmiastowego przypisania do potoków, co może chwilę poczekać do 15 minut, zanim agent zostanie aprowizowany na żądanie. Aby uzyskać lepszą wydajność, włącz tryb agenta rezerwowego i skonfiguruj harmonogram agenta rezerwowego, który zapewnia pojemność dla obciążenia.
Po skonfigurowaniu harmonogramu agenta rezerwowego zarządzane pule DevOps okresowo porównują liczbę aprowizowanych agentów z liczbą agentów rezerwowych określoną przez bieżący schemat aprowizacji i uruchamiają nowych agentów w razie potrzeby, aby utrzymać ustaloną liczbę agentów rezerwowych. Możesz wyświetlić bieżący stan i liczbę agentów w swojej puli, korzystając z okienka Agents.
Ważne
Liczba aprowizacji w schemacie nie może być większa niż maksymalna liczba agentów skonfigurowanych w ustawieniach puli.
Tryb rezerwowego agenta jest skonfigurowany za pomocą następujących ustawień:
Wyłączone — tryb agenta rezerwowego jest wyłączony, a agenci są aprowizowani na żądanie, gdy zadania są kolejkowane.
Automatyczne — używaj automatycznego harmonogramu rezerwowego na podstawie historii użycia agenta i można go konfigurować pod kątem kosztów i wydajności.
Agenci rezerwowi są skonfigurowani przy użyciu resourcePredictionsProfile sekcji agentProfile właściwości . Ustaw "kind": "Manual" wartość , aby skonfigurować schemat rozpoczęcia od podstaw, schemat dni powszedni lub cały tydzień i określić szczegóły schematu resourcePredictions w sekcji. Ustaw "kind": "Automatic" wartość , aby skonfigurować automatycznych agentów rezerwowych. Pomiń sekcję, ResourcePredictionsProfile aby wyłączyć agentów rezerwowych. Szczegółowe informacje na temat konfigurowania poszczególnych typów skalowania można znaleźć w poniższych sekcjach.
Agenci są skonfigurowani przy użyciu parametru agent-profile podczas tworzenia lub aktualizowania puli.
Agenci rezerwowi są skonfigurowani przy użyciu resourcePredictionsProfile sekcji parametru agent-profile . Ustaw "Manual": {} wartość , aby skonfigurować schemat rozpoczęcia od podstaw, schemat dni powszedni lub cały tydzień i określić szczegóły schematu resourcePredictions w sekcji. Ustaw "Automatic": {} wartość , aby skonfigurować automatycznych agentów rezerwowych. Szczegółowe informacje na temat konfigurowania poszczególnych typów skalowania można znaleźć w poniższych sekcjach.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Poniższy przykład przedstawia zawartość pliku agent-profile.json .
Tryb ręczny najlepiej nadaje się dla zespołów, które mają wiedzę na temat wzorców użycia potoków ciągłej integracji/ciągłego wdrażania. Jeśli wybierzesz opcję ręczną, musisz zdefiniować schemat wstępnej aprowizacji na podstawie zrozumienia, kiedy agenci w puli będą najprawdopodobniej używać i ilu agentów prawdopodobnie będzie używanych, a także określić liczbę agentów spełniających przewidywane zapotrzebowanie.
Możesz utworzyć własny harmonogram aprowizacji lub wybrać jeden ze wstępnie zdefiniowanych harmonogramów i skonfigurować strefę czasową do użycia do określania harmonogramów. Wartość domyślna wstępnego aprowizowania strefy czasowej to (UTC) uniwersalny czas koordynowany.
Konfigurację agenta rezerwowego można skonfigurować ręcznie na jeden z następujących trzech sposobów.
Każdy z przewodników Szybki start dotyczący wstępnej aprowizacji zawiera następujące typowe ustawienia oprócz określonych ustawień dla tego przewodnika Szybki start.
Wstępne aprowizowanie strefy czasowej umożliwia skonfigurowanie strefy czasowej w schemacie wstępnej aprowizacji. Wartość domyślna wstępnego aprowizowania strefy czasowej to (UTC) uniwersalny czas koordynowany.
Procent agenta rezerwowego konfiguruje procent agentów rezerwowych dla każdego obrazu. Możesz wprowadzić polecenie * , aby upewnić się, że wszystkie obrazy są aprowidowane w równym stopniu lub można określić liczbę całkowitą z zakresu od 0 do 100, aby reprezentować wartość procentową. Jeśli określisz wartość procentową, suma dla wszystkich obrazów musi być równa 100. Jeśli masz pojedynczy obraz, określ * wartość lub 100.
Procent agenta rezerwowego jest konfigurowany w images sekcji podczas korzystania z szablonów usługi ARM. Aby uzyskać więcej informacji, zobacz Konfigurowanie obrazów.
Ręczna aprowizacja agenta rezerwowego jest określona w resourcePredictionsProfile sekcji agentProfile, a szczegóły są konfigurowane w resourcePredictions sekcji .
Określ żądaną strefę czasową schematu timeZone przy użyciu właściwości . Wartość domyślna to UTC. Aby pobrać listę nazw stref czasowych dla tej właściwości, zobacz TimeZoneInfo.GetSystemTimeZones Method (Metoda TimeZoneInfo.GetSystemTimeZones).
Harmonogram agentów rezerwowych jest definiowany daysData przez listę. Lista daysData może zawierać jeden element lub siedem elementów.
daysData Lista z siedmioma elementami jest mapowana na dni tygodnia, począwszy od niedzieli. Każdy z tych siedmiu elementów może mieć zero lub więcej "time": count wpisów, określając czas w formacie 24 godziny i liczbę agentów rezerwowych. Określona liczba agentów rezerwowych jest utrzymywana do następnego "time": count wpisu, który może być w tym samym dniu lub następnego dnia.
Lista daysData z jednym elementem definiuje schemat All Week, w którym pojedynczy "time": count wpis odpowiada liczbie agentów rezerwowych przez cały tydzień.
Poniższy przykład jest ręcznym schematem agenta rezerwowego, przy użyciu polecenia Eastern Standard Time, z jednym agentem aprowizacji od poniedziałku do piątku od 9:00 (liczba agentów rezerwowych ) do 17:00 (liczba 10agentów rezerwowych).
Pojedynczy daysData element zawiera słownik czasów i liczby agentów rezerwowych. Każdy "time" : count wpis określa liczbę agentów rezerwowych, które mają być zaplanowane od określonego czasu w formacie 24 godziny. Kolejne "time" : count wpisy określają sekwencję zaplanowanych liczników agentów dla tego dnia.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
Liczby agentów rezerwowych nie są automatycznie resetowane z powrotem do zera na koniec dnia lub na koniec tygodnia, a określenie pustego daysData elementu nie powoduje wyłączenia agentów rezerwowych dla tego dnia.
daysData Pusty element oznacza, że nie ma żadnych zmian w harmonogramie liczby agentów rezerwowych dla tego dnia. Aby ustawić agenta rezerwowego na zero rozpoczynający się od określonego okresu, należy jawnie podać "time" : count wpis z wartością count0.
Przykłady
Aby nie dostosować liczby agentów rezerwowych określonych na koniec poprzedniego dnia (lub tygodnia, jeśli konfigurujesz pierwszy okres tygodnia), określ daysData element z zero wpisów.
{
}
Aby zaplanować uruchamianie 09:00:00 i zatrzymywanie 17:00:00 pojedynczego agenta rezerwowego (przy użyciu strefy czasowej określonej przez resourcePredictions właściwość), określ następującą konfigurację.
{
"09:00:00": 1,
"17:00:00": 0
}
Aby zaplanować od północy 09:00:00do 10 agentów rezerwowych, a następnie 10 agentów rezerwowych do 17:00:00, określ następującą konfigurację.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Aby zaplanować dostępność agenta rezerwowego od 09:00:00 określonego dnia i zatrzymać się następnego 17:00:00 dnia, użyj dwóch kolejnych daysData elementów.
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Agenci są skonfigurowani przy użyciu parametru agent-profile podczas tworzenia lub aktualizowania puli.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Poniższy przykład przedstawia zawartość pliku agent-profile.json .
Ręczna aprowizacja agenta rezerwowego jest określona w resourcePredictionsProfile sekcji parametru agent-profile , a szczegóły są konfigurowane w resourcePredictions sekcji .
Określ żądaną strefę czasową schematu timeZone przy użyciu właściwości . Wartość domyślna to UTC. Aby pobrać listę nazw stref czasowych dla tej właściwości, zobacz TimeZoneInfo.GetSystemTimeZones Method (Metoda TimeZoneInfo.GetSystemTimeZones).
Harmonogram agentów rezerwowych jest definiowany daysData przez listę. Lista daysData może zawierać jeden element lub siedem elementów.
daysData Lista z siedmioma elementami jest mapowana na dni tygodnia, począwszy od niedzieli. Każdy z tych siedmiu elementów może mieć zero lub więcej "time": count wpisów, określając czas w formacie 24 godziny i liczbę agentów rezerwowych. Określona liczba agentów rezerwowych jest utrzymywana do następnego "time": count wpisu, który może być w tym samym dniu lub następnego dnia.
Lista daysData z jednym elementem definiuje schemat All Week, w którym pojedynczy "time": count wpis odpowiada liczbie agentów rezerwowych przez cały tydzień.
Poniższy przykład jest ręcznym schematem agenta rezerwowego, przy użyciu polecenia Eastern Standard Time, z jednym agentem aprowizacji od poniedziałku do piątku od 9:00 (liczba agentów rezerwowych ) do 17:00 (liczba 10agentów rezerwowych).
Pojedynczy daysData element zawiera słownik czasów i liczby agentów rezerwowych. Każdy "time" : count wpis określa liczbę agentów rezerwowych, które mają być zaplanowane od określonego czasu w formacie 24 godziny. Kolejne "time" : count wpisy określają sekwencję zaplanowanych liczników agentów dla tego dnia.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
Liczby agentów rezerwowych nie są automatycznie resetowane z powrotem do zera na koniec dnia lub na koniec tygodnia, a określenie pustego daysData elementu nie powoduje wyłączenia agentów rezerwowych dla tego dnia.
daysData Pusty element oznacza, że nie ma żadnych zmian w harmonogramie liczby agentów rezerwowych dla tego dnia. Aby ustawić agenta rezerwowego na zero rozpoczynający się od określonego okresu, należy jawnie podać "time" : count wpis z wartością count0.
Przykłady
Aby nie dostosować liczby agentów rezerwowych określonych na koniec poprzedniego dnia (lub tygodnia, jeśli konfigurujesz pierwszy okres tygodnia), określ daysData element z zero wpisów.
{
}
Aby zaplanować uruchamianie 09:00:00 i zatrzymywanie 17:00:00 pojedynczego agenta rezerwowego (przy użyciu strefy czasowej określonej przez resourcePredictions właściwość), określ następującą konfigurację.
{
"09:00:00": 1,
"17:00:00": 0
}
Aby zaplanować od północy 09:00:00do 10 agentów rezerwowych, a następnie 10 agentów rezerwowych do 17:00:00, określ następującą konfigurację.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Aby zaplanować dostępność agenta rezerwowego od 09:00:00 określonego dnia i zatrzymać się następnego 17:00:00 dnia, użyj dwóch kolejnych daysData elementów.
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Rozpocznij od podstaw
Jeśli zdecydujesz się rozpocząć od podstaw, możesz dodać listę okresów aprowizacji, które będą służyć jako schemat aprowizacji. Każdy okres aprowizacji składa się z dnia rozpoczęcia, dnia zakończenia, strefy czasowej, godziny rozpoczęcia, godziny zakończenia i liczby. Okresy aprowizacji nie mogą się nakładać na siebie.
Właściwości
opis
Wiele dni
Po zaznaczeniu tej opcji można skonfigurować zarówno dzień rozpoczęcia, jak i dzień zakończenia dla schematu aprowizacji.
Do następnego okresu
Po sprawdzeniu okres aprowizacji jest uruchamiany od godziny rozpoczęcia do początku następnego okresu aprowizacji.
Dzień rozpoczęcia
Dzień rozpoczęcia okresu aprowizacji.
Dzień zakończenia
Dzień zakończenia okresu aprowizacji. Wymagane, jeśli jest zaznaczone wielodniowe.
Godzina rozpoczęcia
Czas rozpoczęcia okresu aprowizacji.
Godzina zakończenia
Czas zakończenia okresu aprowizacji. Wymagane, chyba że zaznaczono okres do następnego okresu .
Count
Liczba agentów rezerwowych do aprowizacji. Ta liczba musi być większa niż zero i nie może być większa niż wartość Maksymalna liczba agentów skonfigurowana w ustawieniach puli.
Po utworzeniu okresu aprowizacji można usunąć lub edytować okres z listy Schemat wstępnej aprowizacji.
W poniższym przykładzie skonfigurowano schemat ręczny z 1 agentem aprowizacji w poniedziałek rano od 12:00 do 5:00 EST.
Jeśli wybierzesz schemat dni powszedni, możesz określić godzinę rozpoczęcia i godzinę zakończenia, w której określona liczba agentów rezerwowych będzie w stanie wstrzymania każdego dnia tygodnia.
Właściwości
opis
Godzina rozpoczęcia
Czas rozpoczęcia okresu aprowizacji.
Godzina zakończenia
Czas zakończenia okresu aprowizacji.
Liczba aprowizacji
Liczba agentów rezerwowych do aprowizacji. Ta liczba musi być większa niż zero i nie może być większa niż wartość Maksymalna liczba agentów skonfigurowana w ustawieniach puli.
W poniższym przykładzie skonfigurowaliśmy czterech agentów do użycia w godzinach pracy z 0 agentami w godzinach wolnych od pracy i weekendach przy użyciu czasu standardowego wschodniego.
Jeśli nie znasz wzorców użycia i chcesz polegać na automatycznym prognozowaniu na podstawie przeszłych danych, wybierz pozycję Automatycznie. Możesz równoważyć koszty i wydajność agenta za pomocą suwaka z następującymi pięcioma opcjami. Zarządzane pule DevOps uruchamia zapytanie w ciągu ostatnich trzech tygodni danych historycznych (jeśli są dostępne), organizując sesje w kolejce puli do pięciu minut i przypisuje określony percentyl (aby uniknąć skoków) do każdej godziny.
Najbardziej ekonomiczne (MostCostEffective) - 10. percentyl
Bardziej ekonomiczne (MoreCostEffective) — 25. percentyl