Referência do nodeadm para nós híbridos - Amazon EKS

Ajudar a melhorar esta página

Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.

Referência do nodeadm para nós híbridos

A CLI do Amazon EKS Hybrid Nodes (nodeadm) usada para o gerenciamento do ciclo de vida dos nós híbridos difere da versão do nodeadm usada para inicializar instâncias do Amazon EC2 como nós nos clusters do Amazon EKS. Siga a documentação e as referências para a versão apropriada do nodeadm. Esta página de documentação é para a versão do nodeadm para nós híbridos, e a versão do nodeadm para nós híbridos está disponível no repositório eks-hybrid no GitHub. Consulte a documentação da AMI do Amazon EKS: nodeadm para a versão do nodeadm usada para instâncias do Amazon EC2.

Faça download do nodeadm

A versão de nós híbridos do nodeadm está hospedada no Amazon S3 com o Amazon CloudFront na frente. Para instalar nodeadm em cada host on-premises, você pode executar o comando a seguir nos hosts on-premises.

Para hosts x86_64:

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

Para hosts ARM

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

Adicione uma permissão de arquivo executável ao binário baixado em cada host.

chmod +x nodeadm

Comandos

Importante

Você deve executar nodeadm com um usuário que tenha privilégios root/sudo.

Instalar

O comando install é usado para instalar os artefatos e dependências necessários para executar e unir nós híbridos a um cluster do Amazon EKS. O comando install pode ser executado individualmente em cada nó híbrido ou durante os pipelines de criação de imagens para pré-instalar as dependências dos nós híbridos nas imagens do sistema operacional.

Uso

nodeadm install [KUBERNETES_VERSION] [flags]

Argumentos posicionais

(Obrigatório) KUBERNETES_VERSION A versão major.minor do Kubernetes do EKS a ser instalada, por exemplo, 1.31

Sinalizadores

Name Obrigatório Descrição

-p,

--credential-provider

VERDADEIRO

Provedor de credenciais a ser instalado. Os valores compatíveis são iam-ra e ssm. Consulte Preparar as credenciais para nós híbridos para obter mais informações.

-s,

--containerd-source

FALSE

Fonte para containerd. O nodeadm é compatível com a instalação de containerd do distro do sistema operacional, os pacotes do Docker e a omissão da instalação de containerd.

Valores

distro: este é o valor padrão. O nodeadm vai instalar o pacote containerd distribuído pelo sistema operacional do nó. O distro não é um valor compatível com sistemas operacionais Red Hat Enterprise Linux (RHEL).

docker: o nodeadm vai instalar o pacote containerd criado e distribuído pelo Docker. O docker não é um valor compatível com o Amazon Linux 2023.

none: o nodeadm não vai instalar o pacote containerd. Você deve instalar containerd manualmente antes de executar nodeadm init.

-r,

--region

FALSE

Especifica a região da AWS para baixar artefatos, como o Agente SSM. O padrão é us-west-2.

-t,

--timeout

FALSE

Duração máxima do comando de instalação. A entrada segue o formato de duração. Por exemplo, 1h23m. O tempo limite de download padrão para o comando de instalação é definido como 20 minutos.

-h, --help

FALSE

Exibe a mensagem de ajuda com os parâmetros de sinalização, subcomando e valor posicional disponíveis.

Exemplos

Instale a versão 1.31 do Kubernetes com o AWS Systems Manager (SSM) como o provedor de credenciais

nodeadm install 1.31 --credential-provider ssm

Instale a versão 1.31 do Kubernetes com o AWS Systems Manager (SSM) como o provedor de credenciais, e o Docker como a fonte do containerd, com um tempo limite de download de 20 minutos.

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

Instale a versão 1.31 do Kubernetes com o AWS IAM Roles Anywhere como o provedor de credenciais

nodeadm install 1.31 --credential-provider iam-ra

Arquivos instalados

Artifact Path

CLI do IAM Roles Anywhere

/usr/local/bin/aws_signing_helper

Binário do Kubelet

/usr/bin/kubelet

Binário do Kubectl

usr/local/bin/kubectl

Provedor de credenciais do ECR

/etc/eks/image-credential-provider/ecr-credential-provider

AWS IAM Authenticator

/usr/local/bin/aws-iam-authenticator

CLI de configuração do SSM

/opt/ssm/ssm-setup-cli

SSM Agent

No Ubuntu: /snap/amazon-ssm-agent/current/amazon-ssm-agent

No RHEL e AL2023: /usr/bin/amazon-ssm-agent

Containerd

No Ubuntu e AL2023: /usr/bin/containerd

No RHEL: /bin/containerd

Iptables

No Ubuntu e AL2023: /usr/sbin/iptables

No RHEL: /sbin/iptables

Plug-ins da CNI

/opt/cni/bin

rastreador de artefatos instalado

/opt/nodeadm/tracker

Verificação de configuração

O comando config check verifica se há erros na configuração do nó fornecido. Esse comando pode ser usado para verificar e validar a exatidão de um arquivo de configuração de nó híbrido.

Uso

nodeadm config check [flags]

