Crie clusters locais do Amazon EKS em AWS Outposts para alta disponibilidade - Amazon EKS

Crie clusters locais do Amazon EKS em AWS Outposts para alta disponibilidade

Você pode usar clusters locais para executar todo o seu cluster do Amazon EKS localmente em AWS Outposts. Isso ajuda a reduzir o risco de tempo de inatividade da aplicação, que pode resultar de desconexões temporárias da rede com a nuvem. Essas desconexões podem ser causadas por cortes de fibra ou eventos climáticos. Como o cluster inteiro do Kubernetes é executado localmente no Outposts, as aplicações permanecem disponíveis. Você pode executar operações de cluster durante as desconexões da rede com a nuvem. Para ter mais informações, consulte Prepare clusters locais do Amazon EKS em AWS Outposts para desconexões de rede. O diagrama a seguir mostra a implantação de um cluster local.

Cluster local do Outpost

Clusters locais geralmente estão disponíveis para uso com racks do Outposts.

Regiões do AWS com suporte

Você pode criar clusters locais nas seguintes regiões AWS: Leste dos EUA (Ohio), Leste dos EUA (N. Virgínia), Oeste dos EUA (N. Califórnia), Oeste dos EUA (Oregon), Ásia-Pacífico (Seul), Ásia-Pacífico (Cingapura), Ásia-Pacífico (Sydney), Ásia-Pacífico (Tóquio), Canadá (Central), Europa (Frankfurt), Europa (Irlanda), Europa (Londres), Oriente Médio (Bahrein) e América do Sul (São Paulo). Para obter informações sobre os recursos compatíveis, consulte Comparar as opções de implantação.

