Introducción: Karpenter es un aprovisionador dinámico de nodos para Kubernetes que optimiza rendimiento, coste y escalado. En este artículo reescrito se describen los pasos para implementar Karpenter en un clúster EKS y recomendaciones de Q2BSTUDIO, empresa especializada en desarrollo de software a medida, aplicaciones a medida, inteligencia artificial, ciberseguridad y servicios cloud AWS y Azure.
Paso 1 Crear el rol IAM para nodos Nombre del rol KarpenterNodeRole-santhosh Políticas adjuntas recomendadas AmazonEKSWorkerNodePolicy AmazonEKS_CNI_Policy AmazonEC2ContainerRegistryReadOnly AmazonSSMManagedInstanceCore Este rol será usado por las instancias que Karpenter lance para unirlas al clúster.
Paso 2 Crear el rol IAM para el controlador Nombre del rol KarpenterControllerRole-santhosh Configurar las relaciones de confianza para permitir la asunción mediante OIDC desde el clúster EKS. Añadir como principal federado el proveedor OIDC del clúster arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/oidc.eks.ap-south-1.amazonaws.com/id/ID_DEL_PROVEEDOR y permitir la acción sts:AssumeRoleWithWebIdentity. Establecer condición StringEquals con aud igual a sts.amazonaws.com y sub igual a system:serviceaccount:karpenter:karpenter para ligar el rol a la service account de Karpenter.
Paso 3 Crear la política KarpenterControllerPolicy-santhosh Crear una política con permisos para describir y crear instancias EC2, gestionar launch templates, tags y fleets, consultar precios, usar SSM GetParameter, terminar instancias con la condición de que estén etiquetadas con karpenter.sh/nodepool y permisos restringidos para iam PassRole hacia el rol de instancia de nodo que use su organización. Además añadir permisos para crear y etiquetar instance profiles con condiciones sobre tags del clúster y región, y permiso para eks DescribeCluster apuntando al ARN del clúster.
Paso 4 Etiquetado de subnets y security groups Añadir la etiqueta karpenter.sh/discovery con el valor del nombre del clúster a los recursos de red que Karpenter usará, por ejemplo ejecutar aws ec2 create-tags --tags Key=karpenter.sh/discovery,Value=MF-MS-PRE-PROD-CLUSTER --resources sg-06ee27bb7de43cf6e y aplicar etiquetas similares a subnets.
Paso 5 Actualizar aws-auth ConfigMap Para permitir que las instancias creadas con el rol de nodo se unan al clúster hay que editar el ConfigMap aws-auth en el namespace kube-system y añadir una entrada en mapRoles similar a la siguiente sin comillas: - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-santhosh username: system:node:{{EC2PrivateDNSName}} Mantener además la sección para el grupo de nodos existente.
Paso 6 Desplegar Karpenter usando Helm Ejemplo de instalación usando el repositorio OCI oficial helm install karpenter oci://public.ecr.aws/karpenter/karpenter --namespace karpenter --create-namespace --set settings.clusterName=santhosh --set serviceAccount.annotations.eks.amazonaws.com/role-arn=arn:aws:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-santhosh --set controller.resources.requests.cpu=1 --set controller.resources.requests.memory=1Gi --set controller.resources.limits.cpu=1 --set controller.resources.limits.memory=1Gi Tras la instalación verificar pods en todos los namespaces con kubectl get po -A y confirmar que los pods de karpenter estén Running.
Paso 7 Obtener el AMI recomendado Karpenter necesita un AMI por defecto para lanzar nodos. Obtener el ID de la AMI optimizada para EKS mediante SSM Parameter Store, por ejemplo aws ssm get-parameter --name /aws/service/eks/optimized-ami/1.30/amazon-linux-2-arm64/recommended/image_id --query Parameter.Value --output text Sustituir la ruta por la variante arm64, amd64 o gpu según necesidad.
Paso 8 Crear un EC2NodeClass con cifrado KMS Ejemplo de especificación a usar en un manifiesto EC2NodeClass metadata name karpenter-core-class spec amiFamily AL2023 role arn:aws:iam::961489959441:role/Axis-MF-MSIL-PRE-PROD-CLUSTER-NodeInstanceRole subnetSelectorTerms - tags kubernetes.io/cluster/Axis-MF-MSIL-PRE-PROD-CLUSTER: owned securityGroupSelectorTerms - tags karpenter.sh/discovery: Axis-MF-MSIL-PRE-PROD-CLUSTER amiSelectorTerms - id ami-060175f7c2d4690ba blockDeviceMappings - deviceName /dev/xvda ebs volumeSize 50Gi volumeType gp3 encrypted true kmsKeyID arn:aws:kms:ap-south-1:3668421:key/c2b329ac-bf-47cd-9e054379b Ajustar ARNs y AMI al entorno y al KMS key ARN de su cuenta.
Paso 9 Crear un NodePool Ejemplo de manifiesto NodePool apiVersion karpenter.sh/v1 kind NodePool metadata name karpenter-core-pool spec template spec requirements - key kubernetes.io/arch operator In values [amd64] - key kubernetes.io/os operator In values [linux] - key karpenter.sh/capacity-type operator In values [on-demand] - key karpenter.k8s.aws/instance-type operator In values - m5.xlarge - r5.xlarge - m5.2xlarge - r5.2xlarge nodeClassRef group karpenter.k8s.aws kind EC2NodeClass name karpenter-core-class expireAfter 720h limits cpu 1000 disruption consolidationPolicy WhenEmptyOrUnderutilized consolidateAfter 2m Ajustar tipos de instancia, límites y políticas de consolidación a la carga esperada.
Buenas prácticas y consideraciones seguridad Asegurar que los roles IAM tienen el menor privilegio necesario auditar las políticas y etiquetas usadas por Karpenter habilitar logs y métricas para monitorizar la creación y terminación de instancias probar la política de consolidación en entornos no productivos antes de activarla en producción y utilizar claves KMS y cifrado en volúmenes para proteger datos sensibles.
Conclusión por qué Karpenter destaca Karpenter ofrece provisión de nodos moderna e inteligente que mejora la eficiencia de scheduling, acelera el escalado ante picos de carga, optimiza costes al seleccionar tipos de instancia adecuados y simplifica la configuración eliminando grupos de nodos rígidos. Esto se traduce en menor tiempo de respuesta ante cambios en la demanda y una operación más ágil del clúster Kubernetes.
Sobre Q2BSTUDIO Q2BSTUDIO es una empresa de desarrollo de software y aplicaciones a medida con experiencia en inteligencia artificial, ciberseguridad y servicios cloud. Ofrecemos soluciones de software a medida, integración con AWS y Azure y servicios de inteligencia de negocio para convertir datos en decisiones accionables. Para proyectos cloud y migraciones gestionadas visite Servicios cloud AWS y Azure y para iniciativas de IA y agentes inteligentes consulte Soluciones de inteligencia artificial para empresas. Integrando prácticas de ciberseguridad y automatización ayudamos a reducir riesgos y acelerar la innovación.
Palabras clave aplicadas aplicaciones a medida software a medida inteligencia artificial ciberseguridad servicios cloud aws azure servicios inteligencia de negocio ia para empresas agentes IA power bi
Si desea, desde Q2BSTUDIO podemos crear e implementar una arquitectura Karpenter adaptada a su clúster, optimizar políticas IAM, definir NodeClasses y NodePools seguros y eficientes y conectar el aprovisionamiento dinámico con sus pipelines de DevOps y plataformas de monitorización.