Sinalizadores

Name Obrigatório Descrição

-c,

--config-source

VERDADEIRO

Fonte da configuração do nodeadm. Para nós híbridos, a entrada deve seguir um URI com esquema de arquivo.

-h, --help

FALSE

Exibe a mensagem de ajuda com os parâmetros de sinalização, subcomando e valor posicional disponíveis.

Exemplos

nodeadm config check --config-source file:///root/nodeConfig.yaml

Init

O comando init inicia e conecta o nó híbrido com o cluster configurado do Amazon EKS.

Uso

nodeadm init [flags]

Sinalizadores

Name Obrigatório Descrição

-c,

--config-source

VERDADEIRO

Fonte de configuração do nodeadm. Para nós híbridos, a entrada deve seguir um URI com esquema de arquivo.

-s,

--skip

FALSE

Fases de init a serem ignoradas. Não é recomendável pular nenhuma das fases, a menos que isso ajude a corrigir um problema.

Valores

install-validation vai ignorar a verificação se o comando de instalação anterior tiver sido executado com êxito.

cni-validation vai ignorar a verificação se as portas VXLAN da CNI do Cilium ou do Calico estiverem abertas, caso o firewall esteja habilitado no nó

-h, --help

FALSE

Exibe a mensagem de ajuda com os parâmetros de sinalização, subcomando e valor posicional disponíveis.

Exemplos

nodeadm init --config-source file://root/nodeConfig.yaml

Arquivos instalados

Name Path

kubeconfig do Kubelet

/var/lib/kubelet/kubeconfig

Configuração do Kubelet

/etc/kubernetes/kubelet/config.json

Unidade systemd do Kubelet

/etc/systemd/system/kubelet.service

Configuração do provedor de credenciais de imagem

/etc/eks/image-credential-provider/config.json

Arquivo env do Kubelet

/etc/eks/kubelet/environment

Certificados do Kubelet

/etc/kubernetes/pki/ca.crt

Configuração do containerd

/etc/containerd/config.toml

Configuração dos módulos do containerd do kernel

/etc/modules-load.d/contianerd.conf

Arquivo de configuração da AWS

/etc/aws/hybrid/config

Arquivo de credenciais da AWS (se habilitar arquivo de credenciais)

/eks-hybrid/.aws/credentials

Unidade do sistema auxiliar de assinatura da AWS

/etc/systemd/system/aws_signing_helper_update.service

Arquivo de configuração Sysctl

/etc/sysctl.d/99-nodeadm.conf

Arquivos do gerenciador Apt para repositório Docker (se a fonte do containerd for o Docker)

Ca-certificates

/etc/ssl/certs/ca-certificates.crt

Arquivo de chaves GPG

/etc/apt/keyrings/docker.asc

Arquivo de origem do repositório do Docker

/etc/apt/sources.list.d/docker.list

Upgrade

O comando nodeadm upgrade atualiza todos os artefatos instalados para a versão mais recente e inicializa o nó para configurar os artefatos atualizados e unir o cluster do EKS na AWS. O upgrade é um comando de interrupção para as workloads em execução no nó. Mova as workloads para outro nó antes de executar o comando upgrade.

Uso

nodeadm upgrade [KUBERNETES_VERSION] [flags]

Argumentos posicionais

(Obrigatório) KUBERNETES_VERSION A versão major.minor do Kubernetes do EKS a ser instalada, por exemplo, 1.31

Sinalizadores

Name Obrigatório Descrição

-c,

--config-source

VERDADEIRO

Fonte de configuração do nodeadm. Para nós híbridos, a entrada deve seguir um URI com esquema de arquivo.

-t,

--timeout

FALSE

Tempo limite para download de artefatos. A entrada segue o formato de duração. Por exemplo, 1h23m. O tempo limite de download padrão para o comando de atualização é definido para dez minutos.

-s,

--skip

FALSE

Fases da atualização a serem ignoradas. Não é recomendável pular nenhuma fase, a menos que isso ajude a corrigir um problema.

Valores

pod-validation ignora a verificação se todos os pods não estão em execução no nó, exceto conjuntos de daemons e pods estáticos.

node-validation ignora a verificação se o nó foi isolado.

init-validation ignora a verificação se o nó foi inicializado com sucesso antes de executar a atualização.

-h, --help

FALSE

Exibe a mensagem de ajuda com os parâmetros de sinalização, subcomando e valor posicional disponíveis.

Exemplos

nodeadm upgrade 1.31 --config-source file:///root/nodeConfig.yaml
nodeadm upgrade 1.31 --config-source file:///root/nodeConfig.yaml --timeout 20m

Desinstalar

