Configurare le metriche personalizzate per gli aggiornamenti in sequenza in set di scalabilità di macchine virtuali (anteprima)
Nota
Le metriche personalizzate per gli aggiornamenti in sequenza in set di scalabilità di macchine virtuali sono attualmente in anteprima. Le anteprime vengono rese disponibili a condizione che l'utente accetti le condizioni supplementari per l'utilizzo. Alcuni aspetti di queste funzionalità potrebbero subire modifiche prima della disponibilità a livello generale.
Le metriche personalizzate per gli aggiornamenti in sequenza consentono di usare l'estensione per l'integrità dell'applicazione per generare metriche personalizzate nel set di scalabilità di macchine virtuali. Queste metriche personalizzate possono essere usate per indicare al set di scalabilità l'ordine in cui devono essere aggiornate le macchine virtuali quando viene attivato un aggiornamento in sequenza. Le metriche personalizzate possono anche informare il set di scalabilità quando un aggiornamento deve essere ignorato in un'istanza specifica. In questo modo è possibile avere un maggiore controllo sull'ordinamento e sul processo di aggiornamento stesso.
Le metriche personalizzate possono essere usate in combinazione con altre funzionalità di aggiornamento in sequenza, ad esempio aggiornamenti automatici del sistema operativo, aggiornamenti automatici delle estensioni e aggiornamenti in sequenza di MaxSurge.
Requisiti
- Quando si usano metriche personalizzate per gli aggiornamenti in sequenza in set di scalabilità di macchine virtuali, il set di scalabilità deve usare anche l'estensione integrità dell'applicazione con stati di integrità avanzati per segnalare l'ordinamento delle fasi o ignorare le informazioni sull'aggiornamento. Gli aggiornamenti delle metriche personalizzate non sono supportati quando si usa l'estensione dell'integrità dell'applicazione con stati binari.
- L'estensione dell'integrità dell'applicazione deve essere configurata per usare HTTP o HTTPS per ricevere le informazioni sulle metriche personalizzate. TCP non è supportato per l'integrazione con metriche personalizzate per gli aggiornamenti in sequenza.
Concetti
Ordinamento delle fasi
Una fase è un costrutto di raggruppamento per le macchine virtuali. Ogni fase viene determinata impostando i metadati generati dall'estensione dell'integrità dell'applicazione tramite la customMetrics
proprietà . Il set di scalabilità di macchine virtuali accetta le informazioni recuperate dalle metriche personalizzate e le usa per inserire le macchine virtuali nelle fasi assegnate. All'interno di ogni fase, il set di scalabilità di macchine virtuali assegnerà anche batch di aggiornamento. Ogni batch viene configurato usando i criteri di aggiornamento in sequenza che prendono in considerazione i domini di aggiornamento (UD), i domini di errore (FD) e le informazioni sulla zona di ogni macchina virtuale.
Quando viene avviato un aggiornamento in sequenza, le macchine virtuali vengono inserite nelle fasi designate. Gli aggiornamenti in più fasi vengono eseguiti in ordine numerico di sequenza. Macchine virtuali in tutti i batch all'interno di una fase verranno completati prima di passare alla fase successiva. Se non viene ricevuto alcun ordinamento delle fasi per una macchina virtuale, il set di scalabilità lo inserisce nell'ultima fase
Set di scalabilità a livello di area
Set di scalabilità di zona
Per specificare il numero di fase a cui deve essere associata la macchina virtuale, usare il phaseOrderingNumber
parametro .
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"PhaseOrderingNumber\": 0 } }"
}
Ignorare l'aggiornamento
Ignorare la funzionalità di aggiornamento consente di omettere una singola istanza da un aggiornamento durante l'aggiornamento in sequenza. Questa operazione è simile all'uso della protezione delle istanze, ma può essere integrata in modo più semplice nel flusso di lavoro di aggiornamento in sequenza e nelle applicazioni a livello di istanza. Analogamente all'ordinamento delle fasi, le informazioni di aggiornamento ignorate vengono passate al set di scalabilità di macchine virtuali tramite l'estensione dell'integrità dell'applicazione e le impostazioni delle metriche personalizzate. Quando viene attivato l'aggiornamento in sequenza, il set di scalabilità di macchine virtuali controlla la risposta delle metriche personalizzate delle estensioni di integrità dell'applicazione e se skip upgrade è impostato su true, l'istanza non è inclusa nell'aggiornamento in sequenza.
Per ignorare un aggiornamento in una macchina virtuale, usare il SkipUpgrade
parametro . Questo indica all'aggiornamento in sequenza di ignorare questa macchina virtuale durante l'esecuzione degli aggiornamenti.
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": true} }"
}
Ignorare l'aggiornamento e l'ordine di fase possono essere usati insieme:
{
“applicationHealthState”: “Healthy”,
“customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": false, \"PhaseOrderingNumber\": 0 } }"
}
Configurare l'estensione di integrità dell'applicazione
L'estensione dell'integrità dell'applicazione richiede una richiesta HTTP o HTTPS con una porta o un percorso di richiesta associato. I probe TCP sono supportati quando si usa l'estensione dell'integrità dell'applicazione, ma non possono impostare ApplicationHealthState
tramite il corpo della risposta del probe e non possono essere usati con aggiornamenti in sequenza con metriche personalizzate.
{
"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
}
}
}
]
}
}
Nome | Valore/Esempio | Tipo di dati |
---|---|---|
protocollo | http oppure https |
string |
port | Facoltativo quando il protocollo è http o https |
int |
requestPath | Obbligatorio quando si usa http o https |
string |
intervalInSeconds | Facoltativo, il valore predefinito è 5 secondi. Questa impostazione è l'intervallo tra ogni probe di integrità. Ad esempio, se intervalInSeconds == 5, un probe viene inviato all'endpoint dell'applicazione locale una volta ogni 5 secondi. | int |
numberOfProbes | Facoltativa, il valore predefinito è 1. Questa impostazione è il numero di probe consecutivi necessari per modificare lo stato di integrità. Ad esempio, se numberOfProbles == 3, sono necessari 3 segnali "Integri" consecutivi per modificare lo stato di integrità da "Unhealthy"/"Unknown" allo stato "Integro". Lo stesso requisito si applica per modificare lo stato di integrità in stato "Non integro" o "Sconosciuto". | int |
gracePeriod | Facoltativo, valore predefinito = intervalInSeconds * numberOfProbes ; il periodo di tolleranza massimo è di 7200 secondi |
int |
Installare l'estensione di integrità dell'applicazione
Usare az vmss extension set per aggiungere l'estensione integrità dell'applicazione alla definizione del modello del set di scalabilità.
Creare un file JSON denominato extensions.json
con le impostazioni desiderate.
{
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"gracePeriod": <healthExtensionGracePeriod>
}
Applicare l'estensione di integrità dell'applicazione.
az vmss extension set \
--name ApplicationHealthLinux \
--publisher Microsoft.ManagedServices \
--version 2.0 \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings ./extension.json
Aggiornare le macchine virtuali nel set di scalabilità. Questo passaggio è obbligatorio solo se il set di scalabilità usa un criterio di aggiornamento manuale. Per altre informazioni sui criteri di aggiornamento, vedere Criteri di aggiornamento per set di scalabilità di macchine virtuali
az vmss update-instances \
--resource-group myResourceGroup \
--name myScaleSet \
--instance-ids "*"
Configurare la risposta dell'estensione dell'integrità dell'applicazione
La configurazione della risposta alle metriche personalizzate può essere eseguita in molti modi diversi. Può essere integrato in applicazioni esistenti, aggiornato dinamicamente e usato insieme a varie funzioni per fornire un output in base a una situazione specifica.
Esempio 1: ordine di fase
Questa applicazione di esempio può essere installata in una macchina virtuale in un set di scalabilità a cui generare la fase appartiene.
#!/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
Esempio 2: Ignorare l'aggiornamento
Questa applicazione di esempio può essere installata in una macchina virtuale in un set di scalabilità per generare che l'istanza deve essere omessa dall'aggiornamento in sequenza imminente.
#!/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
Esempio 3: Ordine combinato delle fasi e ignorare l'aggiornamento
Questa applicazione di esempio include l'ordine delle fasi e ignora i parametri di aggiornamento nella risposta delle metriche personalizzate.
#!/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
Per altri esempi di configurazione delle risposte, vedere Esempi di integrità dell'applicazione
Passaggi successivi
Informazioni su come eseguire aggiornamenti manuali nei set di scalabilità di macchine virtuali.