En esta página, se explica cómo puedes reducir los recursos que consumen los complementos del clúster de Google Kubernetes Engine (GKE). Usa estas técnicas en clústeres pequeños, como clústeres con tres o menos nodos o que usen tipos de máquinas con recursos limitados.
Descripción general
Además de la carga de trabajo, los nodos del clúster ejecutan varios complementos que integran el nodo en el plano de control del clúster y proporcionan otra funcionalidad. Por lo tanto, existe una diferencia entre los recursos totales de un nodo y los recursos disponibles para la carga de trabajo. Obtén más información sobre la arquitectura del clúster en GKE.
Las configuraciones predeterminadas de estos complementos son adecuadas para los clústeres comunes, pero puedes optimizar el uso de recursos de los complementos en función de la configuración de tu clúster particular. También puedes inhabilitar algunos complementos que no son necesarios para tu caso práctico.
La optimización es muy útil para los clústeres con recursos de procesamiento limitados, por ejemplo, los clústeres con un solo nodo o muy pocos, o los que se ejecutan en tipos de máquinas de bajo costo. Puedes usar un clúster pequeño para probar GKE o experimentar con características nuevas.
Configura complementos
Puedes configurar cada complemento individual para reducir el impacto en los recursos del nodo.
Los complementos proporcionan visibilidad y depuración a tu clúster. Por ejemplo, si inhabilitas la supervisión en un clúster que ejecuta cargas de trabajo de producción, será más difícil depurar los problemas.
Cloud Logging
Cloud Logging recopila, procesa y almacena automáticamente tu contenedor y los registros del sistema. Para configurar Cloud Logging, consulta Configura la asistencia de Monitoring y Logging de un clúster nuevo.
Puedes inhabilitar Cloud Logging por completo o dejarlo habilitado, pero debes restringir su uso de recursos con la optimización del complemento Fluentd.
Visualiza los registros cuando Cloud Logging está inhabilitado
Aunque Cloud Logging esté inhabilitado, puedes ver las entradas de registro recientes.
Para ver los registros de un Pod específico, ejecuta el siguiente comando:
kubectl logs -f POD_NAME
La opción -f
transmite los registros.
Para ver los registros de todos los Pods que coinciden con un selector, ejecuta el siguiente comando:
kubectl logs -l SELECTOR
Reemplaza SELECTOR
por un selector de implementación (por ejemplo, 'app=frontend'
).
Optimiza Fluentd
Si decides no inhabilitar el registro, puedes restringir los recursos que usa el registro mediante la optimización de Fluentd.
Fluentd recopila registros de tus nodos y los envía a Google Cloud's operations suite. El agente Fluentd se implementa en tu clúster con DaemonSet para que una instancia del agente se ejecute en cada nodo del clúster. Para las aplicaciones que escriben una gran cantidad de datos de registro, Fluentd puede requerir recursos adicionales.
Puedes optimizar la asignación de los recursos de Fluentd mediante la creación de una política de escalamiento específica para tus requisitos. Una política de escalamiento define los requisitos y límites de recursos del pod. Consulta la documentación de Kubernetes sobre cómo administrar recursos para contenedores a fin de obtener información del programador de Kubernetes maneja las solicitudes y límites de recursos. Para obtener más información sobre cómo los requisitos y los límites de los recursos afectan la calidad de servicio (QoS), consulta la sección sobre calidad de servicio de los recursos en Kubernetes.
Amplía la sección siguiente a fin de obtener instrucciones para medir el uso de los recursos de Fluentd y cómo escribir una política de escalamiento personalizada con estos valores.
Cloud Monitoring
Te recomendamos que uses Cloud Monitoring. Sin embargo, puedes inhabilitar la supervisión para recuperar algunos recursos.
A fin de obtener más información sobre Cloud Monitoring, consulta la descripción general de las operaciones en la nube para GKE.
Si usas el complemento del escalador automático horizontal de Pod junto con las métricas personalizadas de Cloud Monitoring, debes inhabilitar Horizontal Pod Autoscaler en el clúster antes de que puedas inhabilitar Cloud Monitoring por completo.
Si deseas configurar Cloud Monitoring, consulta Configura la asistencia de Monitoring y Logging para un clúster nuevo.
Ajuste de escala automático horizontal de pod
El ajuste de escala automático horizontal de Pod ajusta las réplicas de las implementaciones en función de las métricas, como el uso de CPU o memoria. Si no necesitas el Ajuste de escala automático horizontal de Pods y ya inhabilitaste Cloud Monitoring, también puedes inhabilitar el Ajuste de escala automático horizontal de Pods.
Para inhabilitar el complemento de Ajuste de escala automático horizontal de Pods, ejecuta el siguiente comando:
gcloud container clusters update CLUSTER_NAME \
--update-addons=HorizontalPodAutoscaling=DISABLED
Para habilitar el complemento de ajuste de escala automático horizontal de Pod, ejecuta el siguiente comando:
gcloud container clusters update CLUSTER_NAME \
--update-addons=HorizontalPodAutoscaling=ENABLED
DNS de Kubernetes (kube-dns)
El DNS de Kubernetes (kube-dns) programa una implementación y un servicio de DNS en tu clúster, y los Pods en tu clúster usan el servicio de kube-dns para resolver los nombres de DNS en direcciones IP de los servicios, Pods, nodos y direcciones IP públicas. kube-dns resuelve los nombres de dominio público como example.com
y los nombres de servicios como my-svc.my-namespace.svc.cluster-domain.example
. Obtén más información en Descubrimiento de servicios y DNS.
De forma predeterminada, GKE ejecuta varias réplicas de kube-dns para una alta disponibilidad. Si no necesitas un DNS con alta disponibilidad, puedes conservar los recursos mediante la reducción de la cantidad de réplicas de kube-dns. Si no necesitas la resolución de nombres de DNS, puedes inhabilitar kube-dns por completo. Si inhabilitas kube-dns, puedes configurar un DNS externo en los Pods.
Para obtener más información, consulta Usa kube-dns.
Reduce la replicación de kube-dns
Para desactivar kube-dns autoscaler
y reducir kube-dns a la réplica 1
, ejecuta los siguientes comandos:
kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system
Para habilitar kube-dns autoscaler
, ejecuta el siguiente comando:
kubectl scale --replicas=1 deployment/kube-dns-autoscaler --namespace=kube-system
A fin de obtener un control más preciso del ajuste de escala automático, puedes activar los parámetros de ajuste de escala automático.
Para obtener más información sobre cómo configurar un Deployment personalizado de kube-dns, consulta Configura un Deployment personalizado de kube-dns.
Inhabilita kube-dns
Puedes inhabilitar kube-dns completamente. kube-dns es necesario para las cargas de trabajo que resuelven el nombre de DNS de cualquier servicio dependiente. Esto incluye los nombres de dominio público y los nombres de los servicios del clúster.
Para inhabilitar kube-dns, ejecuta los siguientes comandos:
kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=0 deployment/kube-dns --namespace=kube-system
Para habilitar kube-dns, ejecuta el siguiente comando y reemplaza --replicas=1
por la cantidad de réplicas que desees:
kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system
Para habilitar el ajuste de escala automático de kube-dns, ejecuta el siguiente comando:
kubectl scale --replicas=1 deployment/kube-dns-autoscaler --namespace=kube-system
Búsquedas de DNS externo sin kube-dns
Puedes configurar tus pods para usar una resolución de nombre de dominio externo con el servicio de DNS que elijas. En el siguiente ejemplo, se muestra un pod que usa un DNS público de Google para las consultas de nombre externo:
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: dns-example
spec:
containers:
- name: test
image: nginx
dnsPolicy: "None"
dnsConfig:
nameservers:
- 8.8.8.8
- 8.8.4.4
Descubrimiento de servicios sin kube-dns
Puedes usar las variables de entorno de servicio como alternativa para el descubrimiento de servicios basados en DNS. Cuando se crea un pod, se crean de forma automática las variables de entorno de servicio para cada servicio en el mismo espacio de nombres que el pod. Esto es más restringido que kube-dns porque las variables de entorno solo se crean para los servicios que se crearon antes que el pod.
¿Qué sigue?
- Expón los servicios en los nodos de Kubernetes con kubehost.
- Obtén información para escalar aplicaciones implementadas en GKE.