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:
- Importar a biblioteca k8s para ajudar a gerar as strings para o arquivo de configuração Yaml.
- Definir o conjunto de rótulos a aplicar aos pods para usar na procura do serviço.
- 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.
- 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