Lors d'une réduction de capacité (scale-in) ou d'un redémarrage progressif d'une passerelle d'entrée ASM, la suppression de certains pods peut entraîner une légère perte de trafic. Activez l'arrêt gracieux pour éviter ce phénomène : les connexions existantes continuent de transmettre des données pendant une période définie après la suppression d'un pod.
Prérequis
Vous disposez d'une instance ASM Enterprise Edition ou Ultimate Edition. Pour plus d'informations, consultez Créer une instance ASM.
Étape 1 : Activer l'arrêt gracieux
Passerelle existante
À partir d'ASM 1,26, toute modification de la configuration de l'arrêt gracieux redémarre la passerelle. Effectuez cette opération aux heures creuses pour minimiser l'impact.
Console
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Ingress Gateway, cliquez sur le nom de la passerelle cible.
Sur la page Gateway Details, cliquez sur Advanced Options. Cliquez sur l'icône
à droite de SLB graceful offline, cochez SLB graceful offline, configurez le paramètre Connection timeout (seconds), puis cliquez sur Submit.
YAML (avant 1,26)
Ajoutez l'annotation serviceAnnotations au fichier YAML de la passerelle.
apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
name: ingressgateway
namespace: istio-system
spec:
gatewayType: ingress
serviceAnnotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on' # Enables connection draining for the load balancer, which implements graceful shutdown.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10' # The connection draining timeout period, in seconds. Valid values: 10 to 30.
...
YAML (1,26 et versions ultérieures)
Ajoutez l'annotation annotations au fichier YAML de la passerelle.
apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
annotations:
# For CLB and NLB gateways, the valid range is [10, 890].
# For ClusterIP and NodePort gateways, there is no upper limit.
asm.alibabacloud.com/gateway-drain-timeout-seconds: "30"
name: ingressgateway
namespace: istio-system
...
Nouvelle passerelle
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Ingress Gateway, cliquez sur Create.
-
Sur la page Create, sélectionnez un Cluster, définissez le CLB instance type sur Internet Access, choisissez une spécification d'équilibreur de charge dans la section Create SLB Instance, définissez le nombre d'Gateway instances sur 10 et conservez les valeurs par défaut pour les autres paramètres.
Pour plus d'informations sur les paramètres, consultez Créer une passerelle d'entrée.
-
Cliquez sur Advanced Options, cochez SLB graceful offline, définissez le Connection timeout (seconds), puis cliquez sur Create.
Paramètre
Description
SLB graceful offline
Si cette option est activée, l'instance Classic Load Balancer (CLB) vide progressivement les connexions existantes lors du redémarrage progressif du pod de passerelle. Ce processus limite l'impact sur le service lors des modifications de configuration et des mises à niveau.
Connection timeout (seconds)
Après avoir retiré le pod de passerelle, l'instance CLB attend la durée d'expiration configurée avant de fermer la connexion. Ce délai permet au pod de traiter les connexions en cours.
À partir d'ASM 1,26, la durée d'expiration peut atteindre 890 secondes.
Étape 2 : Déployer un exemple d'application
Connectez-vous au cluster ACK avec kubectl. Pour plus d'informations, consultez Obtenir le fichier kubeconfig d'un cluster et utiliser kubectl pour se connecter au cluster.
-
Créez un fichier nommé httpbin.yaml contenant le code suivant.
-
Déployez l'application httpbin.
kubectl apply -f httpbin.yaml -n default
Étape 3 : Créer un VirtualService et une Gateway
-
Créez un VirtualService.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez . Sur la page affichée, cliquez sur Create from YAML.
-
Sur la page Create, sélectionnez un Namespaces et un Scenario Template, collez la configuration YAML suivante, puis cliquez sur Create.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: httpbin namespace: default spec: gateways: - httpbin-gateway hosts: - '*' http: - route: - destination: host: httpbin port: number: 8000
-
Créez une Gateway.
Sur la page des détails de l'instance ASM, sélectionnez dans le volet de navigation de gauche. Sur la page affichée, cliquez sur Create from YAML.
-
Sur la page Create, sélectionnez un Namespaces et un Scenario Template, collez la configuration YAML suivante, puis cliquez sur Create.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: httpbin-gateway namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
-
Vérifiez la configuration de routage.
Récupérez l'adresse de la passerelle d'entrée ASM. Pour plus d'informations, consultez Créer une passerelle d'entrée.
-
Dans la barre d'adresse de votre navigateur, saisissez http://<adresse de la passerelle d'entrée ASM>.
La page d'accueil de httpbin.org s'affiche, avec le titre httpbin.org et la description A simple HTTP Request & Response Service. Le VirtualService et la Gateway sont correctement configurés.
Étape 4 : Vérifier l'effet de l'arrêt gracieux
Téléchargez et installez la version de l'outil de test de charge léger hey compatible avec votre système d'exploitation. Pour plus d'informations, consultez hey.
-
Réduisez la capacité (scale-in) de la passerelle d'entrée ASM.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Ingress Gateway, localisez la passerelle cible et cliquez sur View YAML dans la colonne Actions.
Dans la boîte de dialogue Edit, définissez la valeur du paramètre
replicaCountsur 1 et cliquez sur OK.
-
Exécutez la commande suivante pour envoyer 50 000 requêtes à l'application httpbin avec une concurrence de 200, puis comparez les pertes de trafic avant et après l'activation de l'arrêt gracieux.
hey -c 200 -n 50000 -disable-keepalive http://<ASM ingress gateway address>/Type
Analyse des résultats
Arrêt gracieux désactivé
Le résultat suivant est renvoyé :
Status code distribution: [200] 49747 responses Error distribution: [253] Get "http://47.55.2xx.xx": dial tcp 47.55.2xx.xx:80: connect: connection refusedSeules 49 747 des 50 000 requêtes ont renvoyé un code d'état 200, indiquant une légère perte de trafic.
Arrêt gracieux activé
Le résultat suivant est renvoyé :
............ Status code distribution: [200] 50000 responsesLes 50 000 requêtes ont renvoyé un code d'état 200, confirmant l'absence de perte de trafic.