Partager via


Configurez des mesures personnalisées pour les mises à niveau progressives sur Microsoft Azure Virtual Machine Scale Sets (aperçu)

Remarque

Les mesures personnalisées pour les mises à niveau progressives sur Microsoft Azure Virtual Machine Scale Sets sont actuellement en version préliminaire. Les préversions sont à votre disposition, à condition que vous acceptiez les conditions d’utilisation supplémentaires. Certains aspects de ces fonctionnalités sont susceptibles d’être modifiés avant la mise à disposition générale.

Les mesures personnalisées pour les mises à niveau progressives vous permettent d'utiliser l'extension d'intégrité de l'application pour émettre des mesures personnalisées sur votre ensemble de machines virtuelles. Ces mesures personnalisées peuvent être utilisées pour indiquer à l’ensemble d’échelle l’ordre dans lequel les machines virtuelles doivent être mises à jour lorsqu’une mise à niveau progressive est déclenchée. Les mesures personnalisées peuvent également informer votre groupe de mise à l'échelle du moment où une mise à niveau doit être ignorée sur une instance spécifique. Cela vous permet d'avoir plus de contrôle sur la commande et le processus de mise à jour lui-même.

Les métriques personnalisées peuvent être utilisées en combinaison avec d'autres fonctionnalités de mise à niveau progressive telles que les mises à niveau automatiques du système d'exploitation, les mises à niveau automatiques des extensions et les mises à niveau progressives MaxSurge.

Spécifications

  • Lors de l'utilisation de mesures personnalisées pour les mises à niveau progressives sur Microsoft Azure Virtual Machine Scale Sets, l'ensemble de machines virtuelles identiques doit également utiliser l'extension d'intégrité de l'application avec des états d'intégrité enrichis pour signaler l'ordre des phases ou ignorer les informations de mise à niveau. Les mises à niveau des métriques personnalisées ne sont pas prises en charge lors de l’utilisation de l’extension d’intégrité de l’application avec des états binaires.
  • L'extension d'état de l'application doit être configurée pour utiliser HTTP ou HTTPS afin de recevoir les informations de métriques personnalisées. TCP n'est pas pris en charge pour l'intégration avec des métriques personnalisées pour les mises à niveau progressives.

Concepts

Ordre des phases

Une phase est une construction de regroupement pour les machines virtuelles. Chaque phase est déterminée en définissant les métadonnées émises par l'extension de santé de l'application via la propriété customMetrics. L'ensemble d'échelle de machine virtuelle prend les informations récupérées à partir des mesures personnalisées et les utilise pour placer les machines virtuelles dans leurs phases attribuées. Au sein de chaque phase, l’ensemble de machines virtuelles évolutives attribuera également des lots de mise à niveau. Chaque lot est configuré à l’aide de la politique de mise à niveau continue qui prend en compte les domaines de mise à jour (UD), les domaines d’erreur (FD) et les informations de zone de chaque machine virtuelle.

Lorsqu'une mise à niveau progressive est lancée, les machines virtuelles sont placées dans leurs phases désignées. Les mises à niveau progressives sont effectuées dans l’ordre de séquence numérique. Les Machines virtuelles Microsoft Azure de tous les lots d’une phase seront terminées avant de passer à la phase suivante. Si aucun ordre de phase n'est reçu pour une machine virtuelle, le groupe de mise à l'échelle la placera dans la dernière phase

Ensemble d'échelle régionaleDiagramme qui montre un diagramme de haut niveau de ce qui se passe lors de l'utilisation de mises à niveau en n phases à l'échelle régionale.

Ensemble d'échelles zonalesDiagramme qui montre un diagramme de haut niveau de ce qui se passe lors de l'utilisation de mises à niveau en n phases sur un ensemble d'échelles zonales.

Pour spécifier le numéro de phase auquel la machine virtuelle doit être associée, utilisez le paramètre phaseOrderingNumber.

{
     “applicationHealthState”: “Healthy”,
      “customMetrics”: "{ \"rollingUpgrade\": { \"PhaseOrderingNumber\": 0 } }"
}

Ignorez la mise à niveau

La fonctionnalité d'ignorer la mise à niveau permet d'omettre une instance individuelle d'une mise à niveau pendant la mise à niveau progressive. Cela est similaire à l’utilisation de la protection d’instance, mais peut s’intégrer de manière plus transparente dans le flux de travail de mise à niveau continue et dans les applications au niveau de l’instance. Similairement à l'ordre de phase, les informations de mise à niveau ignorées sont transmises au groupe de mise à l'échelle de la machine virtuelle via l'extension d'intégrité de l'application et les paramètres de mesures personnalisées. Lorsque la mise à niveau progressive est déclenchée, le groupe de machines virtuelles identiques vérifie la réponse des mesures personnalisées des extensions d'intégrité de l'application et si l'option Ignorer la mise à niveau est définie sur vrai, l'instance n'est pas incluse dans la mise à niveau progressive.

