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:

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