Implemente una aplicación web en contenedores en Amazon EKS

GUÍA DE INTRODUCCIÓN

Módulo 1: crear un clúster de EKS

En este módulo, aprenderá a crear un clúster de Amazon EKS

Introducción

Antes de implementar la aplicación en contenedores, es necesario crear un clúster de Kubernetes. Utilizaremos Amazon EKS para crear el clúster. En esta guía, el clúster de Amazon EKS se compone de un plano de control y del uso de Amazon EC2 como nodos de trabajo. Para crear el clúster de Kubernetes, vamos a utilizar AWS CDK. AWS CDK ofrece flexibilidad para permitir el aprovisionamiento de un clúster de Kubernetes de manera predecible y repetible.

Lo que aprenderá

  • Crear una aplicación de AWS CDK para crear un clúster de Amazon EKS con Amazon EC2 como nodos de trabajo
  • Probar el clúster de Kubernetes y realizar operaciones básicas con este

 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

Una vez definidos el rol de IAM y el clúster de EKS, el siguiente paso es implementar la pila de CDK. Antes de hacerlo, es necesario configurar el CDK para que sepa qué ID de cuenta y región debe utilizar. Para ello, debe cambiar eks/cluster/app.py y anular los comentarios de la línea 24:

Crear una aplicación AWS CDK

En este paso, preparará las carpetas de trabajo. Creará dos carpetas diferentes dentro de la carpeta raíz eks. La primera carpeta, k8s-cluster, es para la creación de clústeres y alojará el código de CDK para la creación. La segunda carpeta, cdk8s, contendrá el código para crear e implementar la aplicación en el cluster mediante cdk8s. Cree los directorios, así como el proyecto de CDK con Python mediante la ejecución de:

mkdir eks
cd eks
mkdir cluster cdk8s
cd cluster

cdk init app --language=python

Esto creará la aplicación de CDK esqueleto, con algunas salidas de comandos útiles:

cdk init app --language=python
Applying project template app for python

# Welcome to your CDK Python project!

This is a blank project for Python development with CDK.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

...

To add additional dependencies, for example other CDK libraries, just add
them to your `setup.py` file and rerun the `pip install -r requirements.txt`
command.

