Crea y personaliza un grupo de nodos

En esta página, se muestra cómo crear un grupo de nodos en GKE en AWS y cómo personalizar la configuración de tu nodo con un archivo de configuración.

Para crear un grupo de nodos, debes proporcionar los siguientes recursos:

  • El nombre de un clúster de AWS existente para crear el grupo de nodos en él
  • Un perfil de instancia de IAM para las VM del grupo de nodos
  • Una subred en la que se ejecutarán las VM del grupo de nodos

Si deseas tener acceso SSH a tus nodos, puedes crear un par de claves de EC2.

Esta página está destinada a los administradores de TI y operadores que desean configurar, supervisar y administrar la infraestructura de la nube. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas comunes de los usuarios de GKE.

Crea un grupo de nodos estándar

Una vez que estos recursos estén disponibles, puedes crear un grupo de nodos con este comando:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --instance-type INSTANCE_TYPE \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Reemplaza lo siguiente:

  • NODE_POOL_NAME: un nombre que eliges para el grupo de nodos.
  • CLUSTER_NAME: el nombre del clúster al que se conectará el grupo de nodos
  • INSTANCE_TYPE: el tipo de instancia de máquina de AWS deseado para este grupo de nodos, por ejemplo, m5.large
  • ROOT_VOLUME_SIZE: el tamaño deseado para el volumen raíz de cada nodo, en Gb.
  • NODEPOOL_PROFILE: el perfil de la instancia de IAM para las VM del grupo de nodos. Para obtener detalles sobre cómo actualizar un perfil de instancia de IAM, consulta Actualiza el perfil de instancia de IAM de AWS.
  • NODE_VERSION: es la versión de Kubernetes que se instalará en cada nodo en el grupo de nodos (p. ej., "1.32.4-gke.200")
  • MIN_NODES: la cantidad mínima de nodos que puede contener el grupo de nodos
  • MAX_NODES: la cantidad máxima de nodos que puede contener el grupo de nodos
  • MAX_PODS_PER_NODE: la cantidad máxima de Pods que se pueden crear en cualquier nodo único del grupo.
  • GOOGLE_CLOUD_LOCATION: el nombre de la ubicación de Google Cloud desde la que se administrará este grupo de nodos
  • NODEPOOL_SUBNET: el ID de la subred en la que se ejecutará el grupo de nodos.
    • No debe haber superposición entre los rangos de IP del Pod/Service del clúster y la red de la subred del grupo de nodos. Si deseas obtener más información sobre cómo seleccionar los rangos de IP de Pods y Services para tu clúster, consulta Selecciona rangos CIDR para tu clúster
    • Si esta subred está fuera del bloque CIDR principal de VPC, se necesitan algunos pasos adicionales. Para obtener más información, consulta los grupos de seguridad.
  • SSH_KEY_PAIR_NAME: el nombre del par de claves SSH de AWS creado para el acceso SSH (opcional)
  • CONFIG_KMS_KEY_ARN: el nombre del recurso de Amazon (ARN) de la clave de KMS de AWS que encripta los datos del usuario

Si está presente, el parámetro --tags aplica la etiqueta determinada a todos los nodos de tu grupo de nodos. En este ejemplo, se etiquetan todos los nodos del grupo con los nombres del clúster y el grupo de nodos al que pertenece el nodo.

Personaliza la configuración del sistema de nodos

Puedes personalizar la configuración de tu nodo mediante varios métodos. Por ejemplo, puedes especificar parámetros como el límite de CPU del Pod cuando creas un grupo de nodos.

Puedes usar una configuración del sistema de nodos a fin de especificar opciones de configuración personalizadas para el agente del nodo de Kubernetes (kubelet) y opciones de configuración del kernel de Linux de nivel bajo ( sysctl) en tus grupos de nodos.

Configura el agente kubelet

Para personalizar la configuración de los nodos con kubelet, usa Google Cloud CLI o Terraform.

gcloud

Puedes especificar parámetros de configuración personalizados para el agente del nodo de Kubernetes (kubelet) cuando creas tus grupos de nodos. Por ejemplo, para configurar kubelet para que use la política de administración de CPU estáticas, ejecuta el siguiente comando:

  gcloud container aws node-pools create POOL_NAME \
       --cluster CLUSTER_NAME \
       --location=LOCATION \
       --kubelet_config_cpu_manager_policy=static

Reemplaza lo siguiente:

  • POOL_NAME: Es el nombre de tu grupo de nodos.
  • CLUSTER_NAME: Es el nombre del clúster al que deseas agregar un grupo de nodos.
  • LOCATION: la zona o región de procesamiento del clúster.

Para obtener una lista completa de los campos que puedes agregar al comando anterior, consulta Opciones de configuración de Kubelet.

Terraform

