

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Referencia de `nodeadm` de nodos híbridos
<a name="hybrid-nodes-nodeadm"></a>

La CLI (`nodeadm`) de los nodos híbridos de Amazon EKS simplifica la instalación, la configuración, el registro y la desinstalación de los componentes de los nodos híbridos. Puede incluir `nodeadm` en las imágenes de su sistema operativo para automatizar el arranque de los nodos híbridos; consulte [Cómo preparar el sistema operativo para los nodos híbridos](hybrid-nodes-os.md) para obtener más información.

La versión `nodeadm` para los nodos híbridos es distinta de la versión de `nodeadm` utilizada para arrancar instancias de Amazon EC2 como nodos en clústeres de Amazon EKS. Siga la documentación y las referencias para obtener la versión de `nodeadm` adecuada. Esta página de documentación es para la versión `nodeadm` de los nodos híbridos.

El código fuente de `nodeadm` de los nodos híbridos se publica en el repositorio de GitHub https://github.com/aws/eks-hybrid.

**importante**  
Debe ejecutar `nodeadm` con un usuario que tenga privilegios raíz/sudo.

## Descargue `nodeadm`
<a name="_download_nodeadm"></a>

La versión de nodos híbridos de `nodeadm` está alojada en Amazon S3, con Amazon CloudFront como frontend. Para instalar `nodeadm` en cada host en las instalaciones, puede ejecutar el siguiente comando desde los hosts en las instalaciones.

 **Para los hosts x86\$164** 

```
curl -OL 'https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/amd64/nodeadm'
```

 **Para los hosts ARM** 

```
curl -OL 'https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/arm64/nodeadm'
```

Agregue permiso de archivo ejecutable al binario descargado en cada host.

```
chmod +x nodeadm
```

## `nodeadm install`
<a name="_nodeadm_install"></a>

El comando `nodeadm install` se utiliza para instalar los artefactos y dependencias necesarios para ejecutar y unir nodos híbridos a un clúster de Amazon EKS. El comando `nodeadm install` se puede ejecutar de forma individual en cada nodo híbrido o se puede ejecutar durante las canalizaciones de creación de imágenes para preinstalar las dependencias de los nodos híbridos en las imágenes del sistema operativo.

 **Uso** 

```
nodeadm install [KUBERNETES_VERSION] [flags]
```

 **Argumentos de posición** 

(Obligatorio) `KUBERNETES_VERSION` La versión major.minor de Kubernetes de EKS que se va a instalar, por ejemplo `1.32` 

 **Indicadores** 


| Nombre | Obligatorio | Descripción | 
| --- | --- | --- | 
|   `-p`,  `--credential-provider`   |  TRUE  |  Proveedor de credenciales para instalar. Los valores admitidos son `iam-ra` y `ssm`. Para obtener más información, consulte [Cómo preparar las credenciales para los nodos híbridos](hybrid-nodes-creds.md).  | 
|   `-s`,  `--containerd-source`   |  FALSO  |  Origen de `containerd`. `nodeadm` admite la instalación de `containerd` desde la distribución del sistema operativo, los paquetes de Docker y la omisión de `containerd` de la instalación.  **Valores**   `distro`: es el valor predeterminado. `nodeadm` instalará el paquete de `containerd` más reciente distribuido por el sistema operativo del nodo que sea compatible con la versión de Kubernetes de EKS. `distro` no es un valor compatible con los sistemas operativos Red Hat Enterprise Linux (RHEL).  `docker`: `nodeadm` instalará el paquete de `containerd` más reciente creado y distribuido por Docker que sea compatible con la versión de Kubernetes de EKS. `docker` no es un valor compatible con Amazon Linux 2023.  `none`: `nodeadm` no instalará el paquete `containerd`. Debe instalar `containerd` manualmente antes de ejecutar `nodeadm init`.  | 
|   `-r`,  `--region`   |  FALSO  |  Especifica la región de AWS para descargar artefactos, como el agente SSM. El valor predeterminado es `us-west-2`.  | 
|   `-t`,  `--timeout`   |  FALSO  |  Duración máxima del comando de instalación. La entrada sigue el formato de duración. Por ejemplo: . `1h23m`. El tiempo de espera de descarga predeterminado del domando de instalación está establecido en 20 minutos.  | 
|   `-h`, `--help`   |  FALSO  |  Muestra un mensaje de ayuda con los parámetros disponibles de indicadores, subcomandos y valores posicionales.  | 

 **Ejemplos** 