## Useful commands

 * `cdk ls`          list all stacks in the app
 * `cdk synth`       emits the synthesized CloudFormation template
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk docs`        open CDK documentation

Enjoy!

Please run 'python3 -m venv .venv'!
Executing Creating virtualenv...

Asegúrese de ejecutar python3 -m venv .venv después.

Hay dos recursos principales que se deben crear en este módulo, el clúster de Amazon EKS y el rol de AWS IAM. Al crear un rol de IAM y asociarlo al clúster, este concederá los privilegios de systems:masters. Para ello, debemos agregar las bibliotecas aws_cdk.aws-iam y aws_cdk.aws-eks a nuestra aplicación de CDK. Las bibliotecas aws_cdk.aws-ec2 y pyyaml son necesarias para el paso de implementación. Se debe asegurar de que utiliza las bibliotecas que coinciden con la versión del CDK. Para verificar la versión del CDK, ejecute cdk --version:

cdk --version

1.121.0 (build 026cb8f)

Con el número de versión que se muestra, abra eks/cluster/requirements.txt y coloque las siguientes líneas:

aws_cdk.core==1.121.0
aws_cdk.aws-iam==1.121.0
aws_cdk.aws-eks==1.121.0
aws_cdk.aws_ec2==1.121.0
pyyaml

Para instalar estas bibliotecas, ejecute pip3 install -r requirements.txt.

La creación de una nueva VPC es una práctica recomendada para crear un clúster de Kubernetes mediante EKS. Puede obtener más información al respecto en la documentación. Para esta guía, se utilizará la VPC predeterminada proporcionada con cada nueva cuenta para simplificar la implementación. Para crear el clúster de EKS, abra eks/cluster/cluster_stack.py y agregue las siguientes líneas:

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


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

Una vez definidos el rol de IAM y el clúster de EKS, el siguiente paso es implementar la pila de CDK. Antes de hacerlo, es necesario configurar el CDK para que sepa qué ID de cuenta y región debe utilizar. Para ello, debe cambiar eks/cluster/app.py y anular los comentarios de la línea 24:

env=core.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')),

Esto utilizará el ID de la cuenta y la región configurada en AWS CLI. Antes de poder utilizar el CDK, es necesario arrancarlo. Esto creará la infraestructura necesaria para que el CDK administre la infraestructura en la cuenta. Para arrancar el CDK, ejecute cdk bootstrap. Debería ver una salida similar a:

cdk bootstrap

#output
⏳  Bootstrapping environment aws://0123456789012/<region>...
✅  Environment aws://0123456789012/<region> bootstrapped

Una vez que se haya completado el proceso de arranque, deberá ejecutar cdk deploy para implementar el clúster. 

cdk deploy

Debería ver una salida similar a:

gsg_build_eks_1

CDK le preguntará antes de crear la infraestructura, ya que es la creación de la infraestructura la que cambia la configuración de seguridad; en su caso, mediante la creación de roles de IAM y grupos de seguridad. Pulse y y luego presione Intro para implementar. El CDK configurará ahora toda la infraestructura que haya definido, y tardará unos minutos en completarse. 

Si todo se ha realizado correctamente, obtendrá los siguientes resultados al final de la ejecución:

✅  ClusterStack

Outputs:
ClusterStack.ClusterStackclusterConfigCommand1CAA6E63 = aws eks update-kubeconfig --name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
ClusterStack.ClusterStackclusterGetTokenCommand010D10BE = aws eks get-token --cluster-name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
ClusterStack.ClusterStackoutclusterName = ClusterStack-cluster
ClusterStack.ClusterStackouteksSgId = sg-08b0517c72f0e2696
ClusterStack.ClusterStackoutkubectlRoleArn = arn:aws:iam::0123456789012:role/ClusterStack-ClusterStackclusterCreationRole9D9F21-29ZO9XWJLC4Q
ClusterStack.ClusterStackoutoidcArn = arn:aws:iam::0123456789012:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/168AAF8C86B3F46909C6014D942FD39C
ClusterStack.ClusterStackoutvpcAz = ['eu-west-1a', 'eu-west-1b', 'eu-west-1c']
ClusterStack.ClusterStackoutvpcId = vpc-b8e25ec1

Stack ARN:
arn:aws:cloudformation:eu-west-1:0123456789012:stack/ClusterStack/91f4c430-1225-11ec-bb6c-027a967aed43

Verá 3 advertencias impresas similares a:

[Warning at /ClusterStack/ClusterStack-cluster] Could not auto-tag public subnet subnet-3a618f43 with "kubernetes.io/role/elb=1", please remember to do this manually

Esta guía utiliza Kubernetes 1.20. Además, el etiquetado de subredes solo se utilizaba antes de la versión 1.19, por lo que puede ignorar estas advertencias. El clúster ya está listo. Para operar el clúster, es necesario actualizar la configuración de Kubernetes (kubeconfig) para que apunte a este de manera que el comando kubectl funcione. Copie el ConfigCommand de la salida del terminal y ejecútelo. Debería lucir algo así:

aws eks update-kubeconfig --name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
Added ew context arn:aws:eks:eu-west-1:0123456789012:cluster/ClusterStack-cluster to /home/ubuntu/.kube/config

Para confirmar que todo está configurado correctamente, ejecute kubectl get all para confirmar. Debería ver lo siguiente:

kubectl get all

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   xxx.xxx.xxx.xxx   <none>        443/TCP   15m

Conclusión

En este módulo, hemos cubierto la creación de un clúster de Amazon EKS con la CLI. En el siguiente módulo, instalaremos los CDK8 y aprenderemos sobre estos.

Siguiente: instalación de los CDK8s

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