Puedes obtener más información sobre Terraform en un entorno de AWS en la referencia del grupo de nodos de Terraform.

  1. Para configurar las variables de Terraform, incluye el siguiente bloque en el archivo variables.tf:

    variable "node_pool_kubelet_config_cpu_manager" {
      default     = "none"
    }
    
    variable "node_pool_kubelet_config_cpu_cfs_quota" {
      default     = "true"
    }
    
    variable "node_pool_kubelet_config_cpu_cfs_quota_period" {
      default     = "100ms"
    }
    
    variable "node_pool_kubelet_config_pod_pids_limit" {
      default     = -1
    }
    
  2. Agrega el siguiente bloque a la configuración de Terraform:

    resource "google_container_aws_node_pool" "NODE_POOL_RESOURCE_NAME" {
     provider           = google
     cluster            = CLUSTER_NAME
     name               = POOL_NAME
     subnet_id          = SUBNET_ID
     version            = CLUSTER_VERSION
     location           = CLUSTER_LOCATION
    
     kubelet_config {
       cpu_manager_policy = var.node_pool_kubelet_config_cpu_manager
       cpu_cfs_quota = var.node_pool_kubelet_config_cpu_cfs_quota
       cpu_cfs_quota_period = var.node_pool_kubelet_config_cpu_cfs_quota_period
       pod_pids_limit = var.node_pool_kubelet_config_pod_pids_limit
     }
    }
    

    Reemplaza lo siguiente:

    • NODE_POOL_RESOURCE_NAME: El nombre del recurso del grupo de nodos en la plantilla de Terraform.
    • CLUSTER_NAME: es el nombre del clúster existente.
    • POOL_NAME: El nombre del grupo de nodos que se personalizará.
    • SUBNET_ID: Es la subred asignada al grupo de nodos.
    • CLUSTER_VERSION: Es la versión del plano de control y los nodos del clúster de GKE en AWS.
    • CLUSTER_LOCATION: La región o zona de Compute Engine del clúster.

Configura la utilidad sysctl

Para personalizar la configuración del sistema de nodos con sysctl, realiza una solicitud POST al método awsClusters.awsNodePools.create. Esta solicitud POST crea un grupo de nodos con las personalizaciones que especificaste. En el siguiente ejemplo, los parámetros busy_poll y busy_read se configuran en 5,000 microsegundos cada uno:

POST https://ENDPOINT/v1/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/CLUSTER_NAME/awsNodePools

{
    "name": NODE_POOL_NAME,
    "version": CLUSTER_VERSION,
    "config": {
        "linuxNodeConfig": {
            "sysctls": {
                "net.core.busy_poll": "5000",
                "net.core.busy_read": "5000",
            }
        }
    }
}

Reemplaza lo siguiente:

  • ENDPOINT: Tu Google Cloud extremo de servicio.
  • PROJECT_ID: El ID de tu proyecto Google Cloud .
  • GOOGLE_CLOUD_LOCATION: Es la Google Cloud ubicación del clúster.
  • CLUSTER_NAME: Es el nombre del clúster al que deseas agregar un grupo de nodos.
  • NODE_POOL_NAME: Es el nombre de tu grupo de nodos.
  • CLUSTER_VERSION: Es el número de versión de tu clúster, por ejemplo, 1.31.0-gke.500.

Para obtener una lista completa de los pares clave-valor que puedes agregar a la solicitud JSON anterior, consulta Opciones de configuración de Sysctl.

Opciones de configuración del agente kubelet

En la siguiente tabla, se muestran las opciones de kubelet que puedes modificar.

Opciones de configuración de Kubelet Restricciones Parámetro de configuración predeterminado Descripción
kubelet_config_cpu_manager_policy El valor debe ser nonestatic "none" Esta configuración controla la política del administrador de CPU de kubelet. El valor predeterminado es none, que es el esquema de afinidad de CPU predeterminado, que no proporciona afinidad más allá de lo que el programador de SO proporciona automáticamente.

Configurar este valor como static permita que a los pods en la clase de QoS garantizada con solicitudes de CPU de número entero se les asigne el uso exclusivo de las CPU.
kubelet_config_cpu_cfs_quota El valor debe ser truefalse true Esta configuración aplica el límite de CPU del Pod. Establecer este valor en false significa que se ignoran los límites de CPU para Pods.

Omitir los límites de CPU puede ser conveniente en ciertas situaciones en las que los Pods son sensibles a los límites de CPU. El riesgo de inhabilitar cpuCFSQuota es que un Pod fuera de control puede consumir más recursos de CPU de lo previsto.
kubelet_config_cpu_cfs_quota_period El valor debe ser una duración de tiempo "100ms" Mediante esta opción de configuración, se establece el valor del período de la cuota de CFS de CPU, cpu.cfs_period_us, que especifica el período de con qué frecuencia se debe reasignar el acceso de un cgroup a los recursos de CPU. Esta opción te permite ajustar el comportamiento de limitación de CPU.
kubelet_config_pod_pids_limit El valor debe ser entre 1024 y 4194304 -1 Esta configuración establece la cantidad máxima de ID de procesos (PID) que puede usar cada Pod. Si se establece en el valor predeterminado, el límite de PID se ajusta automáticamente según el tamaño de la máquina subyacente.

