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:

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