Reduce el uso de recursos del complemento en clústeres más pequeños


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 las solicitudes 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 una implementación personalizada de kube-dns, consulta Configura una implementación personalizada 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?