Konfigurowanie metryk niestandardowych na potrzeby uaktualnień stopniowego w zestawach skalowania maszyn wirtualnych (wersja zapoznawcza)
Uwaga
Metryki niestandardowe dotyczące uaktualnień stopniowego w zestawach skalowania maszyn wirtualnych są obecnie dostępne w wersji zapoznawczej. Wersje zapoznawcze są udostępniane pod warunkiem udzielenia zgody na dodatkowe warunki użytkowania. Niektóre cechy tych funkcji mogą ulec zmianie, zanim stanie się ona ogólnie dostępna.
Metryki niestandardowe dla uaktualnień stopniowego umożliwiają korzystanie z rozszerzenia kondycji aplikacji w celu emitowania niestandardowych metryk do zestawu skalowania maszyn wirtualnych. Te metryki niestandardowe mogą służyć do określania kolejności aktualizacji maszyn wirtualnych po wyzwoleniu uaktualnienia stopniowego. Metryki niestandardowe mogą również informować zestaw skalowania, gdy uaktualnienie powinno zostać pominięte w konkretnym wystąpieniu. Dzięki temu możesz mieć większą kontrolę nad kolejnością i samym procesem aktualizacji.
Metryki niestandardowe mogą być używane w połączeniu z innymi funkcjami uaktualniania stopniowego, takimi jak automatyczne uaktualnienia systemu operacyjnego, automatyczne uaktualnienia rozszerzeń i uaktualnienia stopniowe MaxSurge.
Wymagania
- W przypadku używania metryk niestandardowych do uaktualniania stopniowego w zestawach skalowania maszyn wirtualnych zestaw skalowania musi również używać rozszerzenia kondycji aplikacji z zaawansowanymi stanami kondycji, aby zgłaszać kolejność faz lub pomijać informacje o uaktualnianiu. Uaktualnienia metryk niestandardowych nie są obsługiwane w przypadku używania rozszerzenia kondycji aplikacji ze stanami binarnymi.
- Aby otrzymywać informacje o metrykach niestandardowych, należy skonfigurować rozszerzenie kondycji aplikacji do używania protokołu HTTP lub HTTPS. Protokół TCP nie jest obsługiwany w przypadku integracji z niestandardowymi metrykami w przypadku uaktualnień stopniowego.
Pojęcia
Porządkowanie faz
Faza to konstrukcja grupowania maszyn wirtualnych. Każda faza jest określana przez ustawienie metadanych emitowanych z rozszerzenia kondycji aplikacji za pośrednictwem customMetrics
właściwości . Zestaw skalowania maszyn wirtualnych pobiera informacje z metryk niestandardowych i używa ich do umieszczania maszyn wirtualnych w przypisanych fazach. W każdej fazie zestaw skalowania maszyn wirtualnych przypisze również partie uaktualniania. Każda partia jest konfigurowana przy użyciu zasad uaktualniania stopniowego, które uwzględniają domeny aktualizacji (UD), domeny błędów (FD) i informacje o strefie każdej maszyny wirtualnej.
Po zainicjowaniu uaktualnienia stopniowego maszyny wirtualne są umieszczane w wyznaczonych fazach. Uaktualnienia fazowe są wykonywane w kolejności sekwencji liczbowej. Maszyny wirtualne we wszystkich partiach w fazie zostaną ukończone przed przejściem do następnej fazy. Jeśli dla maszyny wirtualnej nie zostanie odebrane żadne kolejność faz, zestaw skalowania umieści go w ostatniej fazie
Regionalny zestaw skalowania
Zestaw skalowania strefowego
Aby określić numer fazy, z jaką maszyna wirtualna powinna być skojarzona, użyj phaseOrderingNumber
parametru .
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"PhaseOrderingNumber\": 0 } }"
}
Pomiń uaktualnianie
Pomijanie funkcji uaktualniania umożliwia pominięcie pojedynczego wystąpienia z uaktualnienia podczas uaktualniania stopniowego. Jest to podobne do korzystania z ochrony wystąpienia, ale może bardziej bezproblemowo zintegrować się z przepływem pracy uaktualniania stopniowego i aplikacjami na poziomie wystąpienia. Podobnie jak w przypadku porządkowania faz, informacje o pomiń uaktualniania są przekazywane do zestawu skalowania maszyn wirtualnych za pośrednictwem rozszerzenia kondycji aplikacji i ustawień metryk niestandardowych. Po wyzwoleniu uaktualnienia stopniowego zestaw skalowania maszyn wirtualnych sprawdza odpowiedź niestandardowych metryk rozszerzeń kondycji aplikacji, a jeśli pomiń uaktualnienie ma wartość true, wystąpienie nie jest uwzględniane w uaktualnieniu stopniowego.
Aby pominąć uaktualnienie na maszynie wirtualnej, użyj SkipUpgrade
parametru . Informuje to uaktualnienie stopniowe, aby pominąć tę maszynę wirtualną podczas przeprowadzania uaktualnień.
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": true} }"
}
Pomiń kolejność uaktualniania i fazy można również używać razem:
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": false, \"PhaseOrderingNumber\": 0 } }"
}
Konfigurowanie rozszerzenia kondycji aplikacji
Rozszerzenie kondycji aplikacji wymaga żądania HTTP lub HTTPS ze skojarzonym portem lub ścieżką żądania. Sondy TCP są obsługiwane w przypadku korzystania z rozszerzenia kondycji aplikacji, ale nie można ustawić ApplicationHealthState
wartości za pośrednictwem treści odpowiedzi sondy i nie można ich używać z uaktualnieniami kroczącymi z metrykami niestandardowymi.
{
"extensionProfile" : {
"extensions" : [
{
"name": "HealthExtension",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "1.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"intervalInSeconds": 5,
"numberOfProbes": 1
}
}
}
]
}
}
Nazwisko | Wartość / przykład | Typ danych |
---|---|---|
protokół | http lub https |
string |
port | Opcjonalne, gdy protokół jest http lub https |
int |
requestPath | Obowiązkowe w przypadku używania http lub https |
string |
intervalInSeconds | Opcjonalnie wartość domyślna to 5 sekund. To ustawienie to interwał między poszczególnymi sondami kondycji. Jeśli na przykład intervalInSeconds == 5, sonda jest wysyłana do lokalnego punktu końcowego aplikacji co 5 sekund. | int |
numberOfProbes | Opcjonalnie wartość domyślna to 1. To ustawienie jest liczbą kolejnych sond wymaganych do zmiany stanu kondycji. Jeśli na przykład numberOfProbles == 3, potrzebujesz 3 kolejnych sygnałów "W dobrej kondycji", aby zmienić stan kondycji z "W złej kondycji"/"Nieznany" na stan "W dobrej kondycji". To samo wymaganie dotyczy zmiany stanu kondycji na stan "W złej kondycji" lub "Nieznany". | int |
gracePeriod | Opcjonalne, domyślne = intervalInSeconds * numberOfProbes ; maksymalny okres prolongaty wynosi 7200 sekund |
int |
Instalowanie rozszerzenia kondycji aplikacji
Użyj polecenia az vmss extension set , aby dodać rozszerzenie kondycji aplikacji do definicji modelu zestawu skalowania.
Utwórz plik JSON o nazwie extensions.json
z żądanymi ustawieniami.
{
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"gracePeriod": <healthExtensionGracePeriod>
}
Zastosuj rozszerzenie kondycji aplikacji.
az vmss extension set \
--name ApplicationHealthLinux \
--publisher Microsoft.ManagedServices \
--version 2.0 \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings ./extension.json
Uaktualnij maszyny wirtualne w zestawie skalowania. Ten krok jest wymagany tylko wtedy, gdy zestaw skalowania korzysta z zasad ręcznego uaktualniania. Aby uzyskać więcej informacji na temat zasad uaktualniania, zobacz temat Upgrade policies for Virtual Machine Scale Sets (Zasady uaktualniania dla zestawów skalowania maszyn wirtualnych)
az vmss update-instances \
--resource-group myResourceGroup \
--name myScaleSet \
--instance-ids "*"
Konfigurowanie odpowiedzi rozszerzenia kondycji aplikacji
Konfigurowanie odpowiedzi metryk niestandardowych można wykonać na wiele różnych sposobów. Można ją zintegrować z istniejącymi aplikacjami, dynamicznie aktualizować i używać razem z różnymi funkcjami, aby zapewnić dane wyjściowe na podstawie określonej sytuacji.
Przykład 1. Kolejność faz
Tę przykładową aplikację można zainstalować na maszynie wirtualnej w zestawie skalowania w celu emitowania fazy.
#!/bin/bash
# Open firewall port (replace with your firewall rules as needed)
sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
# Create Python HTTP server for responding with JSON
cat <<EOF > server.py
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
# Function to generate the JSON response
def generate_response_json():
return json.dumps({
"ApplicationHealthState": "Healthy",
"CustomMetrics": {
"RollingUpgrade": {
"PhaseOrderingNumber": 0
}
}
})
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
# Respond with HTTP 200 and JSON content
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
response = generate_response_json()
self.wfile.write(response.encode('utf-8'))
# Set up the HTTP server
def run(server_class=HTTPServer, handler_class=RequestHandler):
server_address = ('localhost', 8000)
httpd = server_class(server_address, handler_class)
print('Starting server on port 8000...')
httpd.serve_forever()
if __name__ == "__main__":
run()
EOF
# Run the server
python3 server.py
Przykład 2. Pomiń uaktualnianie
Tę przykładową aplikację można zainstalować na maszynie wirtualnej w zestawie skalowania, aby emitować, że wystąpienie powinno zostać pominięte podczas nadchodzącego uaktualnienia stopniowego.
#!/bin/bash
# Open firewall port (replace with your firewall rules as needed)
sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
# Create Python HTTP server for responding with JSON
cat <<EOF > server.py
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
# Function to generate the JSON response
def generate_response_json():
return json.dumps({
"ApplicationHealthState": "Healthy",
"CustomMetrics": {
"RollingUpgrade": {
"SkipUpgrade": "true"
}
}
})
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
# Respond with HTTP 200 and JSON content
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
response = generate_response_json()
self.wfile.write(response.encode('utf-8'))
# Set up the HTTP server
def run(server_class=HTTPServer, handler_class=RequestHandler):
server_address = ('localhost', 8000)
httpd = server_class(server_address, handler_class)
print('Starting server on port 8000...')
httpd.serve_forever()
if __name__ == "__main__":
run()
EOF
# Run the server
python3 server.py
Przykład 3. Łączna kolejność faz i pomijanie uaktualniania
Ta przykładowa aplikacja zawiera kolejność faz i pomijanie parametrów uaktualniania do odpowiedzi metryk niestandardowych.
#!/bin/bash
# Open firewall port (replace with your firewall rules as needed)
sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
# Create Python HTTP server for responding with JSON
cat <<EOF > server.py
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
# Function to generate the JSON response
def generate_response_json():
return json.dumps({
"ApplicationHealthState": "Healthy",
"CustomMetrics": {
"RollingUpgrade": {
"PhaseOrderingNumber": 1,
"SkipUpgrade": "false"
}
}
})
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
# Respond with HTTP 200 and JSON content
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
response = generate_response_json()
self.wfile.write(response.encode('utf-8'))
# Set up the HTTP server
def run(server_class=HTTPServer, handler_class=RequestHandler):
server_address = ('localhost', 8000)
httpd = server_class(server_address, handler_class)
print('Starting server on port 8000...')
httpd.serve_forever()
if __name__ == "__main__":
run()
EOF
# Run the server
python3 server.py
Aby uzyskać więcej przykładów konfiguracji odpowiedzi, zobacz przykłady kondycji aplikacji
Następne kroki
Dowiedz się, jak przeprowadzić ręczne uaktualnienia w zestawach skalowania maszyn wirtualnych .