Diagramme qui montre un diagramme de haut niveau de ce qui se passe lors de l'utilisation de la mise à niveau par saut sur un ensemble d'échelles zonales.

Pour ignorer une mise à niveau sur une machine virtuelle, utilisez le paramètre SkipUpgrade. Cela indique à la mise à niveau progressive d'ignorer cette machine virtuelle lors de l'exécution des mises à niveau.

{
     “applicationHealthState”: “Healthy”,
      “customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": true} }"
}

La mise à niveau par saut et l'ordre des phases peuvent également être utilisés ensemble :

{
     “applicationHealthState”: “Healthy”,
      “customMetrics”: "{ \"rollingUpgrade\": { \"SkipUpgrade\": false, \"PhaseOrderingNumber\": 0 } }"
}

Configurez l’extension de santé de l’application

L'extension d'état de l'application nécessite une requête HTTP ou HTTPS avec un port ou un chemin de requête associé. Les sondes TCP sont prises en charge lors de l'utilisation de l'extension d'intégrité de l'application, mais ne peuvent pas être définies le ApplicationHealthState via le corps de réponse de la sonde et ne peuvent pas être utilisées avec des mises à niveau progressives avec des métriques personnalisées.

{
  "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
          }
        }
      }
    ]
  }
}
Nom Valeur/Exemple Type de données
protocol http ou https string
port Facultatif lorsque le protocole est http ou https int
requestPath Obligatoire lors de l'utilisation http ou https string
intervalInSeconds Facultatif. La valeur par défaut est 5 secondes. Ce paramètre correspond à l’intervalle entre chaque sonde d’intégrité. Par exemple, si intervalInSeconds == 5, une sonde est envoyée au point de terminaison d’application local toutes les 5 secondes. int
numberOfProbes Facultatif. La valeur par défaut est 1. Ce paramètre représente le nombre de sondes d’intégrité consécutives nécessaires pour que l’état d’intégrité change. Par exemple, si numberOfProbles == 3, vous avez besoin de 3 signaux « Sain » consécutifs pour changer l'état de santé de « Mauvais »/« Inconnu » à l'état « Sain ». La même exigence s’applique à la modification de l’état d’intégrité en état « Non sain » ou « Inconnu ». int
gracePeriod Facultatif. Valeur par défaut = intervalInSeconds * numberOfProbes. La période de grâce maximale s’élève à 7 200 secondes. int

Installez l'extension de santé de l'application

Utilisez az vmss extension set pour ajouter l’extension d’intégrité de l’application à la définition du modèle d’ensemble d’échelle.

Créez un fichier json appelé extensions.json avec les paramètres souhaités.

{
  "protocol": "<protocol>",
  "port": <port>,
  "requestPath": "</requestPath>",
  "gracePeriod": <healthExtensionGracePeriod>
}

Appliquez l’extension de santé de l’application.

az vmss extension set \
  --name ApplicationHealthLinux \
  --publisher Microsoft.ManagedServices \
  --version 2.0 \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings ./extension.json

Mettez à niveau les machines virtuelles du groupe de mise à l’échelle. Cette étape n’est requise que si votre groupe de mise à niveau utilise une stratégie de mise à niveau manuelle. Pour plus d'informations sur les stratégies de mise à niveau, consultez les stratégies de mise à niveau pour les groupes de Microsoft Azure Virtual Machine Scale Sets

az vmss update-instances \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --instance-ids "*"

Configurez la réponse de l’extension d’intégrité de l’application

La configuration de la réponse des métriques personnalisées peut être réalisée de différentes manières. Il peut être intégré dans des applications existantes, mis à jour de manière dynamique et utilisé avec diverses fonctions pour fournir un résultat basé sur une situation spécifique.

Exemple 1 : ordre des phases

Cet exemple d'application peut être installé sur une machine virtuelle dans un ensemble de mise à l'échelle pour émettre la phase à laquelle appartient.

#!/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

Exemple 2 : ignorer la mise à niveau

Cet exemple d'application peut être installé sur une machine virtuelle dans un ensemble de mise à l'échelle pour indiquer que l'instance doit être omise de la prochaine mise à niveau progressive.

#!/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

Exemple 3 : Ordre de phase combiné et mise à niveau par saut

Cet exemple d'application inclut l'ordre des phases et les paramètres de mise à niveau dans la réponse des métriques personnalisées.

#!/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

Pour plus d’exemples de configuration de réponse, consultez les exemples d’état de santé des applications

Étapes suivantes

Découvrez comment effectuer des mises à niveau manuelles sur Virtual Machine Scale Sets.