Iniciar nós do Bottlerocket autogerenciados - Amazon EKS

Ajudar a melhorar esta página

Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.

Iniciar nós do Bottlerocket autogerenciados

nota

Os grupos de nós gerenciados podem oferecer algumas vantagens para seu caso de uso. Para ter mais informações, consulte Grupos de nós gerenciados.

Este tópico descreve como iniciar grupos do Auto Scaling de nós do Bottlerocket que são registrados no cluster do Amazon EKS. O Bottlerocket é um sistema operacional de código aberto baseado no Linux da AWS que você pode utilizar para executar contêineres em máquinas virtuais ou hosts bare metal. Depois que os nós ingressam no cluster, você pode implantar aplicações do Kubernetes neles. Para obter mais informações sobre o Bottlerocket, consulte Uso de uma AMI do Bottlerocket com o Amazon EKS no GitHub e Suporte para AMI personalizada na documentação do eksctl.

Para obter informações sobre as atualizações vigentes, consulte Operador de atualizações do Bottlerocket no GitHub.

Importante
  • Os nós do Amazon EKS são instâncias padrão do Amazon EC2, e você é cobrado por eles com base nos preços normais das instâncias do Amazon EC2. Para obter mais informações, consulte Definição de preço do Amazon EC2.

  • Você pode iniciar nós do Bottlerocket em clusters estendidos do Amazon EKS em Outposts da AWS, mas não pode iniciá-los em clusters locais no AWS Outposts. Para ter mais informações, consulte Amazon EKS em AWS Outposts.

  • É possível implantar em instâncias do Amazon EC2 com processadores x86 ou Arm. Entretanto, não é possível implantar em instâncias que tenham chips Inferentia.

  • Bottlerocket é compatível com AWS CloudFormation. No entanto, não há um modelo oficial do CloudFormation que possa ser copiado para implantar nós Bottlerocket para Amazon EKS.

  • As imagens do Bottlerocket não vêm com um servidor ou shell SSH. Você pode usar métodos de acesso fora de banda para permitir que o SSH habilite o contêiner do administrador e especificar algumas etapas de configuração de bootstrapping com dados de usuário. Para obter mais informações, consulte essas seções no bottlerocket README.md no GitHub:

Para iniciar nós do Bottlerocket usando eksctl

Este procedimento exige a versão eksctl 0.184.0 ou superior. Você pode verificar a versão com o seguinte comando:

eksctl version

Para obter instruções sobre como instalar ou atualizar o eksctl, consulte Instalação na documentação do eksctl.

nota

Este procedimento funciona apenas para clusters que foram criados com o eksctl.

  1. Copie o conteúdo a seguir para o seu dispositivo. Substitua o 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 dentro da Região da AWS e da Conta da AWS na qual você está criando o cluster. Substitua ng-bottlerocket por um nome para o seu 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. Para implantar em instâncias do Arm, substitua m5.large por um tipo de instância Arm. Substitua my-ec2-keypair-name pelo 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. Substitua todos os example values restantes por seus próprios valores. Depois de fazer as substituições, execute o comando modificado para criar o arquivo bottlerocket.yaml.

    Se estiver especificando um tipo de instância do Amazon EC2 do Arm, analise as considerações em AMIs Amazon Linux Arm otimizadas para Amazon EKS antes de implantar. Para obter instruções sobre como implantar usando uma AMI personalizada, consulte Criação do Bottlerocket no GitHub e Suporte a AMI personalizada na documentação do eksctl. Para implantar um grupo de nós gerenciados, implante uma AMI personalizada usando um modelo de execução. Para ter mais informações, consulte Como personalizar nós gerenciados com modelos de execução.

    Importante

    Para implantar um grupo de nós no AWS Outposts, no AWS Wavelength ou em sub-redes das Zonas locais da AWS, não passe o AWS Outposts, o AWS Wavelength ou as sub-redes da Zona local da AWS ao criar o cluster. É necessário especificar as sub-redes no exemplo a seguir. Para obter mais informações, consulte Create a nodegroup from a config file (Criar um grupo de nós em um arquivo de configuração) e Config file schema (Esquema de arquivo de configuração) na documentação do eksctl. Substitua region-code pela Região da AWS em que está o cluster.

    cat >bottlerocket.yaml <<EOF --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: '1.30' iam: withOIDC: true nodeGroups: - name: ng-bottlerocket instanceType: m5.large desiredCapacity: 3 amiFamily: Bottlerocket ami: auto-ssm iam: attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy ssh: allow: true publicKeyName: my-ec2-keypair-name EOF
  2. Implante os nós com o seguinte comando.

    eksctl create nodegroup --config-file=bottlerocket.yaml

    Veja um exemplo de saída abaixo.

    Várias linhas são emitidas enquanto os nós são criados. Uma das últimas linha de saída é o exemplo de linha a seguir.

    [✔]  created 1 nodegroup(s) in cluster "my-cluster"
  3. (Opcional) Crie um volume persistente do Kubernetes em um nó Bottlerocket usando o Plugin de CSI do Amazon EBS. O driver padrão do Amazon EBS depende de ferramentas do sistema de arquivos que não estão incluídas no Bottlerocket. Para obter mais informações sobre como criar uma classe de armazenamento usando o driver, consulte Usar o armazenamento do Amazon EBS.

  4. (Opcional) Por padrão, o kube-proxy define o parâmetro do kernel nf_conntrack_max com um valor padrão que pode diferir do que o Bottlerocket originalmente define na inicialização. Para manter a configuração padrão do Bottlerocket, edite a configuração kube-proxy com o comando a seguir.

    kubectl edit -n kube-system daemonset kube-proxy

    Adicione --conntrack-max-per-core e --conntrack-min aos argumentos kube-proxy que estão no exemplo a seguir. Uma configuração de 0 não implica em nenhuma mudança.

    containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --conntrack-max-per-core=0 - --conntrack-min=0
  5. (Opcional) Implante uma aplicação de amostra para testar os nós do Bottlerocket.

  6. Convém bloquear o acesso para Pod ao IMDS se as condições a seguir forem verdadeiras:

    • Você planeja atribuir perfis do IAM a todas as contas de serviço do Kubernetes para que os Pods tenham apenas as permissões mínimas de que precisam.

    • Nenhum dos Pods do cluster requer acesso ao serviço de metadados de instâncias do Amazon EC2 (IMDS) por outros motivos, como recuperar a Região da AWS atual.

    Para obter mais informações, consulte Restringir o acesso ao perfil da instância atribuído ao nó de processamento.