Tópicos

    Criar um cluster local do Amazon EKS

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

    Você também pode usar a AWS CLI, a API do Amazon EKS, os SDKs da AWS, o AWS CloudFormation ou o Terraform para criar clusters no Outposts.

    eksctl

    Para criar um cluster local com eksctl

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

    2. Copie o conteúdo a seguir no seu dispositivo. Substitua os valores a seguir e execute o comando modificado para criar o arquivo outpost-control-plane.yaml:

      • Substitua region-code pela região AWS suportada na qual você deseja criar o cluster.

      • Substitua my-cluster por um nome para seu 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. O nome deve ser exclusivo na região da AWS e na conta da AWS em que você está criando o cluster.

      • Substitua vpc-ExampleID1 e subnet-ExampleID1 pelos IDs da sua VPC e da sub-rede existentes. A VPC e a sub-rede devem atender aos requisitos em Criar uma VPC e sub-redes para clusters do Amazon EKS no AWS Outposts.

      • Substitua uniqueid pelo ID do seu Outpost.

      • Substitua m5.large por um tipo de instância disponível no seu Outpost. Antes de escolher um tipo de instância, consulte Selecione tipos de instância e grupos de posicionamento para clusters do Amazon EKS em AWS Outposts com base em considerações de capacidade. Três instâncias do ambiente de gerenciamento são implantadas. Não é possível alterar esse número.

        cat >outpost-control-plane.yaml <<EOF apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: "1.24" vpc: clusterEndpoints: privateAccess: true id: "vpc-vpc-ExampleID1" subnets: private: outpost-subnet-1: id: "subnet-subnet-ExampleID1" outpost: controlPlaneOutpostARN: arn:aws:outposts:region-code:111122223333:outpost/op-uniqueid controlPlaneInstanceType: m5.large EOF

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

    3. Crie o cluster usando o arquivo de configuração que você criou na etapa anterior. O eksctl cria uma VPC e uma sub-rede no seu Outpost para implantar o cluster.

      eksctl create cluster -f outpost-control-plane.yaml

      O provisionamento de cluster leva alguns minutos. Durante a criação do cluster, várias linhas de saída são exibidas. A última linha do resultado é semelhante ao exemplo de linha a seguir.

      [✓] EKS cluster "my-cluster" in "region-code" region is ready
      dica

      Para ver a maioria das opções que podem ser especificadas ao criar um cluster com eksctl, use o comando eksctl create cluster --help. Para ver todas as opções disponíveis, é possível utilizar um arquivo config. Para obter mais informações, consulte Uso dos arquivos de configuração e o esquema de arquivo de configuração na documentação do eksctl. Você pode encontrar exemplos de arquivos de configuração no GitHub.

      O comando eksctl criou automaticamente uma entrada de acesso para a entidade principal do IAM (usuário ou perfil) que criou o cluster e concedeu à entidade principal do IAM permissões de administrador para Kubernetes objetos no cluster. Se não quiser que o criador do cluster tenha acesso de administrador aos objetos do Kubernetes no cluster, adicione o seguinte texto ao arquivo de configuração anterior: bootstrapClusterCreatorAdminPermissions: false (no mesmo nível de metadata, vpc e outpost). Se você adicionou a opção, então, depois da criação do cluster, precisará criar uma entrada de acesso para pelo menos uma entidade principal do IAM, ou nenhuma entidade principal do IAM terá acesso aos objetos do Kubernetes no cluster.

    AWS Management Console

    Para criar o cluster com a AWS Management Console

    1. Você precisa de uma VPC e uma sub-rede existentes que atendam aos requisitos do Amazon EKS. Para ter mais informações, consulte Criar um VPC e sub-redes para clusters do Amazon EKS em AWS Outposts.

    2. Se você já tiver um perfil do IAM do cluster local ou se for criar seu cluster com eksctl, poderá ignorar essa etapa. Por padrão, eksctl cria um perfil para você.

      1. Execute o seguinte comando para criar um arquivo JSON de política de confiança do IAM:

        cat >eks-local-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
      2. Crie o perfil do IAM do cluster do Amazon EKS. Para criar um perfil do IAM, a entidade principal do IAM que estiver criando o perfil deverá ser atribuída à seguinte ação iam:CreateRole (permissão):

        aws iam create-role --role-name myAmazonEKSLocalClusterRole --assume-role-policy-document file://"eks-local-cluster-role-trust-policy.json"
      3. Anexe a política gerenciada do Amazon EKS denominada AmazonEKSLocalOutpostClusterPolicy ao perfil. Para anexar uma política do IAM a uma entidade principal do IAM a entidade principal do IAM que está anexando a política deve receber uma das seguintes ações do IAM (permissões): iam:AttachUserPolicy ou iam:AttachRolePolicy.

        aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSLocalOutpostClusterPolicy --role-name myAmazonEKSLocalClusterRole
    3. Abra o console do Amazon EKS.

    4. Na parte superior da tela do console, certifique-se de ter selecionado uma região compatível com AWS.

    5. Escolha Add cluster (Adicionar cluster) e, em seguida, Create (Criar).

    6. Na página Configure cluster (Configurar cluster), insira ou selecione valores para os seguintes campos:

      • Localização do ambiente de gerenciamento do Kubernetes: escolha AWS Outposts.

      • Outpost ID (ID do Outpost): escolha o ID do Outpost no qual você deseja criar seu ambiente de gerenciamento.

      • Em Instance type (Tipo de instância): selecione um tipo de instância. Somente os tipos de instância disponíveis no seu Outpost são exibidos. Na lista suspensa, cada tipo de instância descreve para quantos nós o tipo de instância é recomendado. Antes de escolher um tipo de instância, consulte Selecione tipos de instância e grupos de posicionamento para clusters do Amazon EKS em AWS Outposts com base em considerações de capacidade. Todas as réplicas são implantadas com o uso do mesmo tipo de instância. Você não poderá alterar o tipo de instância depois que seu cluster for criado. Três instâncias do ambiente de gerenciamento são implantadas. Não é possível alterar esse número.

      • Name (Nome): um nome exclusivo para o cluster. Ele deve ser exclusivo na sua conta da AWS. 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. O nome deve ser exclusivo na região da AWS e na conta da AWS em que você está criando o cluster.

      • Kubernetes version - Escolha a versão do Kubernetes que você deseja usar para o seu cluster. A menos que precise usar uma versão anterior, recomendamos que você selecione a versão mais recente.

      • Perfil de serviço do cluster: escolha o perfil do IAM do cluster do Amazon EKS criado em uma etapa anterior para permitir que o ambiente de gerenciamento do Kubernetes gerencie os recursos da AWS.

      • Kubernetes acesso de administrador do cluster - se quiser que o entidade principal do IAM (perfil ou usuário) que está criando o cluster tenha acesso de administrador aos objetos Kubernetes no cluster, aceite o padrão (permitir). O Amazon EKS cria uma entrada de acesso para a entidade principal do IAM e concede permissões de administrador do cluster à entrada de acesso. Para obter mais informações sobre as entradas de acesso, consulte Conceder aos usuários do IAM acesso ao Kubernetes com entradas de acesso ao EKS.

        Se você quiser que uma entidade principal do IAM diferente daquela que está criando o cluster tenha acesso de administrador aos objetos do Kubernetes do cluster, escolha a opção de não permitir. Após a criação do cluster, qualquer entidade principal do IAM que tenha permissões do IAM para criar entradas de acesso poderá adicionar uma entrada de acesso para qualquer entidade principal do IAM que precise acessar os objetos do Kubernetes do cluster. Para obter mais informações sobre as permissões necessárias do IAM, consulte Ações definidas pelo Amazon Elastic Kubernetes Service na Referência de autorização de serviço. Se você escolher a opção de não permitir e não criar nenhuma entrada de acesso, nenhuma entidade principal do IAM terá acesso aos objetos do Kubernetes no cluster.

      • Tags (Etiquetas) – (opcional) adicione etiquetas ao cluster. Para ter mais informações, consulte Organizar recursos do Amazon EKS com tags. Após terminar com essa página, escolha Próximo.

    7. Na página Specify networking (Especificar redes), selecione valores para os seguintes campos:

      • VPC: escolha uma VPC existente. A VPC deverá ter uma quantidade suficiente de endereços IP disponíveis para o cluster, todos os nós e outros recursos do Kubernetes que você desejar criar. Sua VPC deve atender aos requisitos em Requisitos e considerações da VPC.

      • Subnets (Sub-redes): por padrão, as sub-redes disponíveis na VPC especificada no campo anterior são pré-selecionadas. As sub-redes que você escolher devem atender aos requisitos em Requisitos e considerações da sub-rede.

      • Security groups (Grupos de segurança) (Opcional): especifique um ou mais grupos de segurança que você deseja que o Amazon EKS associe às interfaces de rede que ele cria. O Amazon EKS cria automaticamente um grupo de segurança que permite a comunicação entre o cluster e a VPC. O Amazon EKS associa esse grupo de segurança, e qualquer um que você escolher, às interfaces de rede que ele cria. Para saber mais sobre o grupo de segurança de cluster criado pelo Amazon EKS, consulte Exibir os requisitos para grupos de segurança do Amazon EKS em clusters. É possível modificar as regras no grupo de segurança do cluster criado pelo Amazon EKS. Se optar por adicionar seus próprios grupos de segurança, você não poderá alterar os escolhidos após a criação desse cluster. Para que os hosts on-premises se comuniquem com o endpoint do cluster, você deve permitir tráfego de entrada do grupo de segurança do cluster. Para clusters que não têm uma conexão de internet de entrada e saída (também conhecidos como clusters privados), você deve fazer o seguinte:

        • Adicione o grupo de segurança associado aos endpoints da VPC necessários. Para obter mais informações sobre os endpoints necessários, consulte Usar VPC endpoints da interface do em Acesso da sub-rede a serviços da AWS.

        • Modifique o grupo de segurança que o Amazon EKS criou para permitir tráfego do grupo de segurança associado aos endpoints da VPC. Após terminar com essa página, escolha Próximo.

    8. Na página Configurar observabilidade, é possível escolher opcionalmente quais opções de Métricas e Log do ambiente de gerenciamento você deseja ativar. Por padrão, o cada tipo de log está desativado.

    9. Na página Review and create (Revisar e criar), revise as informações que você inseriu ou selecionou nas páginas anteriores. Se precisar fazer alterações, escolha Edit (Editar). Quando estiver satisfeito, escolha Criar. O campo Status mostra o campo CREATING (Criando) enquanto o cluster é provisionado.

      O provisionamento de cluster leva alguns minutos.

    Visualizar seu cluster local do Amazon EKS

    1. Depois que o cluster for criado, você poderá visualizar as instâncias do ambiente de gerenciamento do Amazon EC2 que foram criadas.

      aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Name:Tags[?Key==`Name`]|[0].Value}' | grep my-cluster-control-plane

      Veja um exemplo de saída abaixo.

      "Name": "my-cluster-control-plane-id1" "Name": "my-cluster-control-plane-id2" "Name": "my-cluster-control-plane-id3"

      Cada instância recebeu taints com o node-role.eks-local.amazonaws.com/control-plane para que nenhuma workload seja programada nas instâncias do ambiente de gerenciamento. Para obter mais informações sobre taints, consulte Taints e tolerâncias na documentação do Kubernetes. O Amazon EKS monitora continuamente o estado dos clusters locais. Executamos ações automáticas de gerenciamento, como patches de segurança e reparo de instâncias não íntegras. Quando os clusters locais são desconectados da nuvem, executamos ações para garantir que o cluster seja reparado para um estado íntegro após a reconexão.

    2. Se você criou seu cluster usando eksctl, pode ignorar esta etapa. O eksctl completa esta etapa para você. Habilite o kubectl para se comunicar com o cluster adicionando um novo contexto ao arquivo kubectl config. Para obter instruções sobre como criar e atualizar o arquivo, consulte Conecte o kubectl a um cluster EKS criando um arquivo kubeconfig.

      aws eks update-kubeconfig --region region-code --name my-cluster

      Veja um exemplo de saída abaixo.

      Added new context arn:aws:eks:region-code:111122223333:cluster/my-cluster to /home/username/.kube/config
    3. Para se conectar ao servidor de API do Kubernetes do cluster local, você deve ter acesso ao gateway local da sub-rede ou conectar-se de dentro da VPC. Para obter mais informações sobre como conectar um rack de Outpost à sua rede on-premises, consulte Como funcionam gateways locais para racks, no Guia do Usuário do AWS Outposts. Se você usar roteamento direto de VPC e a sub-rede do Outpost tiver uma rota para o gateway local, os endereços IP privados das instâncias do ambiente de gerenciamento do Kubernetes serão transmitidos automaticamente pela rede local. O endpoint do servidor de API do Kubernetes do cluster local está hospedado no Amazon Route 53 (Route 53). O endpoint do serviço de API pode ser resolvido por servidores DNS públicos para os endereços IP privados dos servidores de API do Kubernetes.

      As instâncias do ambiente de gerenciamento do Kubernetes dos clusters locais são configuradas com interfaces de rede elásticas estáticas com endereços IP privados fixos que não mudam durante o ciclo de vida do cluster. As máquinas que interagem com o servidor de API do Kubernetes podem não ter conectividade com o Route 53 durante as desconexões da rede. Se for esse o caso, recomendamos configurar /etc/hosts com os endereços IP privados estáticos para operações contínuas. Também recomendamos configurar servidores DNS locais e conectá-los ao Outpost. Para obter mais informações, consulte a documentação doAWS Outposts. Execute o comando a seguir para confirmar que a comunicação foi estabelecida com o cluster.

      kubectl get svc

      Veja um exemplo de saída abaixo.

      NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h
    4. (Opcional) Teste a autenticação em seu cluster local quando ele estiver em um estado desconectado do AWS Cloud. Para obter instruções, consulte Prepare clusters locais do Amazon EKS em AWS Outposts para desconexões de rede.

    Recursos internos

    O Amazon EKS cria os seguintes recursos no seu cluster. Os recursos são para uso interno do Amazon EKS. Para o funcionamento adequado do cluster, não edite nem modifique esses recursos.

    • Os seguintes pods de espelho:

      • aws-iam-authenticator-node-hostname

      • eks-certificates-controller-node-hostname

      • etcd-node-hostname

      • kube-apiserver-node-hostname

      • kube-controller-manager-node-hostname

      • kube-scheduler-node-hostname

    • Os seguintes complementos autogerenciados:

      • kube-system/coredns

      • kube-system/ kube-proxy (só será criado quando você adicionar seu primeiro nó)

      • kube-system/aws-node (só será criado quando você adicionar seu primeiro nó). Clusters locais usam o plugin Amazon VPC CNI plugin for Kubernetes para redes de cluster. Não altere a configuração das instâncias do ambiente de gerenciamento (pods denominados aws-node-controlplane-*). Há variáveis de configuração que você pode usar para alterar o valor padrão para quando o plug-in criar novas interfaces de rede. Para obter mais informações, consulte a documentação sobre o GitHub.

    • Os seguintes serviços:

      • default/kubernetes

      • kube-system/kube-dns

    • Um PodSecurityPolicy denominado eks.system

    • Um ClusterRole denominado eks:system:podsecuritypolicy

    • Um ClusterRoleBinding denominado eks:system

    • Um PodSecurityPolicy padrão

    • Além do grupo de segurança do cluster, o Amazon EKS cria um grupo de segurança em sua conta AWS chamado eks-local-internal-do-not-use-or-edit-cluster-name-uniqueid . Esse grupo de segurança permite que o tráfego flua livremente entre componentes do Kubernetes em execução nas instâncias do ambiente de gerenciamento.

    Próximas etapas recomendadas: