Crear y personalizar un grupo de nodos

Esta página le muestra cómo crear un grupo de nodos en GKE en AWS y cómo personalizar la configuración de su nodo mediante un archivo de configuración.

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

  • El nombre de un clúster de AWS existente para crear el grupo de nodos en
  • Un perfil de instancia de IAM para máquinas virtuales de grupos de nodos
  • Una subred donde se ejecutarán las máquinas virtuales del grupo de nodos

Si desea acceso SSH a sus nodos, puede crear un par de claves EC2 .

Esta página está dirigida a administradores y operadores de TI que desean configurar, supervisar y administrar la infraestructura en la nube. Para obtener más información sobre los roles comunes y las tareas de ejemplo que mencionamos en Google Cloud contenido, consulte Roles y tareas de usuario comunes de GKE Enterprise .

Crear 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"

Reemplace lo siguiente:

  • NODE_POOL_NAME : un nombre que elija para su grupo de nodos
  • CLUSTER_NAME : el nombre del clúster al que se adjuntará 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 instancia de IAM para las máquinas virtuales del grupo de nodos. Para obtener más información sobre cómo actualizar un perfil de instancia de IAM, consulte Actualizar el perfil de instancia de IAM de AWS .
  • NODE_VERSION : la versión de Kubernetes que se instalará en cada nodo del grupo de nodos (por ejemplo, "1.31.4-gke.500")
  • MIN_NODES : el número mínimo de nodos que puede contener el grupo de nodos
  • MAX_NODES : el número máximo 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 individual del grupo
  • GOOGLE_CLOUD_LOCATION : el nombre de la Google CloudUbicación 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 ninguna superposición entre los rangos de IP de pods/servicios del clúster y la red de subred del grupo de nodos. Para obtener más información sobre cómo seleccionar rangos de IP de pods y servicios para su clúster, consulte Seleccionar rangos de CIDR para su clúster.
    • Si esta subred está fuera del bloque CIDR principal de la VPC, se requieren pasos adicionales. Para obtener más información, consulte 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 de recurso de Amazon (ARN) de la clave AWS KMS que cifra los datos del usuario

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

Personalizar 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 al crear un grupo de nodos.

Puede utilizar una configuración de sistema de nodos para especificar configuraciones personalizadas para el agente de nodo de Kubernetes ( kubelet ) y configuraciones de kernel de Linux de bajo nivel ( sysctl ) en sus grupos de nodos.

Configurar el agente kubelet

Para personalizar la configuración del nodo usando kubelet , use la CLI de Google Cloud o Terraform.

nube g

Puede especificar configuraciones personalizadas para el agente de nodo de Kubernetes ( kubelet ) al crear sus grupos de nodos. Por ejemplo, para configurar kubelet para que use la política de administración de CPU estática , ejecute el siguiente comando:

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

Reemplace lo siguiente:

  • POOL_NAME : el nombre de su grupo de nodos.
  • CLUSTER_NAME : el nombre del clúster al que desea agregar un grupo de nodos.
  • LOCATION : la zona de cómputo o región del clúster.

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

Terraformar

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

  1. Establezca las variables de Terraform incluyendo 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. Agregue el siguiente bloque a su 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
     }
    }
    

    Reemplace lo siguiente:

    • NODE_POOL_RESOURCE_NAME : el nombre del recurso del grupo de nodos en la plantilla de Terraform.
    • CLUSTER_NAME : el nombre del clúster existente.
    • POOL_NAME : el nombre del grupo de nodos que se personalizará.
    • SUBNET_ID : la subred asignada al grupo de nodos.
    • CLUSTER_VERSION : la versión para el 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.

Configurar la utilidad sysctl

Para personalizar la configuración de su sistema de nodos mediante sysctl , realice una solicitud POST al método awsClusters.awsNodePools.create . Esta solicitud POST crea un grupo de nodos con las personalizaciones especificadas. En el siguiente ejemplo, los parámetros busy_poll y busy_read están configurados a 5000 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",
            }
        }
    }
}

Reemplace lo siguiente:

  • ENDPOINT : su Google Cloud punto final del servicio .
  • PROJECT_ID : su Google Cloud Identificación del proyecto.
  • GOOGLE_CLOUD_LOCATION : la Google Cloud Ubicación para el cluster.
  • CLUSTER_NAME : el nombre del clúster al que desea agregar un grupo de nodos.
  • NODE_POOL_NAME : el nombre de su grupo de nodos.
  • CLUSTER_VERSION : el número de versión de su clúster, por ejemplo, 1.31.0-gke.500.

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

Opciones de configuración para el agente kubelet

La siguiente tabla muestra las opciones kubelet que puedes modificar.

