Implemente una aplicación web en contenedores en Amazon EKS

GUÍA DE INTRODUCCIÓN

Módulo 3: crear la implementación

En este módulo, creará una implementación y lanzará la aplicación

Introducción

En este módulo, creará configuraciones de servicio e implementación para la aplicación mediante AWS CDK8. En AWS CDK8s, los objetos de la API de Kubernetes se representan como constructos. Podemos utilizar esos constructos para definir servicios e implementaciones. La salida generada por CDK8s es un archivo de configuración de Kubernetes. Utilizará el resultado de este módulo y lo integrará con el código de AWS CDK de los módulos anteriores para implementar la aplicación.

Lo que aprenderá

  • Utilizar los constructos de CDK8s para definir los objetos de la API de Kubernetes
  • Definir los servicios y las implementaciones mediante CDK8
  • Generar la configuración de Kubernetes mediante CDK8s

 Tiempo de realización

5 minutos

 Requisitos previos del módulo

  • Una cuenta de AWS con acceso de nivel de administrador**
  • Navegador recomendado: la última versión de Chrome o Firefox

[**] Es posible que las cuentas creadas en las últimas 24 horas aún no tengan acceso a los servicios necesarios para este tutorial.

Implementación

Defina la aplicación

A partir de este paso, modificaremos main.py para definir la aplicación de CDK8s. Debería tener este aspecto después de la inicialización:

#!/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()

Es necesario completar cuatro pasos para implementar la aplicación:

  1. Importe la biblioteca k8s para ayudar a generar las cadenas para el archivo de configuración de Yaml.
  2. Defina el conjunto de etiquetas que se aplicará a los pods para utilizarlo en la búsqueda de servicios.
  3. Defina una implementación: esto pondrá en marcha el contenedor en el clúster, pero no lo configurará para recibir tráfico del balanceador de carga.
  4. Defina un servicio para exponer la implementación al balanceador de carga.

Las marcas son pares clave/valor que se asocian a los objetos de Kubernetes. Etiquetará los pods como parte de la implementación para ejecutarlos, a la vez que ReplicationController utilizará las mismas marcas para seleccionar los pods al crear el servicio para exponerlos al balanceador de carga. Utilizará el código etiquetar = {"app": "cdk8s"} para hacer esto.

Tras ello, utilizará estas marcas en la implementación. Una implementación en Kubernetes es una declaración explícita sobre las unidades de implementación y el estado deseado. En esta guía se utilizará una aplicación de muestra alojada en la Galería pública de Amazon ECR. La URL de la imagen del contenedor que vamos a extraer es public.ecr.aws/s9u7u6x1/sample app 001:no-db.

Para crear la implementación y el servicio, actualice main.py al agregar from imports import k8s en la parte superior del archivo debajo de las demás importaciones, y al pegar el siguiente código debajo de # defina los recursos aquí. El archivo ahora debería tener el siguiente aspecto:

#!/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()

Notará que se hace una llamada a super() dos veces en este método: crea el archivo Yaml con el nombre especificado y adhiere cualquier configuración generada después de ese punto al llamar al constructor de la clase principal de la que hereda esta clase. Se generará un archivo para la configuración del servicio, así como un segundo archivo para la implementación. 

Ahora puede ejecutar cdk8s synth para generar los archivos de configuración. Así lucirá el resultado:

cdk8s synth

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

Conclusión

En este módulo, aprendió a generar archivos de configuración de Kubernetes mediante CDK8s. La aplicación se divide en una implementación y un servicio, cada uno con su propio archivo de configuración.

Ya está listo para actualizar el proyecto de CDK para hacer referencia a estos archivos y utilizar kubectl para implementarlos en el clúster de EKS.

Siguiente: Implementar con CDK

Háganos saber cómo lo hicimos.

Agradecemos sus comentarios
Nos alegra que esta página le haya ayudado. ¿Le gustaría compartir detalles adicionales para ayudarnos a seguir mejorando?
Cerrar
Agradecemos sus comentarios
Lamentamos que esta página no le haya ayudado. ¿Le gustaría compartir detalles adicionales para ayudarnos a seguir mejorando?
Cerrar