Concrete Logo
Hamburger button

Como criar Cluster Kubernetes na AWS

  • Blog
  • 20 de Dezembro de 2018

Resolvi ajudar a comunidade a usar o serviço de Cluster Kubernetes (EKS) da AWS, para quem ainda tem dúvidas. O Kurbenetes, nada mais é, do que um orquestrador para os seus containers. No cenário no qual precisamos criar aplicações e remover aplicações em containers, ele encurta bastante o nosso tempo e permite um gerenciamento bem legal para ambientes pequenos ou até mesmo para aqueles gigantescos.

Os binários usados para gerenciar o Cluster Kubernetes são desenvolvidos na linguagem Go da Google. Sendo assim, é só baixar do repositório da AWS, dar permissão de execução e copiar ou mover para a pasta /usr/local/bin/, conforme coloquei abaixo, para não ter a necessidade de mencionar no PATH do seu sistema.

Instalando o AWS CLI

Uma maneira rápida para não perder tempo é seguir a documentação da AWS.

Instalando o Kubectl e o AWS-IAM-Authenticator

O Kubectl é que o binário responsável por gerenciar seu Cluster Kubernetes. Já o AWS-IAM-Autenticator é uma ferramenta que usa as suas credenciais no IAM para autenticar no cluster Kubernetes (EKS) na AWS.

Recomendo seguir os passos apresentados aqui e caso precise ainda de uma melhor compreensão, coloquei logo abaixo uma forma de você vai baixar e dar permissão de execução aos binários Kubectl e AWS-IAM-Authenticator, para Linux:

$ curl -o kubectl
$ chmod +x kubectl
$ curl -o aws-iam-authenticator
$ chmod +x aws-iam-authenticator
$ mv kubectl aws-iam-authenticator /usr/local/bin

Para se certificar que tudo está funcionando, abra outra aba no seu terminal e digite:

Caso apareça o comportamento da maneira esperada, que é mostrar as opções e argumentos dos binários, continue com o passo a passo abaixo. Agora se perceber algum erro, como por exemplo:

Se você tiver mais de um AWS CLI instalado na sua máquina, use o apt-get remove AWS CLI e também o pip uninstal AWS CLI. No meu caso, eu tinha mais de um AWS CLI instalado na máquina, daí ocorria o erro mencionado acima.

Partindo para a AWS

Criando uma função (role) no IAM

Crie uma função (role) no IAM para que o Kubernetes possa assumir e criar recursos da AWS. Novamente, a documentação para consulta está aqui.

Segue um passo a passo de como criar a função de serviço do Amazon EKS:

  1. Abra o console do IAM;
  2. Escolha Roles (Funções) e, em seguida, Create Role (Criar função);
  3. Escolha EKS na lista de serviços e, em seguida, Allows Amazon EKS to manage your clusters on your behalf (permitir que o Amazon EKS gerencie os clusters em seu nome) para o seu caso de uso e depois Next: Permissions (próximo: permissões);
  4. Selecione Próximo: revisão;
  5. Em Role name (nome da função), digite um nome para a função, como eksServiceRole e escolha Create role (criar função). Pronto, a ARN dessa função vai ser necessária na criação do seu Cluster (assunto mais para a frente). ARN é abreviação de Amazon Resource Name e se parece com algo assim: arn:aws:iam::111111111111:role/eksServiceRole.

Criando policies para o seu usuário que vai administrar o EKS

Apesar de ser o passo mais fácil, é preciso seguir as boas práticas e não apenas o uso de uma policy com o conteúdo abaixo, assim como conceder a esse usuário acesso à permissão iam:PassRole. Clique aqui para ter acesso à documentação e para entender como fica.

Esse é o conteúdo da policy chamada AmazonEKSAdminPolicy e que vou anexar ao usuário criado:

Adicionei a policy acima pensando que estava tudo bem, tudo certo, mas deu errado. rs

Errei ao criar o Cluster:

Então, após a correta compreensão da documentação, descobri o caminho das pedras para resolver o caso: na verdade, precisava adicionar mais uma policy no meu usuário para executar a role ‘eksServiceRole’, criada anteriormente. Em outra palavras, permissão iam:PassRole.

Exemplo da policy:

