Implemente una aplicación web en contenedores en Amazon EKS

GUÍA DE INTRODUCCIÓN

Módulo 4: implementación con AWS CDK

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

Introducción

En este módulo, implementaremos una aplicación en el clúster de EKS recién creado mediante los archivos de configuración generados por CDK8s en el módulo anterior. Estos archivos de configuración se utilizarán por CDK para implementar la aplicación.

Lo que aprenderá

  • Integrar AWS CDK8S en AWS CDK
  • Implementación mediante AWS CDK
  • Operar el clúster con Kubectl

 Tiempo de realización

10 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

Definir la aplicación

Los archivos de configuración de Kubernetes se almacenan en formato Yaml, por lo que tendrá que importar la biblioteca yaml para poder analizarlos. Agregue la importación yaml bajo las otras importaciones en la parte superior de eks/cluster/cluster/cluster_stack

A continuación, agregará dos bloques de código para leer los dos archivos Yaml en variables para pasar al clúster:

# 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)

A continuación, pasará este Yaml al clúster de EKS mediante el método add_manifest, una vez por cada archivo:

eks_cluster.add_manifest(f"{construct_id}-app-deployment", yaml_app_deployment)

eks_cluster.add_manifest(f"{construct_id}-app-service", yaml_app_service)

El archivo cluster_stack.py ahora debería tener el siguiente aspecto:

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 implementar la aplicación, tenemos que volver al directorio eks/cluster. Si actualmente se encuentra en el directorio eks/cdk8s, ejecute lo siguiente (de lo contrario, cambie a eks/cluster):

cd ../cluster
cdk deploy

Una vez que AWS CDK ha implementado la pila de aplicaciones, podemos verificar el estado de los pods con kubectl. Antes de utilizar kubectl, asegúrese de que utiliza el contexto correcto mediante kubectl config current-context.

Para ver el estado de la aplicación en los pods, podemos utilizar el comando kubectl get all y obtendremos los siguientes 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 probar la aplicación, puede copiar el EXTERNAL-IP del valor del LoadBalancer anterior y abrirlo en el navegador. Tendrá el siguiente aspecto: xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com

Una vez cargado, debería aparecer esta página:

gsg_build_eks_2

Ha implementado correctamente una aplicación en un clúster de Kubernetes mediante CDK para aprovisionar el clúster e implementar los archivos de manifiesto generados por CDK8s.

Conclusión

En esta guía, ha aprendido a utilizar los archivos de configuración de Kubernetes generados por CDK8s y a implementarlos en el clúster de EKS mediante CDK. En el siguiente módulo, limpiará todos los recursos creados en esta guía.

Siguiente: limpieza de recursos

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