Lorsque les proxies Waypoint gèrent un volume élevé de trafic L7 ou nécessitent un arrêt gracieux pour les connexions persistantes, les allocations de ressources par défaut peuvent s'avérer insuffisantes. Service Mesh (ASM) vous permet de personnaliser les requêtes de CPU et de mémoire, les limites de mise à l'échelle du Horizontal Pod Autoscaler (HPA) ainsi que le comportement de vidage (drain) des proxies Waypoint déployés via l'API Gateway en mode Ambient.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Installé la version 1.2.1 ou ultérieure du composant Gateway API dans votre cluster
Fonctionnement
Pour personnaliser un Waypoint, définissez les paramètres cibles dans une ConfigMap et référencez-la depuis la ressource Gateway. ASM lit la ConfigMap et fusionne vos remplacements avec la configuration de ressources par défaut à l'aide d'un Strategic Merge Patch. Votre ConfigMap ne doit contenir que les champs que vous souhaitez modifier ; ASM gère la fusion et crée ou met à jour le déploiement Waypoint et le HPA en conséquence.
La ConfigMap prend en charge trois sections de configuration :
| Section | Objectif |
|---|---|
data.horizontalPodAutoscaler |
Paramètres HPA tels que les nombres minimal et maximal de réplicas |
data.deployment |
Paramètres au niveau du pod, tels que les requêtes de ressources du conteneur et la durée de l'arrêt gracieux |
data.proxyConfig |
Paramètres d'exécution du proxy Istio, tels que la durée de vidage et le comportement de terminaison |
Créer une ConfigMap avec des paramètres personnalisés
La ConfigMap doit se trouver dans le même namespace que la ressource Gateway qu'elle configure.
-
Enregistrez le contenu suivant sous le nom
gw-options.yaml.apiVersion: v1 kind: ConfigMap metadata: name: gw-options data: horizontalPodAutoscaler: | spec: minReplicas: 2 maxReplicas: 2 deployment: | spec: # Do not configure replicas when HPA is enabled. # replicas: 4 template: spec: containers: - name: istio-proxy resources: requests: cpu: 1000m # The maximum wait time before a pod goes offline. terminationGracePeriodSeconds: 120 proxyConfig: | # The proxy drain duration. drainDuration: 30s # The maximum duration for the proxy to stop draining. Ensure that terminationGracePeriodSeconds > terminationDrainDuration > drainDuration. terminationDrainDuration: 60s -
Appliquez la ConfigMap.
kubectl apply -f gw-options.yaml
Référence des paramètres de la ConfigMap
Paramètres HPA (data.horizontalPodAutoscaler)
| Paramètre | Description |
|---|---|
spec.minReplicas |
Nombre minimal de réplicas de pod Waypoint. Dans l'exemple précédent, la valeur est 2. |
spec.maxReplicas |
Nombre maximal de réplicas de pod Waypoint. Dans l'exemple précédent, la valeur est 2 (nombre de réplicas fixe). |
Ne définissez pas replicas dans la section Deployment lorsque le HPA est activé. Le contrôleur HPA gère automatiquement le nombre de réplicas et une valeur statique pour replicas entre en conflit avec les décisions de mise à l'échelle du HPA.
Paramètres de déploiement (data.deployment)
| Paramètre | Description |
|---|---|
spec.template.spec.containers[].name |
Nom du conteneur. La valeur est istio-proxy pour le conteneur de proxy Waypoint. |
spec.template.spec.containers[].resources.requests.cpu |
Requête de CPU pour le proxy Waypoint. Dans l'exemple précédent, la valeur est 1000m (1 vCPU). Augmentez cette valeur pour les namespaces présentant un trafic L7 élevé. |
spec.template.spec.terminationGracePeriodSeconds |
Durée maximale (en secondes) pendant laquelle Kubernetes attend avant de forcer la terminaison d'un pod lors de l'arrêt. Dans l'exemple précédent, la valeur est 120. |
Paramètres ProxyConfig (data.proxyConfig)
| Paramètre | Description |
|---|---|
drainDuration |
Durée pendant laquelle le proxy Envoy vide les connexions actives lors de l'arrêt. Dans l'exemple précédent, la valeur est 30s. |
terminationDrainDuration |
Durée maximale pendant laquelle le proxy attend après avoir initié un arrêt gracieux avant de terminer les connexions restantes. Dans l'exemple précédent, la valeur est 60s. |
Les trois paramètres temporels doivent respecter l'ordre suivant : terminationGracePeriodSeconds > terminationDrainDuration > drainDuration. Si cette contrainte n'est pas respectée, les connexions peuvent être interrompues avant que le proxy ne termine son vidage, ce qui entraîne des échecs de requête.
Lier la ConfigMap à la ressource Gateway
Après avoir créé la ConfigMap, référencez-la depuis la ressource Gateway via le champ infrastructure.parametersRef.
-
Enregistrez le contenu suivant sous le nom
gateway.yaml. Le blocinfrastructure.parametersReffait référence à la ConfigMapgw-options. ASM lit cette référence et applique les valeurs de la ConfigMap au déploiement Waypoint et au HPA.apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: waypoint namespace: default spec: infrastructure: parametersRef: group: "" kind: ConfigMap name: gw-options gatewayClassName: istio-waypoint listeners: - allowedRoutes: namespaces: from: Same name: mesh port: 15008 protocol: HBONE -
Appliquez la ressource Gateway.
kubectl apply -f gateway.yaml
Vérifier la configuration
Après avoir appliqué les deux ressources, vérifiez qu'ASM a bien fusionné les paramètres de la ConfigMap dans le déploiement Waypoint et le HPA.
-
Vérifiez le déploiement Waypoint. Dans la sortie, confirmez que :
Le conteneur
istio-proxyaffichecpu: 1000msousresources.requests.terminationGracePeriodSecondsest défini sur120.
kubectl get deployment waypoint -n default -o yaml -
Vérifiez le HPA. Confirmez que
MINPODSest2et queMAXPODSest2pour le HPA Waypoint.kubectl get hpa -n default