Criar nós Amazon Linux no AWS Outposts - Amazon EKS

Ajudar a melhorar esta página

Quer contribuir para este guia do usuário? Escolha o link Editar esta página no GitHub, disponível no painel direito de cada página. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.

Criar nós Amazon Linux no AWS Outposts

Este tópico descreve como iniciar um grupo do Auto Scaling de nós do Amazon Linux em um Outpost que são registrados no cluster do Amazon EKS. O cluster pode estar na Nuvem AWS ou em um Outpost.

  • Um Outpost existente. Para obter mais informações, consulte O que é AWS Outposts.

  • Um cluster do Amazon EKS existente. Para implementar um cluster no AWS Cloud, consulte Criar um cluster do Amazon EKS.. Para implantar um cluster em um Outpost, consulte Crie clusters locais do Amazon EKS em AWS Outposts para alta disponibilidade.

  • Suponha que você esteja criando seus nós em um cluster na nuvem AWS e que tenha sub-redes na região AWS, na qual você tem AWS Outposts, AWS Wavelength ou AWS Local Zones ativados. Assim sendo, essas sub-redes não devem ter sido transmitidas quando você criou o cluster. Se você estiver criando nós em um cluster em um Outpost, deverá ter transmitido uma sub-rede do Outpost ao criar o cluster.

  • (Recomendado para clusters na Nuvem AWS) O complemento Amazon VPC CNI plugin for Kubernetes configurado com seu próprio perfil do IAM que tem a política do IAM necessária anexada a ele. Para ter mais informações, consulte Configurar o plug-in CNI da Amazon VPC para usar IRSA. Clusters locais não são compatíveis com perfis do IAM para contas de serviço.

Você pode criar um grupo de nós do Amazon Linux autogerenciado com eksctl ou AWS Management Console (com um modelo AWS CloudFormation). Você também pode usar o Terraforma.

Você pode criar um cluster local com as seguintes ferramentas descritas nesta página:

eksctl

Para iniciar nós autogerenciados do Linux usando eksctl

  1. Instale a versão 0.199.0 ou posterior da ferramenta de linha de comando da eksctl instalada no seu dispositivo ou AWS CloudShell. Para instalar ou atualizar o eksctl, consulte Instalação na documentação do eksctl.

  2. Se o seu cluster estiver na Nuvem AWS e a política do IAM gerenciada AmazonEKS_CNI_Policy estiver anexada ao perfil do IAM do nó do Amazon EKS, recomendamos atribuí-la a um perfil do IAM que você associa à conta de serviço Kubernetes aws-node. Para ter mais informações, consulte Configurar o plug-in CNI da Amazon VPC para usar IRSA. Se o cluster estiver no Outpost, a política deverá estar anexada à função do nó.

  3. O comando a seguir cria um grupo de nós em um cluster existente. O cluster deve ter sido criado usando eksctl. Substitua al-nodes por um nome para o grupo de nós. O nome do grupo de nós não pode exceder 63 caracteres. Deve começar com uma letra ou um dígito, mas pode incluir hifens e sublinhados para os demais caracteres. Substitua my-cluster pelo nome do cluster. O nome só pode conter caracteres alfanuméricos (sensíveis a maiúsculas e minúsculas) e hifens. Ele deve começar com um caractere alfanumérico e não pode ter mais de 100 caracteres. O nome deve ser exclusivo na região da AWS e na conta da AWS em que você está criando o cluster. Se o cluster estiver em um Outpost, substitua id pelo ID de uma sub-rede do Outpost. Se o seu cluster existir no AWS Cloud, substitua id pelo ID de uma sub-rede que você não especificou ao criar o cluster. Substitua instance-type por um tipo de instância compatível com o Outpost. Substitua os valores de exemplo restantes por seus próprios valores. Os nós são criados com a mesma versão do Kubernetes que o ambiente de gerenciamento, por padrão.

    Substitua instance-type por um tipo de instância disponível no Outpost.

    Substitua my-key pelo nome do seu par de chaves ou chave pública do Amazon EC2. Essa chave é usada para SSH em seus nós depois que eles forem iniciados. Se ainda não tiver um par de chaves do Amazon EC2, você poderá criar um no AWS Management Console. Para obter mais informações, consulte Pares de chaves do Amazon EC2, no Guia do usuário do Amazon EC2.

    Crie seu grupo de nós com o comando a seguir.

    eksctl create nodegroup --cluster my-cluster --name al-nodes --node-type instance-type \ --nodes 3 --nodes-min 1 --nodes-max 4 --managed=false --node-volume-type gp2 --subnet-ids subnet-id

    Se o seu cluster estiver implementado no AWS Cloud:

    Para obter uma lista completa de todas as opções e padrões disponíveis, consulte AWS Outposts Support na documentação eksctl.

  4. (Opcional) Implante uma aplicação de amostra para testar o cluster e os nós do Linux.