Configuración de Kubelet Restricciones Configuración predeterminada Descripción
política del administrador de CPU de configuración de kubelet El valor debe ser none o static "none" Esta configuración controla la política del administrador de CPU de kubelet. El valor predeterminado es none , que corresponde al esquema de afinidad de CPU predeterminado, sin proporcionar ninguna afinidad más allá de la que el programador del sistema operativo realiza automáticamente.

Establecer este valor en static permite que a los pods de la clase QoS garantizada con solicitudes de CPU enteras se les asigne el uso exclusivo de CPU.
cuota de cfs de CPU de configuración de kubelet El valor debe ser true o false true Esta configuración aplica el límite de CPU del pod . Si se establece en false , se ignoran los límites de CPU de los pods.

Ignorar los límites de CPU puede ser recomendable en ciertos escenarios donde los pods son sensibles a estos. El riesgo de deshabilitar cpuCFSQuota es que un pod no autorizado pueda consumir más recursos de CPU de lo previsto.
período de cuota de cfs de CPU de configuración de kubelet El valor debe ser una duración de tiempo "100ms" Esta configuración establece el valor del período de cuota de CFS de CPU, cpu.cfs_period_us , que especifica la frecuencia con la que se debe reasignar el acceso de un cgroup a los recursos de CPU. Esta opción permite ajustar la limitación de la CPU.
límite de pids de pod de configuración de kubelet El valor debe estar entre 1024 y 4194304 -1 Esta configuración establece el número máximo de identificadores de proceso (PID) que cada pod puede usar. 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.

Opciones de configuración para la utilidad sysctl

Para ajustar el rendimiento de su sistema, puede modificar los siguientes atributos:

Grupos de nodos de instancias puntuales

GKE en AWS admite grupos de nodos de instancias spot de AWS como función de vista previa. Estos grupos son grupos de instancias spot de Amazon EC2 disponibles en AWS a un costo menor.

Las instancias spot pueden ofrecer ahorros de costos para aplicaciones sin estado, tolerantes a fallos y flexibles. Sin embargo, no son adecuadas para cargas de trabajo inflexibles, con estado, intolerantes a fallos o con un acoplamiento estrecho entre nodos de instancia. Amazon EC2 puede interrumpir las instancias spot cuando EC2 necesita recuperar la capacidad, por lo que están sujetas a las fluctuaciones del mercado spot. Si sus cargas de trabajo requieren capacidad garantizada y no toleran periodos ocasionales de indisponibilidad, elija un grupo de nodos estándar en lugar de un grupo de nodos de instancias spot.

La estrategia de asignación empleada en GKE en AWS se centra en seleccionar grupos de instancias spot con la mayor disponibilidad de capacidad, minimizando así el riesgo de interrupciones. Este enfoque es especialmente beneficioso para cargas de trabajo con un mayor coste de interrupción, como la renderización de imágenes y multimedia o el aprendizaje profundo. En concreto, se ha implementado 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 instancias puntuales, ejecute 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"

Reemplace lo siguiente:

  • NODE_POOL_NAME : el nombre que desea asignar a este grupo de nodos.
  • CLUSTER_NAME : el nombre del clúster al que desea adjuntar 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 de spot con estos tipos de instancia. Los tipos de instancia deben tener la misma arquitectura de CPU, el mismo número de CPU y la misma cantidad de memoria. Por ejemplo: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Puede usar la herramienta Selector de Instancias de Amazon EC2 para encontrar tipos de instancia 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 : el perfil de instancia de IAM para las máquinas virtuales del grupo de nodos
  • NODE_VERSION : la versión de Kubernetes que se instalará en cada nodo del grupo de nodos (por ejemplo, "1.31.4-gke.500")
  • MIN_NODES : el número mínimo de nodos que puede contener el grupo de nodos
  • MAX_NODES : el número máximo 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 individual del grupo
  • GOOGLE_CLOUD_LOCATION : el nombre de la Google CloudUbicación 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 ninguna superposición entre los rangos de IP de pods/servicios del clúster y la red de subred del grupo de nodos. Para obtener más información sobre cómo seleccionar rangos de IP de pods y servicios para su clúster, consulte Seleccionar rangos de CIDR para su clúster.
    • Si esta subred está fuera del bloque CIDR principal de la VPC, se requieren pasos adicionales. Para obtener más información, consulte 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 de recurso de Amazon (ARN) de la clave AWS KMS que cifra los datos del usuario

La práctica recomendada es incluir varios tipos de instancia en el campo INSTANCE_TYPE_LIST . Esta práctica recomendada es importante porque si un grupo de nodos está configurado con un solo tipo de instancia y este no está disponible en ninguna de las zonas de disponibilidad deseadas, el grupo de nodos no podrá aprovisionar nuevos nodos. Esto puede afectar la disponibilidad de las aplicaciones y causar interrupciones del servicio.

Tenga en cuenta que el campo spot-instance-types es mutuamente excluyente con el campo instance-type . Esto significa que solo puede proporcionar uno de estos campos, no ambos.