Implantar uma aplicação Web em contêineres no Amazon EKS

GUIA DE CONCEITOS BÁSICOS

Módulo 1: Criar um cluster EKS

Neste módulo, criaremos um cluster do Amazon EKS

Introdução

Antes de implantar uma aplicação conteinerizada, precisamos criar um cluster do Kubernetes. Usaremos o Amazon EKS para criar o cluster. Neste guia, o cluster do Amazon EKS consiste em um plano de controle que usa o Amazon EC2 como nós worker. Para criar o cluster do Kubernetes, usaremos o AWS CDK. O AWS CDK oferece flexibilidade para o fornecimento de um cluster do Kubernetes de forma previsível e repetível.

O que você aprenderá

  • Criar de uma aplicação AWS CDK para criar cluster do Amazon EKS com o Amazon EC2 como nós worker
  • Testar e executar a operação básica do cluster do Kubernetes

 Tempo para a conclusão

10 minutos

 Pré-requisitos do módulo

  • Conta da AWS com acesso de administrador**
  • Navegador recomendado: versão mais recente do Chrome ou Firefox

[**]Talvez as contas criadas nas últimas 24 horas ainda não tenham acesso aos serviços necessários para este tutorial.

Implementação

Após definir a função do IAM e o cluster do EKS, o passo seguinte é implantar a pilha do CDK. Antes de fazer isso, você precisa configurar o CDK para informar qual ID e região da conta usar, alterando eks/cluster/app.py e retirando os comentários da linha 24:

Criar aplicação AWS CDK

Nesta etapa, você vai preparar suas pastas de trabalho. Você criará duas pastas diferentes dentro da pasta raiz eks. A primeira pasta, k8s-cluster, é para a criação do cluster e conterá seu código CDK para criá-lo. A segunda pasta, cdk8s, conterá o código para criar e implantar sua aplicação para o cluster usando cdk8s. Criar os diretórios e criar seu projeto CDK usando Python executando:

mkdir eks
cd eks
mkdir cluster cdk8s
cd cluster

cdk init app --language=python

Isso criará o esqueleto da aplicação CDK, com algumas saídas de comando úteis:

cdk init app --language=python
Applying project template app for python

# Welcome to your CDK Python project!

This is a blank project for Python development with CDK.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

...

To add additional dependencies, for example other CDK libraries, just add
them to your `setup.py` file and rerun the `pip install -r requirements.txt`
command.

