Red de conocimiento informático - Material del sitio web - Expansión horizontal de CoreDns basada en API de indicador personalizado

Expansión horizontal de CoreDns basada en API de indicador personalizado

A partir de Kubernetes 1.8, Kubernetes proporciona métricas de uso de recursos, como el uso de CPU y memoria de un contenedor, a través de la API de métricas. Los usuarios pueden acceder a estas métricas directamente, como usar el comando kubectl top, y los controladores en el clúster (como el Horizontal Pod Autoscaler) también pueden usar estas métricas para tomar decisiones.

La API de métricas le permite obtener la cantidad de recursos que utiliza actualmente un nodo o pod determinado. Esta API no almacena valores de métricas, por lo que no hay forma de obtener la cantidad de recursos utilizados por un nodo determinado hace 10 minutos.

La API no es diferente de cualquier otra:

La API está definida en el repositorio k8s.io/metrics. Puede encontrar más información sobre la API allí.

Metrics Server implementa la API de Metrics.

Metrics Server es un agregador de datos de uso de recursos en todo el clúster. A partir de Kubernetes 1.8, se implementa de forma predeterminada como un objeto de implementación en clústeres creados por el script kube-up.sh. Si utiliza un método de instalación de Kubernetes diferente, puede implementarlo utilizando el archivo yamls de implementación introducido en Kubernetes 1.7 (consulte los detalles a continuación).

El servidor de métricas recopila información de métricas de la API de resumen expuesta por Kubelet en cada nodo.

La información de métricas se recopila a través del agregador Kubernetes de Metrics Server, introducido en Kubernetes 1.7, registrado con el servidor API maestro. Puede obtener más información sobre Metrics Server en la documentación de diseño.

custom-metrics-apiserver Esta API permite a los consumidores acceder a recursos de Kubernetes descritos por métricas arbitrarias. Si desea implementar este servicio API, este es un marco para implementar métricas personalizadas para Kubernetes.

El escalador automático de pods horizontal ajusta automáticamente los controladores de replicación, las implementaciones o los conjuntos de réplicas en función de la utilización de CPU observada (o en función de las métricas proporcionadas por otras aplicaciones si se admite la API de métricas personalizadas). El número de pods.

El escalador automático de pod horizontal se implementa como un recurso y controlador de API de Kubernetes. Los recursos determinan el comportamiento del controlador. El controlador ajusta periódicamente el controlador de réplica o la cantidad de réplicas en la implementación para hacer coincidir la utilización promedio de CPU observada con el objetivo especificado por el usuario.

El escalador automático de pod horizontal se implementa como un monitor periódico, con el período controlado por el indicador --horizontal-pod-autoscaler-sync-period del administrador del controlador (el valor predeterminado es 15 segundos).

Durante cada ciclo, el administrador del controlador consulta la utilización de recursos en función de las métricas especificadas en cada definición de HorizontalPodAutoscaler. El Administrador de controladores obtiene métricas de la API de métricas de recursos (para métricas de recursos por panel) o de la API de métricas personalizadas (para todas las demás métricas).

Tenga en cuenta que si los contenedores de algunos pods no tienen establecidas solicitudes de recursos asociadas, la utilización de CPU del pod no se definirá y el escalador automático no realizará ninguna acción en esta métrica. Para obtener más información sobre cómo funciona el algoritmo de escalador automático, consulte la sección Detalles del algoritmo a continuación.

El HorizontalPodAutoscaler descrito generalmente se agrega a partir de una serie de API (fetch metrics.k8s.io, custom.metrics.k8s.io y external.metrics.k8s.io). La API metrics.k8s.io generalmente se proporciona a través de Metrics Server y debe iniciarse por separado. Consulte el servidor de métricas para obtener instrucciones. HorizontalPodAutoscaler también puede obtener métricas directamente de Heapster (a partir de Kubernetes 1.11, no se recomienda obtener métricas de Heapster). Obtener métricas. Después de 11, CoreDns sirve como complemento dns predeterminado y proporciona la interfaz /metrics en el puerto 9153.

Esta vez, usaré coredns_dns_request_count_total {servidor, zona, proto, familia} para extender la costumbre de Kubernetes. API de métricas

. Adaptador de Prometheus (es decir, custom-metrics-apiserver) para eliminar el sufijo _total y marcar la métrica como coredns_dns_request_count

Obtener datos por segundo de la API personalizada Obtener el número total de consultas por segundo de la API de métricas personalizadas: < / p>

m representa milisegundos, por ejemplo, 911m representa 911 milisegundos por segundo

Cree un HPA que aumentará el número de réplicas de coredns cuando el número de solicitudes por segundo supere las 1000:

No todas las aplicaciones son adecuadas para el escalado elástico dependiendo de los indicadores de CPU y memoria para satisfacer la carga del sistema, y ​​no todas las aplicaciones son adecuadas para el escalado elástico dependiendo de los indicadores de CPU y memoria para satisfacer la carga del sistema. No todas las aplicaciones pueden escalar elásticamente según las métricas de CPU y memoria para satisfacer la carga del sistema. La mayoría de los backends de aplicaciones web necesitan escalar elásticamente en función de las solicitudes QPS por segundo para manejar el tráfico en ráfagas. Algunas aplicaciones ETL pueden desencadenar un escalado elástico de grupos de trabajos estableciendo la longitud de la cola de trabajos por encima de un cierto umbral.

Monitorear su aplicación a través de Prometheus y exponer métricas/métricas para el escalamiento elástico le permite ajustar su aplicación para manejar mejor las emergencias y garantizar una alta disponibilidad.

/coredns/coredns/tree/master/plugin/metrics

/kubernetes-incubator/metrics-server

/DirectXMan12/k8s-prometheus-adaptador

/coreos/prometheus-operador