O comando nodeadm uninstall interrompe e remove os artefatos do nodeadm instalados durante a nodeadm install, incluindo o kubelet e o containerd. Observe que o comando uninstall não drena nem exclui os nós híbridos do cluster. Você deve executar as operações de drenagem e exclusão separadamente. Consulte Remoção de nós híbridos para obter mais informações. Por padrão, nodeadm uninstall não prosseguirá se houver pods restantes no nó. Da mesma forma, nodeadm uninstall não remove dependências da CNI ou dependências de outros complementos do Kubernetes que você executa no cluster. Para remover totalmente a instalação da CNI do host, consulte as instruções em Configurar uma CNI para nós híbridos. Se você estiver usando ativações híbridas do AWS SSM como o provedor de credenciais on-premises, o comando nodeadm uninstall vai cancelar o registro dos hosts como instâncias gerenciadas pelo AWS SSM.

Uso

nodeadm uninstall [flags]

Sinalizadores

Name Obrigatório Descrição

-s,

--skip

FALSE

Fases da atualização a serem ignoradas. Não é recomendável pular nenhuma fase, a menos que isso ajude a corrigir um problema.

Valores

pod-validation ignora a verificação se todos os pods não estão em execução no nó, exceto conjuntos de daemons e pods estáticos.

node-validation ignora a verificação se o nó foi isolado.

init-validation ignora a verificação se o nó foi inicializado com sucesso antes de executar a atualização.

-h,

--help

FALSE

Exibe a mensagem de ajuda com os parâmetros de sinalização, subcomando e valor posicional disponíveis.

Exemplos

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

Depure

O comando nodeadm debug pode ser usado para solucionar problemas de nós híbridos não íntegros ou mal configurados. Ele valida se os requisitos a seguir estão em vigor.

  • O nó tem acesso de rede às APIs da AWS necessárias para obter credenciais.

  • O nó é capaz de obter credenciais da AWS para o perfil do IAM configurado de nós híbridos.

  • O nó tem acesso de rede ao endpoint da API do Kubernetes do EKS e à validade do certificado do endpoint da API do Kubernetes do EKS.

  • O nó é capaz de se autenticar com o cluster do EKS, sua identidade no cluster é válida e o nó tem acesso ao cluster do EKS por meio da VPC configurada para o cluster do EKS.

Se forem encontrados erros, a saída do comando vai sugerir etapas de solução de problemas. Certas etapas de validação mostram processos secundários. Se estes falharem, a saída será mostrada em uma seção stderr abaixo do erro de validação.

Uso

nodeadm debug [flags]

Sinalizadores

Name Obrigatório Descrição

-c, --config-source

VERDADEIRO

Fonte de configuração do nodeadm. Para nós híbridos, a entrada deve seguir um URI com esquema de arquivo.

--no-color

FALSE

Desativa a saída de cores. Útil para automação.

-h, --help

FALSE

Exibe a mensagem de ajuda com os parâmetros de sinalização, subcomando e valor posicional disponíveis.

Exemplos

nodeadm debug --config-source file://nodeConfig.yaml

Referência da API de configuração de Node

Ativações híbridas do AWS SSM

Veja a seguir um exemplo de nodeConfig.yaml ao usar ativações híbridas do AWS SSM para credenciais de nós 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

AWS IAM Roles Anywhere

Veja a seguir um exemplo de nodeConfig.yaml do AWS IAM Roles Anywhere para credenciais de nós híbridos.

Ao usar o AWS IAM Roles Anywhere como seu provedor de credenciais on-premises, o nodeName que você usa na configuração do nodeadm deve estar alinhado com as permissões que você definiu como escopo para o perfil do IAM de nós híbridos. Por exemplo, se as permissões para o perfil do IAM de nós híbridos só permitirem que o AWS IAM Roles Anywhere assuma o perfil quando o nome da sessão do perfil for igual ao CN do certificado do host, o nodeName na configuração do nodeadm deverá ser o mesmo que o CN dos certificados. O nodeName que você usa não pode exceder 64 caracteres. Para obter mais informações, consulte Preparar as credenciais para nós 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: 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

(Opcional) Configuração do Kubelet

Você pode passar a configuração e os sinalizadores do kubelet na configuração do nodeadm. Veja o exemplo abaixo para saber como adicionar um rótulo de nó abc.amazonaws.com/test-label e como configurar para definir shutdownGracePeriod como 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

(Opcional) Configuração do containerd

Você pode passar uma configuração personalizada do containerd na configuração do nodeadm. A configuração do containerd para nodeadm aceita TOML em linha. Veja o exemplo abaixo para saber como configurar o containerd para desabilitar a exclusão de camadas de imagens descompactadas no armazenamento de conteúdo do 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

Você também pode usar a configuração do containerd para habilitar a compatibilidade com o SELinux. Com o SELinux habilitado no containerd, certifique-se de que os pods programados no nó tenham o securityContext e o seLinuxOptions adequados habilitados. Você pode encontrar mais informações sobre como configurar um contexto de segurança na documentação do Kubernetes.

nota

O Red Hat Enterprise Linux (RHEL) 8 e o RHEL 9 têm o SELinux habilitado por padrão e configurado como estrito no host. Por padrão, o Amazon Linux 2023 tem o SELinux habilitado e configurado para o modo permissivo. Quando o SELinux está configurado para o modo permissivo no host, ativá-lo no containerd não bloqueará as solicitações, mas as registrará em log de acordo com a configuração do SELinux no 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