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 los nodos mediante un archivo de configuración.
Para crear un grupo de nodos, debes proporcionar los siguientes recursos:
- Nombre de un clúster de AWS en el que se creará el grupo de nodos
- Un perfil de instancia de gestión de identidades y accesos para las VMs del grupo de nodos
- Una subred en la que se ejecutarán las VMs del grupo de nodos
Si quieres tener acceso SSH a tus nodos, puedes crear un par de claves de EC2.
Esta página está dirigida a administradores de TI y operadores que quieran configurar, monitorizar y gestionar la infraestructura de la nube. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE. Google Cloud
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"
Haz los cambios siguientes:
NODE_POOL_NAME
: el nombre que elijas para tu grupo de nodosCLUSTER_NAME
: el nombre del clúster al que se va a adjuntar el grupo de nodosINSTANCE_TYPE
: el tipo de instancia de máquina de AWS que quieras para este grupo de nodos. Por ejemplo,m5.large
.ROOT_VOLUME_SIZE
: tamaño deseado del volumen raíz de cada nodo, en GBNODEPOOL_PROFILE
: el perfil de instancia de gestión de identidades y accesos de las máquinas virtuales del grupo de nodos. Para obtener información sobre cómo actualizar un perfil de instancia de IAM, consulta Actualizar un perfil de instancia de AWS IAM.NODE_VERSION
: la versión de Kubernetes que se va a instalar en cada nodo del grupo de nodos (por ejemplo, "1.32.4-gke.200")MIN_NODES
: número mínimo de nodos que puede contener el grupo de nodosMAX_NODES
: número máximo de nodos que puede contener el grupo de nodos.MAX_PODS_PER_NODE
: el número máximo de pods que se pueden crear en cualquier nodo del grupo.GOOGLE_CLOUD_LOCATION
: el nombre de la Google Cloud ubicación desde la que se gestionará este grupo de nodosNODEPOOL_SUBNET
: el ID de la subred en la que se ejecutará el grupo de nodos.- No debe haber ninguna superposición entre los intervalos de IPs de pods o servicios del clúster y la red de subredes del grupo de nodos. Para obtener más información sobre cómo seleccionar intervalos de IPs de pods y servicios para tu clúster, consulta Seleccionar intervalos de CIDR para tu clúster.
- Si esta subred está fuera del bloque CIDR principal de la VPC, se necesitan algunos pasos adicionales. Para obtener más información, consulta Grupos de seguridad.
SSH_KEY_PAIR_NAME
: 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 de AWS KMS que cifra los datos de usuario.
Si está presente, el parámetro --tags
aplica la etiqueta dada a todos los nodos del 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 pertenece el nodo.
Personalizar la configuración del sistema de nodos
Puedes personalizar la configuración de tu nodo de varias formas. Por ejemplo, puedes especificar parámetros como el límite de CPU del pod al crear un grupo de nodos.
Puedes usar una configuración del sistema de nodos para especificar ajustes personalizados del agente de nodos de Kubernetes (
kubelet
)
y configuraciones de kernel de Linux de bajo nivel
(sysctl
) en tus grupos de nodos.
Configurar el agente kubelet
Para personalizar la configuración de los nodos con kubelet
, usa Google Cloud CLI o Terraform.
gcloud
Puedes especificar ajustes personalizados para el agente de nodo de Kubernetes
(kubelet
)
cuando crees tus grupos de nodos. Por ejemplo, para configurar kubelet
para que use la política de gestión de CPU estática, ejecuta el siguiente comando:
gcloud container aws node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--kubelet_config_cpu_manager_policy=static
Haz los cambios siguientes:
POOL_NAME
: el nombre del grupo de nodos.CLUSTER_NAME
: el nombre del clúster al que quieres añadir un grupo de nodos.LOCATION
: la zona o región de computación del clúster.
Para ver una lista completa de los campos que puedes añadir 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 de grupos de nodos de Terraform.
Define 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 }
Añade el siguiente bloque a tu 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 } }
Haz los cambios siguientes:
NODE_POOL_RESOURCE_NAME
: el nombre del recurso del grupo de nodos en la plantilla de Terraform.CLUSTER_NAME
: el nombre del clúster.POOL_NAME
: el nombre del grupo de nodos que se va a personalizar.SUBNET_ID
: la subred asignada al grupo de nodos.CLUSTER_VERSION
: 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.
Configurar la utilidad sysctl
Para personalizar la configuración del sistema de nodos con sysctl
, haz una solicitud POST
al método awsClusters.awsNodePools.create
.
Esta solicitud POST crea un grupo de nodos con las personalizaciones que hayas especificado. En el siguiente ejemplo, los parámetros busy_poll
y busy_read
se han configurado en 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",
}
}
}
}
Haz los cambios siguientes:
ENDPOINT
: el Google Cloud endpoint de tu servicio.PROJECT_ID
: tu ID de proyecto Google Cloud .GOOGLE_CLOUD_LOCATION
: la Google Cloud ubicación del clúster.CLUSTER_NAME
: el nombre del clúster al que quieres añadir un grupo de nodos.NODE_POOL_NAME
: el nombre del grupo de nodos.CLUSTER_VERSION
: el número de versión de tu clúster, por ejemplo, 1.31.0-gke.500.
Para ver una lista completa de los pares clave-valor que puede añadir a la solicitud JSON anterior, consulte 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.
Ajustes de configuración de Kubelet | Restricciones | Ajuste predeterminado | Descripción |
---|---|---|---|
kubelet_config_cpu_manager_policy |
El valor debe ser none o static
|
"none"
|
Este ajuste controla la política de gestión de CPU de kubelet. El valor predeterminado es none , que es el esquema de afinidad de CPU predeterminado. No proporciona ninguna afinidad más allá de lo que el programador del SO hace automáticamente.Si se asigna el valor static , los pods de la clase de QoS Garantizada con
solicitudes de CPU de números enteros podrán usar las CPUs de forma exclusiva. |
kubelet_config_cpu_cfs_quota |
El valor debe ser true o false
|
true
|
Este ajuste aplica el límite de CPU de los pods. Si se asigna el valor false , se ignorarán los límites de CPU de los pods.Ignorar los límites de CPU puede ser recomendable en determinados casos en los que los pods sean sensibles a los límites de CPU. El riesgo de inhabilitar cpuCFSQuota es que un pod no autorizado puede consumir más recursos de CPU de lo previsto.
|
kubelet_config_cpu_cfs_quota_period | El valor debe ser una duración |
"100ms"
|
Este ajuste define el valor del periodo de cuota de CFS de la CPU, cpu.cfs_period_us ,
que especifica la frecuencia con la que se debe reasignar el acceso de un cgroup a los recursos de la CPU. Esta opción te permite ajustar el comportamiento de limitación de la CPU. |
kubelet_config_pod_pids_limit | El valor debe estar entre 1024 y 4194304 |
-1
|
Este ajuste define el número máximo de IDs de proceso (PIDs) que puede usar cada pod. Si se define con el valor predeterminado, el límite de PIDs se ajusta automáticamente en función del tamaño del equipo subyacente. |
Opciones de configuración de la utilidad sysctl
Para optimizar 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 on AWS admite los nodos de instancia de spot de AWS como función de vista previa. Los grupos de nodos de instancias de acceso puntual son grupos de instancias de acceso puntual de Amazon EC2 que están disponibles en AWS a un coste más bajo.
Las instancias Spot pueden ofrecer ahorros de costes en aplicaciones sin reconocimiento del estado, tolerantes a fallos y flexibles. Sin embargo, no son adecuados para cargas de trabajo inflexibles, con reconocimiento del estado, intolerantes a fallos o con un acoplamiento estrecho entre nodos de instancia. Amazon EC2 puede interrumpir las instancias de Spot cuando necesite recuperar la capacidad, por lo que están sujetas a fluctuaciones en el mercado de Spot. Si tus cargas de trabajo requieren capacidad garantizada y no pueden tolerar periodos de indisponibilidad ocasionales, elige un grupo de nodos estándar en lugar de un grupo de nodos de instancia de spot.
La estrategia de asignación empleada en GKE en AWS se centra en seleccionar grupos de instancias de Spot con la mayor disponibilidad de capacidad, lo que minimiza el riesgo de interrupciones. Esta estrategia es especialmente útil para cargas de trabajo con un coste de interrupción más alto, como el renderizado de imágenes y contenido multimedia o el aprendizaje profundo.
En concreto, se ha implementado la estrategia de asignación capacityOptimized
, tal como se describe en Estrategias de asignación de instancias Spot.
Crear un grupo de nodos Spot
Para crear un grupo de nodos de instancia de 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"
Haz los cambios siguientes:
- NODE_POOL_NAME: el nombre que quieras asignar a este grupo de nodos.
- CLUSTER_NAME: el nombre del clúster al que quieres adjuntar este grupo de nodos.
- INSTANCE_TYPE_LIST: lista separada por comas de tipos de instancias de AWS EC2. El grupo de nodos aprovisiona instancias de acceso puntual con estos tipos de instancia. Los tipos de instancia deben tener la misma arquitectura de CPU, el mismo número de CPUs y la misma cantidad de memoria. Por ejemplo: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Puedes usar la herramienta Amazon EC2 Instance Selector para encontrar tipos de instancias que tengan configuraciones de CPU y memoria idénticas.
ROOT_VOLUME_SIZE
: tamaño deseado del volumen raíz de cada nodo, en GBNODEPOOL_PROFILE
: el perfil de instancia de gestión de identidades y accesos de las VMs del grupo de nodosNODE_VERSION
: la versión de Kubernetes que se va a instalar en cada nodo del grupo de nodos (por ejemplo, "1.32.4-gke.200")MIN_NODES
: número mínimo de nodos que puede contener el grupo de nodosMAX_NODES
: número máximo de nodos que puede contener el grupo de nodos.MAX_PODS_PER_NODE
: el número máximo de pods que se pueden crear en cualquier nodo del grupo.GOOGLE_CLOUD_LOCATION
: el nombre de la Google Cloud ubicación desde la que se gestionará este grupo de nodosNODEPOOL_SUBNET
: el ID de la subred en la que se ejecutará el grupo de nodos.- No debe haber ninguna superposición entre los intervalos de IPs de pods o servicios del clúster y la red de subredes del grupo de nodos. Para obtener más información sobre cómo seleccionar intervalos de IPs de pods y servicios para tu clúster, consulta Seleccionar intervalos de CIDR para tu clúster.
- Si esta subred está fuera del bloque CIDR principal de la VPC, se necesitan algunos pasos adicionales. Para obtener más información, consulta Grupos de seguridad.
SSH_KEY_PAIR_NAME
: 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 de AWS KMS que cifra los datos de usuario.
Lo más recomendable es incluir varios tipos de instancia en el campo INSTANCE_TYPE_LIST. Esta práctica recomendada es importante porque, si un grupo de nodos se configura con un solo tipo de instancia y ese tipo de instancia no está disponible en ninguna de las zonas de disponibilidad deseadas, el grupo de nodos no podrá aprovisionar ningún nodo nuevo. Esto puede afectar a la disponibilidad de tus aplicaciones y provocar interrupciones en el servicio.
Tenga en cuenta que el campo spot-instance-types
se excluye mutuamente con el campo instance-type
. Esto significa que solo puedes proporcionar uno de estos campos y no ambos.