AWS Management Console

Etapa 1: Inicie nós Linux autogerenciados usando AWS Management Console `

  1. Baixe a versão mais recente do modelo do AWS CloudFormation.

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
  2. Abra o console do AWS CloudFormation.

  3. Selecione Create stack (Criar pilha) e With new resources (standard) (Com novos recursos, padrão).

  4. Para Specify template (Especificar modelo), selecione Upload a template file (Fazer upload de um arquivo de modelo) e depois Choose file (Escolher arquivo). Selecione o arquivo amazon-eks-nodegroup.yaml que você baixou em uma etapa anterior e selecione Next (Próximo).

  5. Na página Specify stack details (Especificar detalhes da pilha), insira os parâmetros de acordo e escolha Next (Próximo):

    • Nome da pilha: escolha um nome para a pilha do AWS CloudFormation. Por exemplo, você pode chamá-lo de al-nodes. O nome só pode conter caracteres alfanuméricos (sensíveis a maiúsculas e minúsculas) e hifens. Ele deve começar com um caractere alfanumérico e não pode ter mais de 100 caracteres. O nome deve ser exclusivo na região da AWS e na conta da AWS em que você está criando o cluster.

    • ClusterName: insira o nome do cluster. Se esse nome não corresponder ao nome do cluster, os nós não poderão se integrar ao cluster.

    • ClusterControlPlaneSecurityGroup: Escolha o valor SecurityGroups da saída do AWS CloudFormation que você gerou ao criar sua VPC.

      As etapas a seguir mostram uma operação para recuperar o grupo aplicável.

      1. Abra o console do Amazon EKS.

      2. Escolha o nome do cluster.

      3. Escolha a guia Redes.

      4. Use o valor de Additional security group (Grupos de segurança adicionais) como referência ao selecionar na lista suspensa ClusterControlPlaneSecurityGroup.

    • NodeGroupName: insira um nome para o grupo de nós. Esse nome poderá ser usado superiormente para identificar o grupo de nós do Auto Scaling que for criado para os nós.

    • NodeAutoScalingGroupMinSize: digite o número mínimo de nós para o qual o grupo Auto Scaling de nós pode ser escalado.

    • NodeAutoScalingGroupDesiredCapacity: insira o número desejado de nós para o qual dimensionar quando a pilha for criada.

    • NodeAutoScalingGroupMaxSize: digite o número máximo de nós para o qual o grupo Auto Scaling de nós pode ser escalado.

    • NodeInstanceType: escolha um tipo de instância para os nós. Se o seu cluster estiver sendo executado no AWS Cloud, para obter mais informações, consulte Escolher um tipo de instância de nó do Amazon EC2 ideal. Se o cluster estiver sendo executado em um Outpost, você só poderá selecionar um tipo de instância que esteja disponível no Outpost.

    • NodeImageIdSSMParam: pré-preenchido com o parâmetro do Amazon EC2 Systems Manager de uma AMI recente otimizada para Amazon EKS, para uma versão do Kubernetes variável. Para usar uma versão secundária diferente do Kubernetes compatível com o Amazon EKS, substitua 1.XX por uma versão compatível diferente. Recomendamos especificar a mesma versão do Kubernetes que seu cluster.

      Para usar a AMI acelerada e otimizada para o Amazon EKS, substitua amazon-linux-2 por amazon-linux-2-gpu. Para usar a AMI Arm otimizada para o Amazon EKS, substitua amazon-linux-2 por amazon-linux-2-arm64.

      nota

      As AMIs dos nós do Amazon EKS são baseadas no Amazon Linux. É possível acompanhar os eventos de segurança ou privacidade do Amazon Linux no centro de segurança do Amazon Linux, selecionando a guia da versão desejada. Você também pode assinar o feed RSS aplicável. Os eventos de segurança e privacidade incluem uma visão geral do problema, quais pacotes são afetadas e como atualizar suas instâncias para corrigir o problema.

    • NodeImageId: (opcional) se estiver usando sua própria AMI personalizada (em vez da AMI otimizada do Amazon EKS), insira um ID de AMI de nó para a região da AWS. Se você especificar um valor aqui, ele substituirá todos os valores no campo NodeImageIdSSMParam.

    • NodeVolumeSize: especifique um tamanho de volume raiz para os nós, em GiB.

    • NodeVolumeType: especifique um tipo de volume raiz para os nós.

    • KeyName: insira o nome de um par de chaves SSH do Amazon EC2; que você pode usar para conectar-se usando SSH em seus nós, depois de iniciados. Se ainda não tiver um par de chaves do Amazon EC2, você poderá criar um no AWS Management Console. Para obter mais informações, consulte Pares de chaves do Amazon EC2, no Guia do usuário do Amazon EC2.

      nota

      Se você não fornecer um par de chaves aqui, a criação da pilha do AWS CloudFormation falhará.

    • BootstrapArguments: há vários argumentos opcionais que você pode transmitir para os nós. Para obter mais informações, consulte as bootstrap script usage information (informações sobre o uso do script de boostrap) no GitHub. Se você estiver adicionando nós a um cluster local do Amazon EKS em AWS Outposts (em que as instâncias do ambiente de gerenciamento Kubernetes são executadas em AWS Outposts) e o cluster não tiver conexão de entrada e saída com a Internet (também conhecido como clusters privados), será necessário fornecer os seguintes argumentos de bootstrap (como uma única linha).

      --b64-cluster-ca ${CLUSTER_CA} --apiserver-endpoint https://${APISERVER_ENDPOINT} --enable-local-outpost true --cluster-id ${CLUSTER_ID}
    • DisableIMDSv1: por padrão, cada nó oferece suporte ao serviço de metadados de instância versão 1 (IMDSv1) e IMDSv2. Você pode desabilitar IMDSv1. Para evitar que futuros nós e Pods do grupo de nós usem IMDSv1, defina DisableIMDSv1 como true (verdadeiro). Para obter mais informações, consulte Configuring the instance metadata service (Configurar o serviço de metadados de instância). Para obter mais informações sobre como restringir o acesso a ele em seus nós, consulte Restringir o acesso ao perfil da instância atribuído ao nó de processamento.

    • VpcId: insira o ID da VPC que você criou. Antes de escolher uma VPC, analise os requisitos e as considerações da VPC.

    • Sub-redes:se o cluster estiver em um Outpost, escolha pelo menos uma sub-rede privada na VPC. Antes de escolher as sub-redes, analise os Requisitos e considerações para sub-redes. É possível ver quais sub-redes são privadas abrindo cada link de sub-rede na guia Networking (Redes) do cluster.

  6. Selecione as opções desejadas na página Configure stack options (Configurar opções de pilha) e depois escolha Next (Próximo).

  7. Marque a caixa de seleção à esqu erda de I acknowledge that AWS CloudFormation might create IAM resources. (Eu reconheço que o CloudFormation pode criar recursos de IAM) e, em seguida, selecione Create stack (Criar pilha).

  8. Quando a criação da pilha for concluída, selecione-a no console e escolha Outputs (Saídas).

  9. Registre o valor de NodeInstanceRole para o grupo de nós criado. Você precisará dele ao configurar os nós do Amazon EKS.

Etapa 2: habilite os nós para participar do cluster

  1. Verifique se você já tem um aws-auth ConfigMap.

    kubectl describe configmap -n kube-system aws-auth
  2. Se você receber um aws-auth ConfigMap, atualize-o conforme necessário.

    1. Abra o ConfigMap para edição.

      kubectl edit -n kube-system configmap/aws-auth
    2. Adicione uma nova mapRoles entrada conforme necessário. Defina o valor rolearn para o valor NodeInstanceRole que você registrou no procedimento anterior.

      [...] data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes [...]
    3. Salve o arquivo e saia do seu editor de texto.

  3. Se você recebeu um erro informando "Error from server (NotFound): configmaps "aws-auth" not found, aplique o estoqueConfigMap.

    1. Faça download do mapa de configuração.

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. No arquivo aws-auth-cm.yaml, configure rolearn para o valor NodeInstanceRole que você registrou no procedimento anterior. Você pode fazer isso com um editor de texto ou substituindo my-node-instance-role e executando o seguinte comando:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
    3. Aplique a configuração. Esse comando pode demorar alguns minutos para ser concluído.

      kubectl apply -f aws-auth-cm.yaml
  4. Observe o status de seus nós e aguarde até que eles atinjam o status Ready.

    kubectl get nodes --watch

    Insira Ctrl+C para retornar a um prompt de shell.

    nota

    Se você receber qualquer erro de autorização ou de tipo de recurso, consulte Acesso negado ou não autorizado (kubectl) no tópico de solução de problemas.

    Se os nós não conseguirem ingressar no cluster, consulte Worker nodes fail to join cluster (Falha nos nós ao ingressar no cluster) em Solucionar problemas com clusters e nós do Amazon EKS e Não é possível integrar nós a um cluster em Solucionar problemas de clusters locais do Amazon EKS no AWS Outposts.

  5. Instale o driver da CSI do Amazon EBS. Para obter mais informações, consulte Instalação no GitHub. Na seção Set up driver permission (Configurar permissão do driver), certifique-se de seguir as instruções para a opção Using IAM instance profile (Usar o perfil de instância do IAM). Você deve usar a classe de armazenamento gp2. A classe de armazenamento gp3 não é compatível.

    Para criar uma classe de armazenamento gp2 no cluster, conclua as etapas a seguir.

    1. Execute o seguinte comando para criar o arquivo gp2-storage-class.yaml.

      cat >gp2-storage-class.yaml <<EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp2 encrypted: "true" allowVolumeExpansion: true EOF
    2. Aplique o manifesto ao cluster.

      kubectl apply -f gp2-storage-class.yaml
  6. (Somente nós de GPU) Caso escolha um tipo de instância de GPU e a AMI acelerada otimizada para o Amazon EKS, você deverá aplicar o plug-in do dispositivo NVIDIA para Kubernetes como um DaemonSet no cluster. Substitua vX.X.X pela versão desejada do NVIDIA/k8s-device-plugin antes de executar o seguinte comando.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml

Etapa 3: Ações adicionais

  1. (Opcional) Implante uma aplicação de amostra para testar o cluster e os nós do Linux.

  2. Se o cluster estiver implantado em um Outpost, pule esta etapa. Se o seu cluster estiver implantado no AWS Cloud, as informações a seguir são opcionais. Se a política do IAM gerenciada AmazonEKS_CNI_Policy estiver anexada ao perfil do IAM do nó do Amazon EKS, recomendamos atribuí-la a um perfil do IAM que você associa à conta de serviço Kubernetes aws-node. Para ter mais informações, consulte Configurar o plug-in CNI da Amazon VPC para usar IRSA.