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 nodosINSTANCE_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 nodosMAX_NODES
: la cantidad máxima de nodos que puede contener el grupo de nodosMAX_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 nodosNODEPOOL_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.
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 }
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 none o static
|
"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 true o false
|
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:
net.core.busy_poll
net.core.busy_read
net.core.netdev_max_backlog
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
net.core.optmem_max
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_tw_reuse
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
vm.max_map_count
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 nodosNODE_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 nodosMAX_NODES
: la cantidad máxima de nodos que puede contener el grupo de nodosMAX_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 nodosNODEPOOL_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.