Condividi tramite


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 areaDiagramma che mostra un diagramma generale di cosa accade quando si usano gli aggiornamenti in più fasi in un set di scalabilità a livello di area.

Set di scalabilità di zonaDiagramma che mostra un diagramma generale di cosa accade quando si usano gli aggiornamenti in fase n in un 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.

Diagramma che mostra un diagramma generale di cosa accade quando si usa ignora l'aggiornamento in un set di scalabilità di zona.

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.