Konfigurieren von benutzerdefinierten Metriken für rollierende Upgrades auf Virtual Machine Scale Sets (Vorschau)
Hinweis
Benutzerdefinierte Metriken für rollierende Upgrades auf Virtual Machine Scale Sets befinden sich derzeit in der Vorschau. Vorschauversionen werden Ihnen zur Verfügung gestellt, wenn Sie die zusätzlichen Nutzungsbedingungen akzeptieren. Einige Aspekte dieser Features werden bis zur allgemeinen Verfügbarkeit unter Umständen noch geändert.
Mit benutzerdefinierten Metriken für rollierende Upgrades können Sie die Anwendungsintegritätserweiterung verwenden, um benutzerdefinierte Metriken an Ihre Virtual Machine Scale Sets zu senden. Diese benutzerdefinierten Metriken können verwendet werden, um dem Skalierungssatz mitzuteilen, in welcher Reihenfolge virtuelle Computer aktualisiert werden sollen, wenn ein rollierendes Upgrade ausgelöst wird. Die benutzerdefinierten Metriken können Ihren Skalierungssatz auch informieren, wenn ein Upgrade für eine bestimmte Instanz übersprungen werden soll. Auf diese Weise können Sie mehr Kontrolle über die Reihenfolge und den Aktualisierungsprozess selbst haben.
Benutzerdefinierte Metriken können in Kombination mit anderen rollierenden Upgradefunktionen verwendet werden, z. B. automatische Betriebssystemupgrades, automatische Erweiterungsupgrades und rollierende MaxSurge-Upgrades.
Anforderungen
- Wenn Sie benutzerdefinierte Metriken für rollierende Upgrades auf Virtual Machine Scale Sets verwenden, muss der Skalierungssatz auch die Anwendungsintegritätserweiterung mit umfangreichen Integritätszuständen verwenden, um phasenweise Sortierung zu melden oder Upgradeinformationen zu überspringen. Benutzerdefinierte Metrikupgrades werden bei Verwendung der Anwendungsintegritätserweiterung mit binären Zuständen nicht unterstützt.
- Die Anwendungsintegritätserweiterung muss für die Verwendung von HTTP oder HTTPS eingerichtet werden, um die benutzerdefinierten Metrikinformationen zu erhalten. TCP wird für die Integration mit benutzerdefinierten Metriken für rollierende Upgrades nicht unterstützt.
Konzepte
Phasenweise Sortierung
Eine Phase ist ein Gruppierungskonstrukt für virtuelle Computer. Jede Phase wird durch Festlegen von Metadaten bestimmt, die von der Anwendungsintegritätserweiterung über die customMetrics
-Eigenschaft ausgegeben werden. Das Virtual Machine Scale Set verwendet die Informationen, die aus den benutzerdefinierten Metriken abgerufen werden, und verwendet diese, um virtuelle Computer in ihre zugewiesenen Phasen zu platzieren. Innerhalb jeder Phase weist das Virtual Machine Scale Set auch Upgradebatches zu. Jeder Batch wird mithilfe der rollierenden Upgraderichtlinie konfiguriert, welche die Updatedomänen (UD), Fehlerdomänen (FD) und Zoneninformationen der einzelnen virtuellen Computer berücksichtigt.
Wenn ein rollierendes Upgrade initiiert wird, werden die virtuellen Computer in ihre festgelegten Phasen versetzt. Die Phasenupgrades werden in numerischer Reihenfolge durchgeführt. Virtuelle Computer in allen Batches innerhalb einer Phase werden abgeschlossen, bevor Sie mit der nächsten Phase fortfahren. Wenn keine Phasensortierung für einen virtuellen Computer empfangen wird, platziert der Skalierungssatz ihn in der letzten Phase
Regionale Skalierungsgruppe
Zonale Skalierungsgruppe
Um die Phasennummer anzugeben, welcher der virtuelle Computer zugeordnet werden soll, verwenden Sie den Parameter phaseOrderingNumber
.
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"PhaseOrderingNumber\": 0 } }"
}
Upgrade überspringen
Die Funktion „Upgrade überspringen“ ermöglicht es einer einzelnen Instanz, während des rollierenden Upgrades ein Upgrade auszulassen. Dies ähnelt der Verwendung des Instanzschutzes, kann aber nahtloser in den rollierenden Upgradeworkflow und in Anwendungen auf Instanzebene integriert werden. Ähnlich wie bei der Phasenbestellung werden die Upgradeinformationen über die Anwendungsintegritätserweiterung und benutzerdefinierte Metrikeinstellungen an das Virtual Machine Scale Set übergeben. Wenn das rollierende Upgrade ausgelöst wird, überprüft das Virtual Machine Scale Set die Antwort der benutzerdefinierten Metriken der Anwendungsintegritätserweiterungen, und wenn „Upgrade überspringen“ auf „true“ festgelegt ist, ist die Instanz nicht im rollierenden Upgrade enthalten.
Wenn Sie ein Upgrade auf einem virtuellen Computer überspringen möchten, verwenden Sie den Parameter SkipUpgrade
. Dies weist das rollierende Upgrade an, diesen virtuellen Computer zu überspringen, wenn die Upgrades ausgeführt werden.
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": true} }"
}
Upgrade überspringen und phasenweise Sortierung können auch zusammen verwendet werden:
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": false, \"PhaseOrderingNumber\": 0 } }"
}
Konfigurieren der Anwendungsintegritätserweiterung
Für die Anwendungsintegritätserweiterung ist eine HTTP- oder HTTPS-Anforderung mit einem zugeordneten Port oder Anforderungspfad erforderlich. TCP-Prüfpunkte werden bei Verwendung der Anwendungsintegritätserweiterung unterstützt, können die ApplicationHealthState
jedoch nicht über den Prüfpunktantworttext festlegen und können nicht bei rollierenden Upgrades mit benutzerdefinierten Metriken verwendet werden.
{
"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
}
}
}
]
}
}
Name | Wert/Beispiel | Datentyp |
---|---|---|
protocol | http oder https |
Zeichenfolge |
port | Optional, wenn das Protokoll http oder https |
int |
requestPath | Obligatorisch bei Verwendung von http oder https |
Zeichenfolge |
intervalInSeconds | Optional, der Standardwert ist 5 Sekunden. Mit dieser Einstellung wird das Intervall zwischen den einzelnen Integritätstests festgelegt. Wenn beispielsweise intervalInSeconds == 5 ist, wird ein Test einmal alle 5 Sekunden an den lokalen Anwendungsendpunkt gesendet. | INT |
numberOfProbes | Optional, der Standardwert ist 1. Diese Einstellung ist die Anzahl der aufeinanderfolgenden Tests, die für die Änderung des Integritätsstatus erforderlich sind. Wenn beispielsweise numberOfProbles == 3 ist, benötigen Sie 3 aufeinander folgende „Fehlerfrei“-Signale, um den Integritätsstatus von „Fehlerhaft“/„Unbekannt“ in den Zustand „Fehlerfrei“ zu ändern. Die gleiche Anforderung gilt für die Änderung des Integritätsstatus in den Zustand „Fehlerhaft“ oder „Unbekannt“. | INT |
gracePeriod | Optional, Standard = intervalInSeconds * numberOfProbes ; die maximale Toleranzperiode beträgt 7.200 Sekunden |
int |
Installieren der Anwendungsintegritätserweiterung
Verwenden Sie az vmss extension set, um die Anwendungsintegritätserweiterung der Skalierungsgruppen-Modelldefinition hinzuzufügen.
Erstellen Sie eine JSON-Datei namens extensions.json
mit den gewünschten Einstellungen.
{
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"gracePeriod": <healthExtensionGracePeriod>
}
Wenden Sie die Anwendungsintegritätserweiterung an.
az vmss extension set \
--name ApplicationHealthLinux \
--publisher Microsoft.ManagedServices \
--version 2.0 \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings ./extension.json
Upgraden Sie die virtuellen Computer im Skalierungssatz. Dieser Schritt ist nur erforderlich, wenn Ihr Skalierungssatz eine manuelle Upgraderichtlinie verwendet. Weitere Informationen zu Upgraderichtlinien finden Sie unter Upgraderichtlinien für Virtual Machine Scale Sets
az vmss update-instances \
--resource-group myResourceGroup \
--name myScaleSet \
--instance-ids "*"
Konfigurieren der Antwort auf die Anwendungsintegritätserweiterung
Das Konfigurieren der Antwort auf benutzerdefinierte Metriken kann auf viele verschiedene Arten erfolgen. Es kann in vorhandene Anwendungen integriert, dynamisch aktualisiert und entlang verschiedener Funktionen verwendet werden, um eine Ausgabe basierend auf einer bestimmten Situation bereitzustellen.
Beispiel 1: Phasenweise Sortierung
Diese Beispielanwendung kann auf einem virtuellen Computer in einem Skalierungssatz installiert werden, um die Phase auszugeben, zu der er gehört.
#!/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
Beispiel 2: Upgrade überspringen
Diese Beispielanwendung kann auf einem virtuellen Computer in einem Skalierungssatz installiert werden, um auszugeben, dass die Instanz in dem bevorstehenden rollierenden Upgrade weggelassen werden soll.
#!/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
Beispiel 3: Kombinierte phasenweise Sortierung und Überspringen des Upgrades
Diese Beispielanwendung enthält Parameter für phasenweise Sortierung und Überspringen von Upgrades in der Antwort der benutzerdefinierten Metriken.
#!/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
Weitere Beispiele für die Antwortkonfiguration finden Sie unter Anwendungsintegritätsbeispiele
Nächste Schritte
Durchführen manueller Upgrades in Virtual Machine Scale Sets