Skip to content

Guía de instalación de OS en servidores bare metal y migración ​

< Anterior: Operaciones y mantenimiento | Tabla de contenidos | Siguiente: Hybrid Nodes Gateway >

Versiones compatibles: EKS 1.31+, nodeadm 0.1+ Última actualización: February 23, 2026

Este documento cubre los métodos de instalación de OS para desplegar EKS Hybrid Nodes en servidores bare metal y las estrategias de migración desde VMware/OpenShift.

Descripción general ​

Por qué elegir bare metal ​

Ejecutar EKS Hybrid Nodes en servidores bare metal ofrece los siguientes beneficios:

  1. Ahorro en costos de licencias de VMware: Después de la adquisición de VMware por parte de Broadcom, la transición a un modelo de suscripción aumentó significativamente los costos de licenciamiento.
  2. Reducción de costos de suscripción de OpenShift: Elimine las tarifas de suscripción de Red Hat OpenShift por nodo.
  3. Eliminación de la sobrecarga del hipervisor: Ejecute cargas de trabajo directamente sin una capa de virtualización para optimizar el rendimiento.
  4. Simplificación de la gestión de licencias: Reduzca la carga de los acuerdos de licencia complejos y del cumplimiento de auditorías.

Matriz de compatibilidad de infraestructura de OS ​

OSBare MetalVMwareCredencialesHerramienta de configuración
Ubuntu 22.04/24.04 LTSOOSSM / IAM RAnodeadm (YAML)
RHEL 8/9OOSSM / IAM RAnodeadm (YAML)
Amazon Linux 2023OOSSM / IAM RAnodeadm (YAML)
Bottlerocket v1.37.0+XO (solo VMware)SSM / IAM RAgovc (TOML)

Nota: Bottlerocket solo es compatible en entornos VMware. Para servidores bare metal, use Ubuntu, RHEL o Amazon Linux 2023.

Análisis comparativo de costos ​

Comparación de costos de licencia/suscripción ​

VMware vSphere ​

Después de la adquisición por Broadcom, VMware pasó de licencias perpetuas a un modelo de suscripción:

  • Licencia Enterprise Plus: Aproximadamente $4,500-8,500 por socket de CPU al año
  • Componentes adicionales como vSAN y NSX-T generan costos separados

OpenShift ​

Basado en suscripción de Red Hat:

  • Aproximadamente $2,500-5,000 por nodo al año (suscripción basada en cores)
  • Incluye soporte premium

EKS Hybrid Nodes ​

  • $0.01 por vCPU por hora (varía según la región)
  • No se requiere licenciamiento adicional

Comparación de costos anuales por escala (servidores de 32 vCPU) ​

EscalaVMware vSphere (Anual)OpenShift (Anual)EKS Hybrid Nodes (Anual)
10 nodos~$45,000-85,000~$25,000-50,000~$28,032
50 nodos~$225,000-425,000~$125,000-250,000~$140,160
100 nodos~$450,000-850,000~$250,000-500,000~$280,320

Cálculo: EKS Hybrid Nodes = 32 vCPU × $0.01/hora × 8,760 horas = $2,803.20/nodo/año

Nota: Los costos anteriores son estimaciones. Los costos reales pueden variar según los términos del contrato, la región y los descuentos.

Consideraciones de TCO (Total Cost of Ownership) ​

Además de los costos de licencia/suscripción, considere los siguientes factores:

  • Costos de capacitación del personal de operaciones
  • Sobrecarga de gestión de licencias y cumplimiento de auditorías
  • Costos de soporte técnico y consultoría
  • Costos de migración (una sola vez)

Instalación bare metal específica por OS ​

Requisitos previos ​

Configuración de BIOS/UEFI ​

  • Configure la prioridad de arranque PXE
  • Deshabilite Secure Boot o use bootloaders firmados
  • Habilite las extensiones de virtualización (VT-x/AMD-V) para containerd

Infraestructura de red ​

  • Servidor DHCP: Proporciona direcciones IP e información de arranque PXE
  • Servidor TFTP: Sirve imágenes de bootloader y kernel
  • Servidor HTTP: Aloja imágenes de instalación del OS y archivos de configuración

