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:

gsg_build_eks_2

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

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