Se quiser, você vai poder criar uma nova VPC com o template disponibilizado na documentação, senão pode usar a VPC existente. Se optar por isto, faça o seguinte:

  1. Crie suas subnets e as acrescente a uma rota (route-table) para a Internet por meio de um igw (internet gateway), o que vai fazer com as subnets se tornem públicas;
  2. Crie um SG (security group) com uma nomenclatura que curta e que o faça lembrar qual vai ser o Control Plane. Não é preciso criar qualquer regra, o template usado no cloudformation para a criação dos nós do Cluster vai ficar responsável por criar todas as regras necessárias informadas na documentação. O que vai ser ajustado para você.

Já para criar a VPC com o template do cloudformation, siga os passos a seguir:

  1. Abra o console do AWS CloudFormation;
  2. Na barra de navegação, selecione uma região que seja compatível com o Amazon EKS.
    Nota: ele está disponível nas seguintes regiões até o momento da criação deste artigo: Oeste dos EUA (Oregon, us-west-2) e Leste dos EUA (Norte da Virgínia, us-east-1);
  3. Selecione Create stack;
  4. Em Choose a template, selecione Specify an Amazon S3 template URL;
  5. Cole esta URL na área de texto e selecione Next:
  6. Na página Specify Details, preencha os parâmetros conforme necessário e, em seguida, escolha Next: Stack name: escreva um nome para a pilha do AWS CloudFormation, como por exemplo, ‘eks-vpc’; VpcBlock: escolha um intervalo de CIDR para a VPC. Você pode manter o valor padrão; Subnet01Block: escolha um intervalo de CIDR para a sub-rede 1. Você pode manter o valor padrão; Subnet02Block: escolha um intervalo de CIDR para a sub-rede 2. Você pode manter o valor padrão; Subnet03Block: escolha um intervalo de CIDR para a sub-rede 3. Você pode manter o valor padrão;
  7. Se quiser, na página Options, marque os recursos da pilha e escolha Next;
  8. Na página Revisão, selecione Criar;
  9. Quando a pilha estiver criada, selecione-a no console e escolha Outputs;
  10. Guarde o valor de SecurityGroups para o security group criado. Você vai precisar dele ao criar seu Cluster do EKS. Esse security group é aplicado às interfaces de rede elástica, entre contas que são criadas em suas sub-redes que permitem que o plano de controle do Amazon EKS se comunique com os nós de operador;
  11. Guarde o VpcId para as sub-redes que foram criadas. Você vai precisar disso ao executar o modelo do grupo de nós de operador;
  12. Guarde os SubnetIds para as sub-redes que foram criadas. Você vai precisar disso ao criar o seu Cluster do EKS. Essas são as sub-redes nas quais os nós de operador são executados.

Depois de criar o Cluster EKS, finalmente, lembre-se de que os parâmetros aqui nada mais são do que os IDs da VPC e subnets que você criou com o template usado no cloudformation nos passos anteriores com o AWS CLI:

# aws eks create-cluster –name meu-cluster –role-arn arn:aws:iam::111111111111:role/eksServiceRole –resources-vpc-config subnetIds=subnet-0ee1049b877a5a513,subnet-014589d6ea6757dfc,subnet-0068e1e015dcf4548,securityGroupIds=sg-0f6ae1ed2bf922665

Partindo do princípio que você já tem toda a sua AWS CLI configurada, senão não chegaria até aqui (rs), crie agora o diretório oculto .kube na sua home: digite o comando abaixo para ele gerar o arquivo config dentro do diretório ~/.kube, com todas as confs de seu Cluster no EKS:

O conteúdo do arquivo é esse:

Teste a configuração:

Agora crie um template no cloudformation que vai gerar as suas AMIs e security group necessários para a comunicação entre os seus nós. Além de a instalação automática do Amazon VPC CNI, plugin que permite ao Kubernetes receber endereços IP nativos da VPC, dando a eles acesso e segurança à rede. Siga este procedimento.

Após seguir os passos acima, dê continuidade com esta documentação.

Obrigado pela leitura! Qualquer pergunta ou comentário, escreva abaixo.

Aqui na Concrete, o capítulo de DevOps é o motor para a agilidade dos times, responsável por pensar estrategicamente na estrutura e arquitetura final, garantindo a qualidade. Justamente por automatizar processos e melhorar o desempenho do time de desenvolvimento, nossos “DevOps” trabalham desde o início da criação dos produtos, implementando processos de integração e entrega contínua, utilizando servidores de CI, repositórios de código, scripts de automatização e relatórios. Quer trabalhar com os melhores? Só vem! concrete.com.br/vagas