Plantillas de AWS Packer ​

Al crear imágenes para bare metal, establezca la variable de entorno CREDENTIAL_PROVIDER:

bash
# Create Qcow2 or Raw format images
export CREDENTIAL_PROVIDER=ssm  # or iam-ra

packer build \
  -var "credential_provider=${CREDENTIAL_PROVIDER}" \
  -var "output_format=raw" \
  bare-metal-template.pkr.hcl

Ubuntu LTS (22.04/24.04) ​

Ubuntu usa Autoinstall (basado en cloud-init) para la instalación automatizada por PXE.

Ejemplo de configuración de Autoinstall ​

yaml
#cloud-config
autoinstall:
  version: 1
  locale: en_US.UTF-8
  keyboard:
    layout: us
  network:
    ethernets:
      ens0:
        dhcp4: true
    version: 2
  storage:
    layout:
      name: lvm
  identity:
    hostname: hybrid-node
    username: ubuntu
    password: "$6$rounds=4096$..."  # Encrypted password
  ssh:
    install-server: true
    authorized-keys:
      - ssh-rsa AAAA...  # SSH public key
  packages:
    - curl
    - jq
    - open-iscsi
    - nfs-common
  late-commands:
    - curtin in-target -- bash -c 'curl -OL https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/amd64/nodeadm && chmod +x nodeadm && mv nodeadm /usr/local/bin/'

Notas específicas de Ubuntu 24.04 ​

Ubuntu 24.04 requiere containerd v1.7.19 o posterior, o se necesitan cambios en el perfil de AppArmor (bug de Ubuntu #2065423):

bash
# Check containerd version
containerd --version

# If version is below 1.7.19, modify AppArmor profile
sudo aa-remove-unknown

# Reboot required to apply changes
sudo reboot

Importante: Se requiere reiniciar después de los cambios de AppArmor. Sin reiniciar, es posible que los Pods no finalicen correctamente.

RHEL 9 ​

RHEL usa Kickstart para la instalación automatizada por PXE.

Ejemplo de configuración de Kickstart ​

bash
# ks.cfg
lang en_US.UTF-8
keyboard us
timezone America/New_York --utc
rootpw --iscrypted $6$rounds=4096$...
network --bootproto=dhcp --device=ens0 --activate
autopart --type=lvm
clearpart --all --initlabel

%packages
@core
curl
jq
container-tools
%end

%post
# Install nodeadm
curl -OL https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/amd64/nodeadm
chmod +x nodeadm && mv nodeadm /usr/local/bin/

# SELinux configuration (if needed)
semanage permissive -a container_t
%end

Notas de instalación de containerd en RHEL ​

En RHEL, debe usar la opción --containerd-source docker. La fuente predeterminada de la distribución no es compatible:

bash
# Correct installation method
sudo nodeadm install 1.31 --credential-provider ssm --containerd-source docker

# Incorrect installation method (will fail)
# sudo nodeadm install 1.31 --credential-provider ssm

Entornos a gran escala: integración con Satellite/Foreman ​

Para despliegues de RHEL a gran escala, use Red Hat Satellite o Foreman para:

  • Gestión centralizada de plantillas de Kickstart
  • Replicación de repositorios de paquetes
  • Automatización del flujo de trabajo de provisioning

Amazon Linux 2023 ​

Amazon Linux 2023 usa configuración basada en cloud-init.

yaml
#cloud-config
hostname: hybrid-node
users:
  - name: ec2-user
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-rsa AAAA...

packages:
  - curl
  - jq

runcmd:
  - curl -OL https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/amd64/nodeadm
  - chmod +x nodeadm && mv nodeadm /usr/local/bin/

Nota de AWS Support: Al ejecutar Amazon Linux 2023 fuera de EC2 (en bare metal), los AWS Support Plans no aplican. Solo está disponible el soporte de la comunidad.

Bottlerocket en VMware (referencia) ​

Bottlerocket solo es compatible en entornos VMware (v1.37.0+, solo x86_64).

  • Usa settings.toml en lugar de nodeadm para la configuración
  • Flujo de trabajo de despliegue con govc: clonar plantilla → inyectar user-data → encender

Para una configuración TOML detallada de Bottlerocket, consulte 04-node-bootstrap.md.

Comparación de configuración de Credential Provider ​

Configuración basada en nodeadm (Ubuntu/RHEL/AL2023) ​

yaml
# nodeconfig.yaml - SSM method
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name: my-cluster
    region: us-west-2
  hybrid:
    ssm:
      activationCode: <activation-code>
      activationId: <activation-id>
yaml
# nodeconfig.yaml - IAM Roles Anywhere method
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name: my-cluster
    region: us-west-2
  hybrid:
    iamRolesAnywhere:
      trustAnchorArn: arn:aws:rolesanywhere:us-west-2:111122223333:trust-anchor/...
      profileArn: arn:aws:rolesanywhere:us-west-2:111122223333:profile/...
      roleArn: arn:aws:iam::111122223333:role/HybridNodeRole
      certificatePath: /etc/eks/pki/node.crt
      privateKeyPath: /etc/eks/pki/node.key

Configuración basada en Bottlerocket (VMware) ​

toml
# settings.toml - SSM method
[settings.hybrid.ssm]
activation-code = "<activation-code>"
activation-id = "<activation-id>"

[settings.kubernetes]
cluster-name = "my-cluster"
toml
# settings.toml - IAM Roles Anywhere method
[settings.hybrid.iam-roles-anywhere]
trust-anchor-arn = "arn:aws:rolesanywhere:..."
profile-arn = "arn:aws:rolesanywhere:..."
role-arn = "arn:aws:iam::..."
certificate-path = "/etc/eks/pki/node.crt"
private-key-path = "/etc/eks/pki/node.key"

Guía de selección de Credential Provider ​

CondiciónProveedor recomendado
Sin infraestructura PKISSM
Infraestructura PKI existenteIAM Roles Anywhere
Se necesitan nombres de nodo personalizadosIAM Roles Anywhere
Entorno air-gappedIAM Roles Anywhere
Configuración simple, internet disponibleSSM

Automatización de provisioning a gran escala ​

Configuración de infraestructura de PXE Boot ​

┌─────────────────────────────────────────────────────────┐
│                    PXE Boot Server                       │
├─────────────────────────────────────────────────────────┤
│  DHCP Server                                            │
│  ├── IP address allocation                              │
│  ├── next-server: TFTP server address                   │
│  └── filename: pxelinux.0                              │
├─────────────────────────────────────────────────────────┤
│  TFTP Server                                            │
│  ├── pxelinux.0 (bootloader)                           │
│  ├── vmlinuz (kernel)                                   │
│  └── initrd.img (initial RAM disk)                     │
├─────────────────────────────────────────────────────────┤
│  HTTP Server                                            │
│  ├── OS installation images                             │
│  ├── Autoinstall/Kickstart config files                │
│  └── nodeadm binary                                     │
└─────────────────────────────────────────────────────────┘

Ansible Automation Playbook ​

yaml
# provision-hybrid-nodes.yaml
---
- hosts: hybrid_nodes
  become: true
  vars:
    k8s_version: "1.31"
    cred_provider: "ssm"
    cluster_name: "my-cluster"
    region: "us-west-2"

  tasks:
    - name: Download nodeadm
      get_url:
        url: https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/amd64/nodeadm
        dest: /usr/local/bin/nodeadm
        mode: '0755'

    - name: Install EKS components
      command: >
        nodeadm install {{ k8s_version }}
        --credential-provider {{ cred_provider }}
        {% if ansible_distribution == 'RedHat' %}--containerd-source docker{% endif %}
      args:
        creates: /usr/bin/kubelet

    - name: Deploy node configuration
      template:
        src: nodeconfig.yaml.j2
        dest: /etc/eks/nodeconfig.yaml
        mode: '0600'

    - name: Initialize node
      command: nodeadm init --config-source file:///etc/eks/nodeconfig.yaml
      register: init_result
      changed_when: init_result.rc == 0

Para obtener información detallada sobre la gestión de fleets, consulte 07-node-lifecycle.md.

Estrategias de migración ​

VMware → Bare Metal + EKS Hybrid Nodes ​

Fase 1: Crear infraestructura paralela ​

  • Despliegue el cluster EKS y la infraestructura de hybrid nodes junto con VMware
  • Configure la conectividad de red (Direct Connect/VPN)
  • Bottlerocket en VMware puede coexistir durante el período de transición

Fase 2: Containerizar cargas de trabajo ​

  • Migre cargas de trabajo basadas en VM a containers
  • Configure drivers CSI antes de migrar cargas de trabajo stateful
  • Considere migrar bases de datos a servicios administrados de AWS

Fase 3: Transición de red ​

  • Transición de NSX-T a Cilium BGP
  • Migre las configuraciones de load balancer e ingress
  • Actualice registros DNS

Fase 4: Retirar VMware ​

  • Verifique que todas las cargas de trabajo se hayan migrado
  • Termine las licencias de VMware
  • Recicle o retire el hardware

OpenShift → EKS Hybrid Nodes ​

Mapeo de conceptos ​

OpenShiftEKS Hybrid Nodes
RouteIngress / Gateway API
SCC (Security Context Constraints)PSS (Pod Security Standards)
OLM (Operator Lifecycle Manager)Helm / EKS Add-ons
MachineSetnodeadm + Ansible
ImageStreamECR
BuildConfigCI/CD externo (CodeBuild, GitHub Actions)
DeploymentConfigDeployment (Kubernetes estándar)

Checklist de migración de cargas de trabajo ​

  • [ ] Convertir Routes a Ingress o Gateway API
  • [ ] Mapear SCCs a PSS para la configuración de seguridad de Pods
  • [ ] Reemplazar Operators gestionados por OLM con Helm Charts o EKS Add-ons
  • [ ] Cambiar referencias de ImageStream a URLs de imágenes de ECR
  • [ ] Reconfigurar BuildConfigs como pipelines de GitHub Actions/CodeBuild
  • [ ] Convertir DeploymentConfigs a Deployments estándar
  • [ ] Revisar service accounts y configuraciones de RBAC

Migración por fases ​

  1. Fase de evaluación: Cree un inventario de las cargas de trabajo actuales de OpenShift
  2. Fase piloto: Migre cargas de trabajo no críticas a EKS Hybrid Nodes
  3. Fase de transición: Migre secuencialmente las cargas de trabajo críticas
  4. Fase de finalización: Retire el cluster OpenShift

Verificación posterior a la instalación ​

bash
#!/bin/bash
# verify-bare-metal.sh

echo "=== OS Level Verification ==="
# Check OS version
cat /etc/os-release

# Check kernel version
uname -r

# Check containerd status
systemctl status containerd

# Check nodeadm version
nodeadm version

echo "=== EKS Integration Verification ==="
# Install and initialize
sudo nodeadm install 1.31 --credential-provider ssm
sudo nodeadm init --config-source file://nodeconfig.yaml

# Verify node from cluster
kubectl get nodes -l eks.amazonaws.com/compute-type=hybrid

# Check node details
kubectl describe node <node-name> | grep -A 5 "Labels:"

Para obtener información detallada sobre el proceso de bootstrap, consulte 04-node-bootstrap.md.

Solución de problemas ​

ProblemaSíntomaSolución
Falla de PXE bootEl nodo no arranca desde la redVerifique la configuración DHCP/TFTP, el orden de arranque del BIOS, el cable de red
Timeout de AutoinstallLa instalación de Ubuntu se cuelgaVerifique la sintaxis YAML de cloud-init, revise la accesibilidad del servidor HTTP
Error de KickstartLa instalación de RHEL fallaValide la sintaxis de ks.cfg, revise la accesibilidad del medio
containerd en Ubuntu 24.04Los Pods no finalizanActualice containerd a v1.7.19+, reinicie para AppArmor
containerd en RHELLa instalación fallaUse el flag --containerd-source docker
nodeadm init fallaTimeout de conexiónVerifique la conectividad VPN/DX, revise los puertos del firewall

< Anterior: Operaciones y mantenimiento | Tabla de contenidos | Siguiente: Hybrid Nodes Gateway >

Pregunta a la documentación

Enter envía, Shift+Enter añade una línea.