Cuando los proxies de Waypoint manejan grandes volúmenes de tráfico L7 o requieren un cierre ordenado para conexiones de larga duración, las asignaciones predeterminadas de recursos pueden resultar insuficientes. Service Mesh (ASM) permite personalizar las solicitudes de CPU y memoria, los límites de escalado del Horizontal Pod Autoscaler (HPA) y el comportamiento de drenado del proxy para los proxies de Waypoint desplegados mediante la Gateway API en modo Ambient.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
La versión 1.2.1 o posterior del componente Gateway API instalada en su clúster
Funcionamiento
Para personalizar un Waypoint, defina la configuración deseada en un ConfigMap y haga referencia a este desde el recurso Gateway. ASM lee el ConfigMap y combina sus modificaciones con la configuración predeterminada de recursos mediante un Strategic Merge Patch. El ConfigMap solo necesita contener los campos que desea cambiar; ASM se encarga de la fusión y crea o actualiza el Deployment y el HPA de Waypoint según corresponda.
El ConfigMap admite tres secciones de configuración:
|
Sección |
Propósito |
|
|
Configuración de HPA, como los recuentos mínimo y máximo de réplicas |
|
|
Configuración a nivel de pod, como las solicitudes de recursos del contenedor y el tiempo de cierre ordenado |
|
|
Configuración de ejecución del proxy de Istio, como la duración del drenado y el comportamiento de terminación |
Crear un ConfigMap con configuración personalizada
El ConfigMap debe encontrarse en el mismo namespace que el recurso Gateway al que configura.
-
Guarde el siguiente contenido como
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 -
Aplique el ConfigMap.
kubectl apply -f gw-options.yaml
Referencia de parámetros del ConfigMap
Parámetros de HPA (data.horizontalPodAutoscaler)
|
Parámetro |
Descripción |
|
|
Número mínimo de réplicas de pods de Waypoint. En el ejemplo anterior, se establece en |
|
|
Número máximo de réplicas de pods de Waypoint. En el ejemplo anterior, se establece en |
No establezca replicas en la sección de Deployment cuando HPA esté habilitado. El controlador de HPA gestiona los recuentos de réplicas automáticamente, y un valor estático de replicas entra en conflicto con las decisiones de escalado de HPA.
Parámetros de Deployment (data.deployment)
|
Parámetro |
Descripción |
|
|
Nombre del contenedor. Establézcalo en |
|
|
Solicitud de CPU para el proxy de Waypoint. En el ejemplo anterior, se establece en |
|
|
Tiempo máximo (en segundos) que Kubernetes espera antes de finalizar forzosamente un pod durante el cierre. En el ejemplo anterior, se establece en |
Parámetros de ProxyConfig (data.proxyConfig)
|
Parámetro |
Descripción |
|
|
Duración durante la cual el proxy de Envoy drena las conexiones activas en el proceso de cierre. En el ejemplo anterior, se establece en |
|
|
Duración máxima que el proxy espera después de iniciar el cierre ordenado antes de terminar las conexiones restantes. En el ejemplo anterior, se establece en |
Los tres parámetros de tiempo deben cumplir con la siguiente restricción de orden: terminationGracePeriodSeconds > terminationDrainDuration > drainDuration. Si no se respeta esta restricción, las conexiones podrían finalizarse antes de que el proxy termine el drenado, lo que provocaría fallos en las solicitudes.
Vincular el ConfigMap al recurso Gateway
Después de crear el ConfigMap, haga referencia a él desde el recurso Gateway mediante el campo infrastructure.parametersRef.
-
Guarde el siguiente contenido como
gateway.yaml. El bloqueinfrastructure.parametersRefhace referencia al ConfigMapgw-options. ASM lee esta referencia y aplica los valores del ConfigMap al Deployment y al HPA de Waypoint.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 -
Aplique el recurso Gateway.
kubectl apply -f gateway.yaml
Comprobar la configuración
Después de aplicar ambos recursos, compruebe que ASM haya combinado correctamente la configuración del ConfigMap en el Deployment y el HPA de Waypoint.
-
Revise el Deployment de Waypoint. En la salida, confirme que:
El contenedor
istio-proxytengacpu: 1000mbajoresources.requests.terminationGracePeriodSecondssea120.
kubectl get deployment waypoint -n default -o yaml -
Revise el HPA. Confirme que
MINPODSsea2yMAXPODSsea2para el HPA de Waypoint.kubectl get hpa -n default