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

GUIA DE CONCEITOS BÁSICOS

Módulo 3: Criar sua implantação

Neste módulo, criaremos uma implantação e lançaremos sua aplicação

Introdução

Neste módulo, criaremos configurações de serviço e implantação da sua aplicação usando o AWS CDK8s. No AWS CDK8s, objetos da API Kubernetes são representados como construtos. Podemos usar esses construtos para definir serviços e implantações. A saída gerada pelo CDK8s é um arquivo de configuração Kubernetes. Usaremos a saída deste módulo e a integraremos com o código do AWS CDK dos módulos anteriores para implantar sua aplicação.

O que você aprenderá

  • Usar construtos CDK8s para definir objetos da API Kubernetes
  • Definir serviços e implantações usando o CDK8s
  • Gerar configuração do Kubernetes usando o CDK8s

 Tempo para a conclusão

5 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

Nesta etapa, modificaremos main.py para definir a aplicação CDK8s. Após a inicialização, ela deve ser semelhante a isso:

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart

class MyChart(Chart):
    def __init__(self, scope: Construct, id: str):
        super().__init__(scope, id)

        # define resources here

app = App()
MyChart(app, "cdk8s")

app.synth()

Para implantar sua aplicação, exitem quatro etapas a seguir:

  1. Importar a biblioteca k8s para ajudar a gerar as strings para o arquivo de configuração Yaml.
  2. Definir o conjunto de rótulos a aplicar aos pods para usar na procura do serviço.
  3. Definir uma implantação: isso vai acelerar o contêiner no cluster, mas não vai configurá-lo para receber tráfego do balanceador de carga.
  4. Definir um serviço para expor a implantação ao balanceador de carga.

Rótulos são pares chave/valor acoplados aos objetos Kubernetes. Marcaremos os pods como parte da implantação para executá-los e o ReplicationController usará os mesmos rótulos para selecionar os pods ao criar o serviço para expô-los ao balanceador de carga. Usaremos o código label = {"app": "cdk8s"} para fazer isso.

Então, usaremos esses rótulos na implantação. Uma implantação no Kubernetes é uma declaração explícita de unidades de implantação e o estado desejado. Este guia usará uma amostra de aplicação hospedada na Galeria Pública da Amazon ECR. O URL da imagem contêiner que buscaremos é public.ecr.aws/s9u7u6x1/sample app 001:no-db.

Para criar a implantação e o serviço, atualize  main.py adicionando  from imports import k8s no topo do arquivo, abaixo das outras importações, e colando o seguinte código abaixo de # define resources here. Seu arquivo será semelhante a isso:

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart
from imports import k8s

class MyChart(Chart):
    def __init__(self, scope: Construct, id: str):
        super().__init__(scope, f"{id}-deployment")

        # define resources here

        # Label used for tagging pods to link in the service
        label = {"app": "cdk8s"}

        # Creates the deployment to spin up pods with your container
        k8s.KubeDeployment(self, 'deployment',
            spec=k8s.DeploymentSpec(
                replicas=2,
                selector=k8s.LabelSelector(match_labels=label),
                template=k8s.PodTemplateSpec(
                metadata=k8s.ObjectMeta(labels=label),
                spec=k8s.PodSpec(containers=[
                    k8s.Container(
                    name='cdk8s',
                    image='public.ecr.aws/s9u7u6x1/sample_app_001:no-db',
                    ports=[k8s.ContainerPort(container_port=80)])]))))

        # Creates the service to expose the pods to traffic from the loadbalancer
        super().__init__(scope, f"{id}-service")
        k8s.KubeService(self, 'service',
            spec=k8s.ServiceSpec(
            type='LoadBalancer',
            ports=[k8s.ServicePort(port=80, target_port=k8s.IntOrString.from_number(80))],
            selector=label))

app = App()
MyChart(app, "cdk8s")

app.synth()

Você vai observar que uma chamada para super() é realizada duas vezes nesse método - ela cria o arquivo Yaml com o nome especificado e anexa qualquer configuração gerada após esse ponto chamando o construtor da classe-principal da qual essa classe herda. Isso vai gerar um arquivo para a configuração do serviço e um segundo arquivo para a implantação. 

Agora, podemos executar cdk8s synth para gerar os arquivos de configuração e a saída deverá ser semelhante a isso:

cdk8s synth

dist/cdk8s-deployment.k8s.yaml
dist/cdk8s-service.k8s.yaml

Conclusão

Neste módulo, aprendemos como gerar arquivos de configuração do Kubernetes usando o CDK8s. Sua aplicação foi dividida em uma implantação e um serviço, cada um com seu próprio arquivo de configuração.

Agora, estamos prontos para atualizar o projeto CDK para referenciar esses arquivos e usar kubectl para implantá-los no cluster do EKS.

A seguir: Implantar com o CDK

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