## Useful commands

 * `cdk ls`          list all stacks in the app
 * `cdk synth`       emits the synthesized CloudFormation template
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk docs`        open CDK documentation

Enjoy!

Please run 'python3 -m venv .venv'!
Executing Creating virtualenv...

Não se esqueça de executar python3 -m venv .venv depois.

Há dois recursos principais que você precisa criar nesse módulo: o cluster do Amazon EKS e a função do AWS IAM. Ao criar a função do IAM e associá-la ao cluster, você concederá privilégios systems:masters. Para fazer isso, precisamos adicionar as bibliotecas aws_cdk.aws-iam e aws_cdk.aws-eks à nossa aplicação CDK. As bibliotecas aws_cdk.aws-ec2 e pyyaml são necessárias para a etapa de implantação. Você precisa ter certeza de que está usando as bibliotecas adequadas à sua versão do CDK; para conferir a versão do CDK, execute cdk --version:

cdk --version

1.121.0 (build 026cb8f)

Usando o número de versão apresentado, abra eks/cluster/requirements.txt e inclua as seguintes linhas no final:

aws_cdk.core==1.121.0
aws_cdk.aws-iam==1.121.0
aws_cdk.aws-eks==1.121.0
aws_cdk.aws_ec2==1.121.0
pyyaml

Para instalar essas bibliotecas, execute pip3 install -r requirements.txt.

Criar uma nova VPC é a prática recomendada para a criação de um cluster do Kubernetes usando o EKS. Você pode consultar mais informações na documentação. Neste guia, usaremos a VPC padrão fornecida com cada nova conta para simplificar a implantação. Para criar seu cluster do EKS, abra eks/cluster/cluster_stack.py e adicione as seguintes linhas:

from aws_cdk import core as cdk
from aws_cdk import aws_iam as iam
from aws_cdk import aws_eks as eks
from aws_cdk import aws_ec2 as ec2


class ClusterStack(cdk.Stack):

    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Look up the default VPC
        vpc = ec2.Vpc.from_lookup(self, id="VPC", is_default=True)

        # Create master role for EKS Cluster
        iam_role = iam.Role(self, id=f"{construct_id}-iam",
                            role_name=f"{construct_id}-iam", assumed_by=iam.AccountRootPrincipal())

        # Creating Cluster with EKS
        eks_cluster = eks.Cluster(
            self, id=f"{construct_id}-cluster", 
            cluster_name=f"{construct_id}-cluster", 
            vpc=vpc, 
            vpc_subnets=vpc.public_subnets, 
            masters_role=iam_role, 
            default_capacity_instance=ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO), 
            version=eks.KubernetesVersion.V1_20,
        )

Após definir a função do IAM e o cluster do EKS, o passo seguinte é implantar a pilha do CDK. Antes de fazer isso, você precisa configurar o CDK para informar qual ID e região da conta usar, alterando eks/cluster/app.py e retirando os comentários da linha 24:

env=core.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')),

O ID e a região da conta configurados na AWS CLI serão usados. Antes de você usar o CDK, é preciso iniciá-lo. Essa ação criará a infraestrutura necessária para que o CDK gerencie a infraestrutura na sua conta. Para iniciar o CDK, execute cdk bootstrap. A saída será semelhante a:

cdk bootstrap

#output
⏳  Bootstrapping environment aws://0123456789012/<region>...
✅  Environment aws://0123456789012/<region> bootstrapped

Após a inicialização, execute cdk deploy para implantar o cluster. 

cdk deploy

A saída será semelhante à seguinte:

gsg_build_eks_1

O CDK emitirá um aviso antes de criar a infraestrutura, já que ela é uma infraestrutura que altera a configuração de segurança (no seu caso, pela criação de funções do IAM e grupos de segurança). Pressione y e, em seguida, enter para implantar. O CDK iniciará toda a configuração da infraestrutura que você definiu, o que levará alguns minutos para completar. 

Se tudo correr bem, você verá os seguintes resultados ao final da execução:

✅  ClusterStack

Outputs:
ClusterStack.ClusterStackclusterConfigCommand1CAA6E63 = aws eks update-kubeconfig --name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
ClusterStack.ClusterStackclusterGetTokenCommand010D10BE = aws eks get-token --cluster-name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
ClusterStack.ClusterStackoutclusterName = ClusterStack-cluster
ClusterStack.ClusterStackouteksSgId = sg-08b0517c72f0e2696
ClusterStack.ClusterStackoutkubectlRoleArn = arn:aws:iam::0123456789012:role/ClusterStack-ClusterStackclusterCreationRole9D9F21-29ZO9XWJLC4Q
ClusterStack.ClusterStackoutoidcArn = arn:aws:iam::0123456789012:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/168AAF8C86B3F46909C6014D942FD39C
ClusterStack.ClusterStackoutvpcAz = ['eu-west-1a', 'eu-west-1b', 'eu-west-1c']
ClusterStack.ClusterStackoutvpcId = vpc-b8e25ec1

Stack ARN:
arn:aws:cloudformation:eu-west-1:0123456789012:stack/ClusterStack/91f4c430-1225-11ec-bb6c-027a967aed43

Você verá três avisos parecidos com esses:

[Warning at /ClusterStack/ClusterStack-cluster] Could not auto-tag public subnet subnet-3a618f43 with "kubernetes.io/role/elb=1", please remember to do this manually

Este guia utiliza Kubernetes 1.20, e a marcação de sub-rede somente foi usada antes da 1.19, por isso você pode tranquilamente ignorar esses avisos. Nesse instante, seu cluster estará pronto. Para operar seu cluster, você precisará atualizar a configuração do Kubernetes (kubeconfig) para apontar para ele, para que o comando kubectl possa funcionar. Copie o ConfigCommand da saída do seu terminal e execute-o, o que deverá gerar algo parecido com isso:

aws eks update-kubeconfig --name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
Added ew context arn:aws:eks:eu-west-1:0123456789012:cluster/ClusterStack-cluster to /home/ubuntu/.kube/config

Para confirmar que tudo está configurado corretamente, execute kubectl get all e confira se é mostrado o seguinte:

kubectl get all

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   xxx.xxx.xxx.xxx   <none>        443/TCP   15m

Conclusão

Neste módulo, mostramos a criação de um cluster Amazon EKS usando a CLI. No próximo módulo, instalaremos e aprenderemos sobre CDK8s.

A seguir: Instalar CDK8s

Envie seus comentários.

Agradecemos por seus comentários
Ficamos satisfeitos por esta página ter ajudado você. Deseja compartilhar detalhes adicionais para nos ajudar a continuar melhorando?
Fechar
Agradecemos por seus comentários
Lamentamos que esta página não tenha ajudado você. Deseja compartilhar detalhes adicionais para nos ajudar a continuar melhorando?
Fechar