Instale la versión `1.32` de Kubernetes con AWS Systems Manager (SSM) como proveedor de credenciales

```
nodeadm install 1.32 --credential-provider ssm
```

Instale la versión `1.32` de Kubernetes con AWS Systems Manager (SSM) como proveedor de credenciales y Docker como origen de containerd, con un tiempo de espera de descarga de 20 minutos.

```
nodeadm install 1.32 --credential-provider ssm --containerd-source docker --timeout 20m
```

Instale la versión `1.32` de Kubernetes con AWS IAM Roles Anywhere como proveedor de credenciales

```
nodeadm install 1.32 --credential-provider iam-ra
```

## `nodeadm config check`
<a name="_nodeadm_config_check"></a>

El comando `nodeadm config check` comprueba si hay errores en la configuración de nodo proporcionada. Este comando se puede utilizar para verificar un archivo de configuración de nodo híbrido y validar si es correcto.

 **Uso** 

```
nodeadm config check [flags]
```

 **Flags** 


| Nombre | Obligatorio | Descripción | 
| --- | --- | --- | 
|   `-c`,  `--config-source`   |  TRUE  |  Origen de la configuración de nodeadm. En el caso de los nodos híbridos, la entrada debe seguir un URI con un esquema de archivos.  | 
|   `-h`, `--help`   |  FALSO  |  Muestra un mensaje de ayuda con los parámetros disponibles de indicadores, subcomandos y valores posicionales.  | 

 **Ejemplos** 

```
nodeadm config check -c file://nodeConfig.yaml
```

## `nodeadm init`
<a name="_nodeadm_init"></a>

