Implantar uma aplicação Web em contêiner no Amazon EKS
GUIA DE CONCEITOS BÁSICOS
Módulo 4: Implantação com o AWS CDK
Neste módulo, criaremos uma implantação usando CDK e lançaremos sua aplicação
Introdução
Neste módulo, implantaremos uma aplicação em seu cluster EKS recém-criado usando os arquivos de configuração gerados por CDK8s do módulo anterior. Esses arquivos de configuração serão usados pelo CDK para implantar a aplicação.
O que você aprenderá
- Integrar o AWS CDK8S à AWS CDK
- Implantar usando o AWS CDK
- Operar usando o cluster com Kubecti
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
Definir aplicação
Os arquivos kubernetes config são armazenados no formato Yaml, então você precisará importar a biblioteca yaml para poder analisá-los. Importe o yaml abaixo de outras importações no topo de eks/cluster/cluster/cluster_stack.
Em seguida, você adicionará dois blocos de código para ler os dois arquivos Yaml em variáveis para transmitir ao cluster:
# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)
# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
service_yaml = yaml.load(stream, Loader=yaml.FullLoader)
Você então transmitirá esse Yaml para o cluster EKS usando o método add_manifest, uma vez para cada arquivo:
eks_cluster.add_manifest(f"{construct_id}-app-deployment", yaml_app_deployment)
eks_cluster.add_manifest(f"{construct_id}-app-service", yaml_app_service)
O seu arquivo cluster_stack.py deve ser semelhante a:
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
import yaml
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,
)
# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)
# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
service_yaml = yaml.load(stream, Loader=yaml.FullLoader)
eks_cluster.add_manifest(f"{construct_id}-app-deployment", deployment_yaml)
eks_cluster.add_manifest(f"{construct_id}-app-service", service_yaml)
Para implantar a aplicação, precisamos voltar para o diretório eks/cluster. Se você estiver atualmente no diretório eks/cdk8s, execute o seguinte (ou altere para eks/cluster):
cd ../cluster
cdk deploy
Após o AWS CDK ter implantado a pilha de aplicações, podemos verificar os status dos pods com kubectl. Antes de usar kubectl, certifique-se de que você está usando o contexto certo com kubectl config current-context.
Para ver o status da aplicação nos pods, podemos usar o comando kubectl get all e veremos os seguintes resultados:
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/cdk8s-deployment-c8087a1b-659fb88f56-6qj52 1/1 Running 0 3m22s
pod/cdk8s-deployment-c8087a1b-659fb88f56-s82ft 1/1 Running 0 3m22s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/cdk8s-service-c844e1e1 LoadBalancer xxx.xxx.xxx.xxx xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com 80:30132/TCP 3m22s
service/kubernetes ClusterIP xxx.xxx.xxx.xxx <none> 443/TCP 4h17m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/cdk8s-deployment-c8087a1b 2/2 2 2 3m22s
NAME DESIRED CURRENT READY AGE
replicaset.apps/cdk8s-deployment-c8087a1b-659fb88f56 2 2 2 3m22s
Para testar a aplicação, você pode copiar o IP EXTERNO do valor LoadBalancer acima e abri-lo no seu navegador (ele é semelhante a xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com).
Após carregado, você deve ver esta página:

Você implantou com sucesso uma aplicação em um cluster Kubernetes usando CDK para provisionar o cluster e implantar os arquivos manifestos gerados pelos CDK8s.
Conclusão
Neste guia, você aprendeu a usar os arquivos kubernetes config gerados por CDK8s e implantá-los em seu cluster EKS usando CDK. No próximo módulo, você limpará todos os recursos criados neste guia.
A seguir: Limpar os recursos