Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Servidor de métricas es un origen escalable y eficaz de métricas de recursos de contenedor para canalizaciones de escalado automático integradas de Kubernetes. Con Azure Kubernetes Service (AKS), el escalado automático vertical de pods está habilitado para el servidor de métricas. El servidor de métricas se usa normalmente en otros complementos de Kubernetes, como Escalador automático horizontal de pods.
El escalador automático vertical de pods (VPA) le permite ajustar el límite de recursos cuando el servidor de métricas experimenta restricciones constantes de recursos de CPU y memoria.
Antes de empezar
El clúster de AKS ejecuta la versión 1.24 y posteriores de Kubernetes.
Limitación del servidor de métricas
Si la velocidad de limitación del servidor de métricas es alta y el uso de memoria de sus dos pods está desequilibrado, esto indica que el servidor de métricas requiere más recursos que los valores predeterminados especificados.
Para actualizar los valores de coeficiente, cree un archivo ConfigMap en el espacio de nombres de superposición kube-system para invalidar los valores de la especificación del servidor de métricas. Realice los siguientes pasos para actualizar el servidor de métricas.
Cree un archivo ConfigMap denominado metrics-server-config.yaml y cópielo en el siguiente manifiesto.
apiVersion: v1 kind: ConfigMap metadata: name: metrics-server-config namespace: kube-system labels: kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: EnsureExists data: NannyConfiguration: |- apiVersion: nannyconfig/v1alpha1 kind: NannyConfiguration baseCPU: 100m cpuPerNode: 1m baseMemory: 100Mi memoryPerNode: 8Mi
En este ejemplo de ConfigMap, el límite de recursos y la solicitud cambian a lo siguiente:
- CPU: (100+1n) millicore
- Memoria: (100+8n) mebibyte
Donde n es el número de nodos.
Cree el archivo ConfigMap mediante el comando kubectl apply y especifique el nombre de su manifiesto de YAML:
kubectl apply -f metrics-server-config.yaml
Reiniciar los pods del servidor de métricas. Hay dos pods del servidor de métricas y el siguiente comando los elimina todos.
kubectl -n kube-system delete po -l k8s-app=metrics-server
Para comprobar que los recursos actualizados surtirán efecto, ejecute el siguiente comando para revisar el registro de VPA del servidor de métricas.
kubectl -n kube-system logs metrics-server-pod-name -c metrics-server-vpa
El siguiente ejemplo de salida es similar a los resultados que muestran la configuración de limitación actualizada que se aplicó.
ERROR: logging before flag.Parse: I0315 23:12:33.956112 1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server] ERROR: logging before flag.Parse: I0315 23:12:33.956159 1 pod_nanny.go:69] Version: 1.8.14 ERROR: logging before flag.Parse: I0315 23:12:33.956171 1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-545d8b77b7-5nqq9, container: metrics-server. ERROR: logging before flag.Parse: I0315 23:12:33.956175 1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi ERROR: logging before flag.Parse: I0315 23:12:33.957441 1 pod_nanny.go:116] cpu: 100m, extra_cpu: 1m, memory: 100Mi, extra_memory: 8Mi ERROR: logging before flag.Parse: I0315 23:12:33.957456 1 pod_nanny.go:145] Resources: [{Base:{i:{value:100 scale:-3} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value:0 scale:-3} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:104857600 scale:0} d:{Dec:<nil>} s:100Mi Format:BinarySI} ExtraPerNode:{i:{value:0 scale:0} d:{Dec:<nil>} s: Format:BinarySI} Name:memory
Tenga cuidado con baseCPU, cpuPerNode, baseMemory y memoryPerNode, ya que AKS no valida ConfigMap. Como práctica recomendada, aumente el valor gradualmente para evitar el consumo innecesario de recursos. Supervise de forma proactiva el uso de recursos al actualizar o crear el archivo ConfigMap. Un gran número de solicitudes de recursos podría afectar negativamente al nodo.
Configuración manual del uso de recursos del servidor de métricas
El VPA del servidor de métricas ajusta el uso de recursos por el número de nodos. Si el clúster se escala o reduce verticalmente con frecuencia, el servidor de métricas puede reiniciarse con frecuencia. En este caso, puede omitir el VPA y controlar manualmente su uso de los recursos. Este método para configurar el VPA no se realizará además de los pasos descritos en la sección anterior.
Si desea omitir el VPA para métricas de servidor y controlar manualmente su uso de recursos, realice los pasos siguientes.
Cree un archivo ConfigMap denominado metrics-server-config.yaml y cópielo en el siguiente manifiesto.
apiVersion: v1 kind: ConfigMap metadata: name: metrics-server-config namespace: kube-system labels: kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: EnsureExists data: NannyConfiguration: |- apiVersion: nannyconfig/v1alpha1 kind: NannyConfiguration baseCPU: 100m cpuPerNode: 0m baseMemory: 100Mi memoryPerNode: 0Mi
En este ejemplo de ConfigMap, este cambia el límite de recursos y la solicitud a lo siguiente:
- cpu: 100 milinúcleos
- memoria: 100 mebibyte
Cambiar el número de nodos no desencadena el escalado automático.
Cree el archivo ConfigMap mediante el comando kubectl apply y especifique el nombre de su manifiesto de YAML:
kubectl apply -f metrics-server-config.yaml
Reiniciar los pods del servidor de métricas. Hay dos pods del servidor de métricas y el siguiente comando los elimina todos.
kubectl -n kube-system delete po -l k8s-app=metrics-server
Para comprobar que los recursos actualizados surtirán efecto, ejecute el siguiente comando para revisar el registro de VPA del servidor de métricas.
kubectl -n kube-system logs metrics-server-pod-name -c metrics-server-vpa
El siguiente ejemplo de salida es similar a los resultados que muestran la configuración de limitación actualizada que se aplicó.
ERROR: logging before flag.Parse: I0315 23:12:33.956112 1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server] ERROR: logging before flag.Parse: I0315 23:12:33.956159 1 pod_nanny.go:69] Version: 1.8.14 ERROR: logging before flag.Parse: I0315 23:12:33.956171 1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-545d8b77b7-5nqq9, container: metrics-server. ERROR: logging before flag.Parse: I0315 23:12:33.956175 1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi ERROR: logging before flag.Parse: I0315 23:12:33.957441 1 pod_nanny.go:116] cpu: 100m, extra_cpu: 0m, memory: 100Mi, extra_memory: 0Mi ERROR: logging before flag.Parse: I0315 23:12:33.957456 1 pod_nanny.go:145] Resources: [{Base:{i:{value:100 scale:-3} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value:0 scale:-3} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:104857600 scale:0} d:{Dec:<nil>} s:100Mi Format:BinarySI} ExtraPerNode:{i:{value:0 scale:0} d:{Dec:<nil>} s: Format:BinarySI} Name:memory}]
Solución de problemas
Si usa el siguiente configmap, no se aplican las personalizaciones del VPA del servidor de métricas. Necesita agregar una unidad para
baseCPU
.apiVersion: v1 kind: ConfigMap metadata: name: metrics-server-config namespace: kube-system labels: kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: EnsureExists data: NannyConfiguration: |- apiVersion: nannyconfig/v1alpha1 kind: NannyConfiguration baseCPU: 100 cpuPerNode: 1m baseMemory: 100Mi memoryPerNode: 8Mi
El siguiente ejemplo de salida es similar a los resultados que muestran la configuración de limitación actualizada que se aplica.
ERROR: logging before flag.Parse: I0316 23:32:08.383389 1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server] ERROR: logging before flag.Parse: I0316 23:32:08.383430 1 pod_nanny.go:69] Version: 1.8.14 ERROR: logging before flag.Parse: I0316 23:32:08.383441 1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-7d78876589-hcrff, container: metrics-server. ERROR: logging before flag.Parse: I0316 23:32:08.383446 1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi ERROR: logging before flag.Parse: I0316 23:32:08.384554 1 pod_nanny.go:192] Unable to decode Nanny Configuration from config map, using default parameters ERROR: logging before flag.Parse: I0316 23:32:08.384565 1 pod_nanny.go:116] cpu: 44m, extra_cpu: 0.5m, memory: 51Mi, extra_memory: 4Mi ERROR: logging before flag.Parse: I0316 23:32:08.384589 1 pod_nanny.go:145] Resources: [{Base:{i:{value:44 scale:-3} d:{Dec:<nil>} s:44m Format:DecimalSI} ExtraPerNode:{i:{value:5 scale:-4} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:53477376 scale:0} d:{Dec:<nil>} s:51Mi Format:BinarySI} ExtraPerNode:{i:{value:4194304 scale:0} d:{Dec:<nil>} s:4Mi Format:BinarySI} Name:memory}]
Para los clústeres de Kubernetes versión 1.23 y posteriores, el servidor de métricas tiene un podDisruptionBudget. Garantiza que el número de pods disponibles del servidor de métricas sea al menos uno. Si obtiene algo parecido a esto después de ejecutar
kubectl -n kube-system get po
, es posible que el uso de recursos personalizado sea pequeño. Aumente los valores de los coeficientes para resolverlo.metrics-server-679b886d4-pxwdf 1/2 CrashLoopBackOff 6 (36s ago) 6m33s metrics-server-679b886d4-svxxx 1/2 CrashLoopBackOff 6 (54s ago) 6m33s metrics-server-7d78876589-hcrff 2/2 Running 0 37m
Pasos siguientes
El servidor de métricas es un componente de la canalización de métricas principales. Para obtener más información, consulte Diseño de la API del servidor de métricas.
Azure Kubernetes Service