El comando `nodeadm init` inicia y conecta el nodo híbrido con el clúster de Amazon EKS configurado. Consulte [Configuración de nodo para activaciones híbridas de SSM](#hybrid-nodes-node-config-ssm) o [Configuración de nodos para IAM Roles Anywhere](#hybrid-nodes-node-config-iamra) para obtener detalles sobre cómo configurar el archivo `nodeConfig.yaml`.

 **Uso** 

```
nodeadm init [flags]
```

 **Flags** 


| Nombre | Obligatorio | Descripción | 
| --- | --- | --- | 
|   `-c`,  `--config-source`   |  TRUE  |  Origen de la configuración de `nodeadm`. En el caso de los nodos híbridos, la entrada debe seguir un URI con un esquema de archivos.  | 
|   `-s`,  `--skip`   |  FALSO  |  Las fases de `init` que se van a omitir. No se recomienda omitir ninguna de las fases a menos que ayude a solucionar un problema.  **Valores**   `install-validation` omite la verificación de si el comando de instalación anterior se ejecutó correctamente.  `cni-validation` omite la verificación de si los puertos VXLAN de las CNI Cilium o Calico están abiertos cuando el firewall está habilitado en el nodo.  `node-ip-validation` omite la verificación de si la IP del nodo se encuentra dentro de un CIDR en las redes de nodos remotos  | 
|   `-h`, `--help`   |  FALSO  |  Muestra un mensaje de ayuda con los parámetros disponibles de indicadores, subcomandos y valores posicionales.  | 

 **Ejemplos** 

```
nodeadm init -c file://nodeConfig.yaml
```

## `nodeadm upgrade`
<a name="_nodeadm_upgrade"></a>

El comando `nodeadm upgrade` actualiza todos los artefactos instalados a la versión más reciente y arranca el nodo para configurar los artefactos actualizados y unirlos al clúster de EKS en AWS. La actualización es un comando que interrumpe las cargas de trabajo que se ejecutan en el nodo. Traslade las cargas de trabajo a otro nodo antes de ejecutar la actualización.

 **Uso** 

```
nodeadm upgrade [KUBERNETES_VERSION] [flags]
```

 **Argumentos de posición** 

(Obligatorio) `KUBERNETES_VERSION` La versión major.minor de Kubernetes de EKS que se va a instalar, por ejemplo `1.32` 

 **Indicadores** 


| Nombre | Obligatorio | Descripción | 
| --- | --- | --- | 
|   `-c`,  `--config-source`   |  TRUE  |  Origen de la configuración de `nodeadm`. En el caso de los nodos híbridos, la entrada debe seguir un URI con un esquema de archivos.  | 
|   `-t`,  `--timeout`   |  FALSO  |  Tiempo de espera para descargar artefactos. La entrada sigue el formato de duración. Por ejemplo, 1h23m. El tiempo de espera de descarga predeterminado del domando de actualización está establecido en 10 minutos.  | 
|   `-s`,  `--skip`   |  FALSO  |  Las fases de la actualización que se van a omitir. No se recomienda omitir ninguna de las fases a menos que ayude a solucionar un problema.  **Valores**   `pod-validation` omite comprobar si todos los pods se ejecutan en el nodo, excepto los conjuntos de daemon y los pods estáticos.  `node-validation` omite comprobar si el nodo ha sido acordonado.  `init-validation` omite comprobar si el nodo se ha inicializado correctamente antes de ejecutar la actualización.  `containerd-major-version-upgrade` impide las actualizaciones de las versiones principales de containerd durante la actualización del nodo.  | 
|   `-h`, `--help`   |  FALSO  |  Muestra un mensaje de ayuda con los parámetros disponibles de indicadores, subcomandos y valores posicionales.  | 

 **Ejemplos** 

```
nodeadm upgrade 1.32 -c file://nodeConfig.yaml
```

```
nodeadm upgrade 1.32 -c file://nodeConfig.yaml --timeout 20m
```

## `nodeadm uninstall`
<a name="_nodeadm_uninstall"></a>

El comando `nodeadm uninstall` detiene y elimina los artefactos que `nodeadm` instala durante la `nodeadm install`, incluidos el kubelet y el containerd. Tenga en cuenta que el comando de desinstalación no vacía ni elimina los nodos híbridos del clúster. Debe ejecutar las operaciones de vaciado y eliminación por separado. Consulte [Cómo eliminar nodos híbridos](hybrid-nodes-remove.md) para obtener más información. De forma predeterminada, `nodeadm uninstall` no procederá si quedan pods en el nodo. Del mismo modo, `nodeadm uninstall` no elimina las dependencias del CNI ni las dependencias de otros complementos de Kubernetes que ejecute en el clúster. Para eliminar por completo la instalación de CNI del host, consulte las instrucciones que aparecen en [Configuración de una CNI para nodos híbridos](hybrid-nodes-cni.md). Si utiliza activaciones híbridas de AWS SSM como proveedor de credenciales en las instalaciones, el comando `nodeadm uninstall` anula el registro de los hosts como instancias administradas por AWS SSM.

 **Uso** 

```
nodeadm uninstall [flags]
```

 **Flags** 


| Nombre | Obligatorio | Descripción | 
| --- | --- | --- | 
|   `-s`,  `--skip`   |  FALSO  |  Las fases de desinstalación que se van a omitir. No se recomienda omitir ninguna de las fases a menos que ayude a solucionar un problema.  **Valores**   `pod-validation` omite comprobar si todos los pods se ejecutan en el nodo, excepto los conjuntos de daemon y los pods estáticos.  `node-validation` omite comprobar si el nodo ha sido acordonado.  `init-validation` omite comprobar si el nodo se ha inicializado correctamente antes de ejecutar la desinstalación.  | 
|   `-h`,  `--help`   |  FALSO  |  Muestra un mensaje de ayuda con los parámetros disponibles de indicadores, subcomandos y valores posicionales.  | 
|   `-f`,  `--force`   |  FALSO  |  Fuerce la eliminación de directorios adicionales que puedan contener archivos restantes de los componentes de Kubernetes y CNI.  **ADVERTENCIA**  Esto eliminará todo el contenido de los directorios predeterminados de Kubernetes y CNI (`/var/lib/cni`, `/etc/cni/net.d`, etc.). No utilice esta marca si almacena sus propios datos en estas ubicaciones. A partir de nodeadm `v1.0.9`, el comando `./nodeadm uninstall --skip node-validation,pod-validation --force` ya no elimina el directorio `/var/lib/kubelet`. Esto se debe a que puede contener volúmenes de Pod y directorios de subrutas de volúmenes que, a veces, incluyen el sistema de archivos del nodo montado.  **Consejos para un manejo seguro**  - La eliminación de rutas montadas puede llevar a la eliminación accidental del sistema de archivos del nodo montado real. Antes de eliminar manualmente el directorio `/var/lib/kubelet`, inspeccione cuidadosamente todos los montajes activos y desmonte los volúmenes de forma segura para evitar la pérdida de datos.  | 

 **Ejemplos** 

```
nodeadm uninstall
```

```
nodeadm uninstall --skip node-validation,pod-validation
```

## `nodeadm debug`
<a name="_nodeadm_debug"></a>

El comando `nodeadm debug` se puede utilizar para solucionar problemas de nodos híbridos mal configurados o en mal estado. Valida que se cumplan los siguientes requisitos.
+ El nodo tiene acceso de red a las API de AWS necesarias para obtener las credenciales;
+ El nodo puede obtener credenciales de AWS para el rol de IAM de nodos híbridos configurado;
+ El nodo tiene acceso de red al punto de conexión de la API de Kubernetes de EKS y la validez del certificado de punto de conexión de la API de Kubernetes de EKS;
+ El nodo se puede autenticar con el clúster de EKS; su identidad en el clúster es válida; y cuenta con acceso al clúster de EKS a través de la VPC configurada para el clúster de EKS.

Si se encuentran errores, el resultado del comando sugiere los pasos para solucionar el problema. Algunos pasos de validación muestran los procesos secundarios. Si fallan, el resultado aparece en una sección stderr debajo del error de validación.

 **Uso** 

```
nodeadm debug [flags]
```

 **Flags** 


| Nombre | Obligatorio | Descripción | 
| --- | --- | --- | 
|   `-c`, `--config-source`   |  TRUE  |  Origen de la configuración de `nodeadm`. En el caso de los nodos híbridos, la entrada debe seguir un URI con un esquema de archivos.  | 
|   `--no-color`   |  FALSO  |  Desactiva la salida en color. Útil para la automatización.  | 
|   `-h`, `--help`   |  FALSO  |  Muestra un mensaje de ayuda con los parámetros disponibles de indicadores, subcomandos y valores posicionales.  | 

 **Ejemplos** 

```
nodeadm debug -c file://nodeConfig.yaml
```

## Ubicaciones de archivos de nodeadm
<a name="_nodeadm_file_locations"></a>

### instalación de nodeadm
<a name="_nodeadm_install_2"></a>

Cuando se ejecuta `nodeadm install`, se configuran los siguientes archivos y ubicaciones de archivos.


| Artefacto | Ruta | 
| --- | --- | 
|  CLI de IAM Roles Anywhere  |  /usr/local/bin/aws\$1signing\$1helper  | 
|  Kubelet binario  |  /usr/bin/kubelet  | 
|  Kubectl binario  |  usr/local/bin/kubectl  | 
|  Proveedor de credenciales de ECR  |  /etc/eks/image-credential-provider/ecr-credential-provider  | 
|   Autenticador de AWS IAM  |  /usr/local/bin/aws-iam-authenticator  | 
|  CLI de configuración de SSM  |  /opt/ssm/ssm-setup-cli  | 
|  SSM Agent  |  En Ubuntu: /snap/amazon-ssm-agent/current/amazon-ssm-agent En RHEL y AL2023: /usr/bin/amazon-ssm-agent  | 
|  Containerd  |  En Ubuntu y AL2023: /usr/bin/containerd En RHEL: /bin/containerd  | 
|  Iptables  |  En Ubuntu y AL2023: /usr/sbin/iptables En RHEL: /sbin/iptables  | 
|  Complementos de CNI  |  /opt/cni/bin  | 
|  rastreador de artefactos instalados  |  /opt/nodeadm/tracker  | 

### nodeadm init
<a name="_nodeadm_init_2"></a>

Cuando se ejecuta `nodeadm init`, se configuran los siguientes archivos y ubicaciones de archivos.


| Nombre | Ruta | 
| --- | --- | 
|  kubeconfig de Kubelet  |  /var/lib/kubelet/kubeconfig  | 
|  Configuración de Kubelet  |  /etc/kubernetes/kubelet/config.json  | 
|  Unidad systemd de Kubelet  |  /etc/systemd/system/kubelet.service  | 
|  Configuración del proveedor de credenciales de imágenes  |  /etc/eks/image-credential-provider/config.json  | 
|  Archivo env de Kubelet  |  /etc/eks/kubelet/environment  | 
|  Certificados de Kubelet  |  /etc/kubernetes/pki/ca.crt  | 
|  Configuración de containerd  |  /etc/containerd/config.toml  | 
|  Configuración de los módulos del núcleo de containerd  |  /etc/modules-load.d/containerd.conf  | 
|   AWSArchivo de configuración de   |  /etc/aws/hybrid/config  | 
|   Archivo de credenciales de AWS (si está habilitado el archivo de credenciales)  |  /eks-hybrid/.aws/credentials  | 
|   Unidad de sistema auxiliar de firma de AWS  |  /etc/systemd/system/aws\$1signing\$1helper\$1update.service  | 
|  Archivo conf de Sysctl  |  /etc/sysctl.d/99-nodeadm.conf  | 
|  Ca-certificates  |  /etc/ssl/certs/ca-certificates.crt  | 
|  Archivo de clave de Gpg  |  /etc/apt/keyrings/docker.asc  | 
|  Archivo de origen del repositorio de Docker  |  /etc/apt/sources.list.d/docker.list  | 

## Configuración de nodo para activaciones híbridas de SSM
<a name="hybrid-nodes-node-config-ssm"></a>

El siguiente es un `nodeConfig.yaml` de ejemplo al utilizar activaciones híbridas de AWS SSM para credenciales de nodos híbridos.

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:             # Name of the EKS cluster
    region:           # AWS Region where the EKS cluster resides
  hybrid:
    ssm:
      activationCode: # SSM hybrid activation code
      activationId:   # SSM hybrid activation id
```

## Configuración de nodos para IAM Roles Anywhere
<a name="hybrid-nodes-node-config-iamra"></a>

El siguiente es un `nodeConfig.yaml` de ejemplo para nodos híbridos de AWS IAM Roles Anywhere.

Si utiliza AWS IAM Roles Anywhere como proveedor de credenciales en las instalaciones, el `nodeName` que utilice en la configuración de `nodeadm` debe coincidir con los permisos que haya definido para el rol de IAM de nodos híbridos. Por ejemplo, si los permisos para el rol de IAM de nodos híbridos solo permiten que AWS IAM Roles Anywhere asuma el rol cuando el nombre de la sesión del rol es igual al CN del certificado de host, entonces el `nodeName` de la configuración de `nodeadm` debe ser el mismo que el CN de los certificados. El `nodeName` que utilice no puede tener más de 64 caracteres. Para obtener más información, consulte [Cómo preparar las credenciales para los nodos híbridos](hybrid-nodes-creds.md).

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:              # Name of the EKS cluster
    region:            # AWS Region where the EKS cluster resides
  hybrid:
    iamRolesAnywhere:
      nodeName:        # Name of the node
      trustAnchorArn:  # ARN of the IAM Roles Anywhere trust anchor
      profileArn:      # ARN of the IAM Roles Anywhere profile
      roleArn:         # ARN of the Hybrid Nodes IAM role
      certificatePath: # Path to the certificate file to authenticate with the IAM Roles Anywhere trust anchor
      privateKeyPath:  # Path to the private key file for the certificate
```

## Configuración de nodos para personalizar kubelet (opcional)
<a name="hybrid-nodes-nodeadm-kubelet"></a>

Puede transmitir la configuración y los indicadores de kubelet en la configuración de `nodeadm`. Consulte el ejemplo que aparece a continuación sobre cómo agregar una etiqueta de nodo adicional `abc.amazonaws.com/test-label` y configurar para establecer `shutdownGracePeriod` en 30 segundos.

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:             # Name of the EKS cluster
    region:           # AWS Region where the EKS cluster resides
  kubelet:
    config:           # Map of kubelet config and values
       shutdownGracePeriod: 30s
    flags:            # List of kubelet flags
       - --node-labels=abc.company.com/test-label=true
  hybrid:
    ssm:
      activationCode: # SSM hybrid activation code
      activationId:   # SSM hybrid activation id
```

## Configuración de nodos para personalizar containerd (opcional)
<a name="_node_config_for_customizing_containerd_optional"></a>

Puede transmitir la configuración de containerd personalizada en la configuración de `nodeadm`. La configuración de containerd para `nodeadm` acepta TOML en línea. Consulte el ejemplo que aparece a continuación para ver cómo configurar containerd para desactivar la eliminación de capas de imágenes desempaquetadas en el almacén de contenido de containerd.

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:             # Name of the EKS cluster
    region:           # AWS Region where the EKS cluster resides
  containerd:
    config: |         # Inline TOML containerd additional configuration
       [plugins."io.containerd.grpc.v1.cri".containerd]
       discard_unpacked_layers = false
  hybrid:
    ssm:
      activationCode: # SSM hybrid activation code
      activationId:   # SSM hybrid activation id
```

**nota**  
Las versiones 1.x y 2.x de containerd utilizan diferentes formatos de configuración. containerd 1.x usa la versión de configuración 2, mientras que containerd 2.x usa la versión de configuración 3. Aunque containerd 2.x sigue siendo compatible con versiones anteriores de la versión de configuración 2, se recomienda la versión de configuración 3 para obtener un rendimiento óptimo. Compruebe la versión de containerd con `containerd --version` o consulte los registros de instalación de `nodeadm`. Para obtener más información sobre el control de versiones de configuración, consulte https://containerd.io/releases/

Además, puede utilizar la configuración de containerd para habilitar la compatibilidad con SELinux. Con SELinux habilitado en containerd, asegúrese de que los pods programados en el nodo tengan habilitados securityContext y seLinuxOptions adecuados. Puede encontrar más información sobre la configuración de un contexto de seguridad en la [documentación de Kubernetes](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/).

**nota**  
Red Hat Enterprise Linux (RHEL) 8 y RHEL 9 tienen SELinux habilitado de forma predeterminada y establecido en el modo estricto en el host. De forma predeterminada, SELinux está habilitado y configurado en modo permisivo en Amazon Linux 2023. Cuando SELinux está configurado en modo permisivo en el host, al activarlo en containerd no se bloquearán las solicitudes, sino que se hará el registro de acuerdo con la configuración de SELinux en el host.

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:             # Name of the EKS cluster
    region:           # AWS Region where the EKS cluster resides
  containerd:
    config: |         # Inline TOML containerd additional configuration
       [plugins."io.containerd.grpc.v1.cri"]
       enable_selinux = true
  hybrid:
    ssm:
      activationCode: # SSM hybrid activation code
      activationId:   # SSM hybrid activation id
```