Opciones de configuración para la utilidad sysctl

Para ajustar el rendimiento de tu sistema, puedes modificar los siguientes atributos:

Grupos de nodos de instancias Spot

GKE en AWS admite grupos de nodos de instancias Spot de AWS como una función de versión preliminar. Los grupos de nodos de instancias Spot son grupos de instancias Spot de Amazon EC2 que están disponibles en AWS a un costo más bajo.

Las instancias Spot pueden proporcionar ahorros de costos para aplicaciones sin estado, tolerantes a errores y flexibles. Sin embargo, no son adecuadas para cargas de trabajo que son inflexibles, con estado, tolerantes a errores o estrechamente vinculadas entre nodos de instancias. Amazon EC2 puede interrumpir las instancias Spot cuando EC2 necesita la capacidad otra vez, por lo que están sujetas a las fluctuaciones del mercado de Spot. Si tus cargas de trabajo requieren una capacidad garantizada y no pueden tolerar períodos ocasionales de falta de disponibilidad, elige un grupo de nodos estándar en lugar de un grupo de nodos de instancia Spot.

La estrategia de asignación empleada en GKE en AWS se enfoca en seleccionar grupos de instancias Spot con la mayor disponibilidad de capacidad, lo que minimiza el riesgo de interrupciones. Este enfoque es particularmente beneficioso para las cargas de trabajo con un mayor costo de interrupción, como la renderización de imágenes y contenido multimedia o el aprendizaje profundo. En particular, se implementó la estrategia de asignación capacityOptimized, como se describe en Estrategias de asignación para instancias Spot.

Crear un grupo de nodos Spot

Para crear un grupo de nodos de instancia Spot, ejecuta el siguiente comando:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --spot-instance-types INSTANCE_TYPE_LIST \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Reemplaza lo siguiente:

  • NODE_POOL_NAME: el nombre que deseas asignar a este grupo de nodos.
  • CLUSTER_NAME: el nombre del clúster al que deseas conectar este grupo de nodos.
  • INSTANCE_TYPE_LIST: una lista separada por comas de tipos de instancias de AWS EC2. El grupo de nodos aprovisiona instancias Spot con estos tipos de instancias. Los tipos de instancias deben tener la misma arquitectura de la CPU, la misma cantidad de CPU y la misma cantidad de memoria. Por ejemplo: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Puedes usar la herramienta Selector de instancias de Amazon EC2 para encontrar los tipos de instancias con configuraciones de CPU y memoria idénticas.
  • ROOT_VOLUME_SIZE: el tamaño deseado para el volumen raíz de cada nodo, en Gb.
  • NODEPOOL_PROFILE: es el perfil de la instancia de IAM para las VM del grupo de nodos
  • NODE_VERSION: es la versión de Kubernetes que se instalará en cada nodo en el grupo de nodos (p. ej., "1.32.4-gke.200")
  • MIN_NODES: la cantidad mínima de nodos que puede contener el grupo de nodos
  • MAX_NODES: la cantidad máxima de nodos que puede contener el grupo de nodos
  • MAX_PODS_PER_NODE: la cantidad máxima de Pods que se pueden crear en cualquier nodo único del grupo.
  • GOOGLE_CLOUD_LOCATION: el nombre de la ubicación de Google Cloud desde la que se administrará este grupo de nodos
  • NODEPOOL_SUBNET: el ID de la subred en la que se ejecutará el grupo de nodos.
    • No debe haber superposición entre los rangos de IP del Pod/Service del clúster y la red de la subred del grupo de nodos. Si deseas obtener más información sobre cómo seleccionar los rangos de IP de Pods y Services para tu clúster, consulta Selecciona rangos CIDR para tu clúster
    • Si esta subred está fuera del bloque CIDR principal de VPC, se necesitan algunos pasos adicionales. Para obtener más información, consulta los grupos de seguridad.
  • SSH_KEY_PAIR_NAME: el nombre del par de claves SSH de AWS creado para el acceso SSH (opcional)
  • CONFIG_KMS_KEY_ARN: el nombre del recurso de Amazon (ARN) de la clave de KMS de AWS que encripta los datos del usuario

La práctica recomendada es enumerar varios tipos de instancias en el campo INSTANCE_TYPE_LIST. Esta práctica recomendada es importante, ya que si un grupo de nodos se configura con solo un tipo de instancia y ese tipo de instancia no está disponible en ninguna de las Zonas de disponibilidad, el grupo de nodos no puede aprovisionar nodos nuevos. Esto puede afectar la disponibilidad de tus aplicaciones y causar interrupciones del servicio.

Ten en cuenta que el campo spot-instance-types es exclusivo de forma mutua con el campo instance-type. Esto significa que puedes proporcionar solo uno de estos campos y no ambos.