Cómo Desplegar una Aplicación en Amazon EKS

published on 09 March 2024

Si estás buscando cómo desplegar una aplicación en Amazon EKS, has llegado al lugar indicado. Este artículo te guiará paso a paso para que logres poner en marcha tu aplicación usando Kubernetes en la nube de Amazon. Aquí encontrarás todo lo que necesitas saber, desde los conceptos básicos de Kubernetes y Amazon EKS, hasta cómo crear un clúster de EKS y desplegar tu aplicación. A continuación, te resumo los puntos clave:

  • Amazon EKS te permite manejar aplicaciones en contenedores de manera eficiente.
  • Kubernetes facilita la organización y escalabilidad de tus aplicaciones.
  • Necesitarás una cuenta de AWS, AWS CLI, kubectl, y eksctl para empezar.
  • Crear un clúster de EKS es el primer paso práctico.
  • Desplegar tu aplicación implica definir archivos de configuración y aplicarlos en el clúster.
  • Gestionar el tráfico y escalar tu aplicación son aspectos avanzados que puedes explorar.

Este guía está diseñada para ser directa y fácil de seguir, asegurando que puedas tener tu aplicación corriendo en Amazon EKS sin complicaciones.

¿Por qué usar Amazon EKS?

Usar Amazon EKS tiene sus ventajas:

  • Fácil de agrandar o achicar: Si tu aplicación necesita atender a más o menos usuarios, EKS te lo pone fácil.
  • Siempre disponible: Trabaja para que tu aplicación casi nunca esté fuera de línea.
  • Funciona bien con Amazon: Te permite usar otros servicios de Amazon que pueden hacer tu vida más fácil.
  • Amazon te ayuda: Se encargan de las actualizaciones y de mantener todo funcionando bien.
  • Hecho para contenedores: Es perfecto si tu aplicación usa contenedores para funcionar de manera más eficiente.

En pocas palabras, EKS te ayuda a que tu aplicación funcione en Kubernetes de manera sencilla, eficiente y con el apoyo de Amazon.

Conceptos básicos de Kubernetes y Amazon EKS

Kubernetes

Kubernetes es como un sistema que ayuda a que las aplicaciones hechas de contenedores (como los creados con Docker) funcionen bien, crezcan cuando más gente las usa y se mantengan organizadas sin que tú tengas que hacer mucho. Amazon Elastic Kubernetes Service (EKS) es un servicio que ofrece Amazon para que usar Kubernetes sea más fácil y esté todo en la nube.

Veamos algunos conceptos importantes para entender cómo funciona todo esto:

Clúster

Un clúster de Kubernetes es como un equipo de computadoras (nodos) que trabajan juntas para mantener tus aplicaciones corriendo. Este equipo se encarga de todo el trabajo pesado, desde hacer que las aplicaciones estén disponibles hasta asegurarse de que funcionen bien.

En EKS, Amazon se ocupa de la parte más complicada, como asegurarse de que el sistema de Kubernetes esté siempre listo y funcionando.

Nodos

Los nodos son como las computadoras individuales en este equipo, donde realmente se ejecutan tus aplicaciones en contenedores Docker. Son los que hacen el trabajo día a día.

Con EKS, puedes elegir si quieres que Amazon se encargue de estos nodos por ti o si prefieres manejarlos tú mismo.

Pods

Un pod es como un paquete pequeño que contiene uno o más contenedores Docker que deben trabajar juntos. Se ejecutan en los nodos y cada uno tiene su propia dirección IP y recursos.

Los pods ayudan a que los contenedores no tengan problemas entre ellos, manteniéndolos organizados y funcionando bien juntos.

Servicios

Un servicio es una forma de decirle a Kubernetes cómo quieres que las personas o sistemas externos se comuniquen con tus aplicaciones en los pods. Es como darle una dirección fija a tus aplicaciones, así no importa dónde estén realmente ejecutándose, siempre se pueden encontrar.

Esto hace más fácil el trabajo de conectar diferentes partes de tu aplicación o permitir que los usuarios accedan a ella desde cualquier lugar.

Requisitos previos

Cuenta de AWS

Antes de empezar a desplegar tu aplicación en Amazon EKS, necesitas tener una cuenta en AWS. Si no tienes una, puedes crear una cuenta gratis que te permite usar ciertos servicios de AWS sin costo durante el primer año.

AWS CLI

AWS CLI

La AWS CLI es una herramienta que te permite hablar con los servicios de AWS usando la terminal de tu computadora. Es importante tenerla instalada y lista con tus datos de acceso a AWS.

kubectl

kubectl

kubectl es una herramienta esencial para trabajar con clústers de Kubernetes. Te ayuda a lanzar aplicaciones, revisar cómo van, ver registros de actividad, entre otras cosas. Debes tener kubectl instalada y configurada para que pueda comunicarse con tu clúster de EKS.

eksctl

eksctl

eksctl es una herramienta creada por AWS que hace mucho más fácil crear y manejar clústers de EKS. Si vas a desplegar tu aplicación pero aún no tienes un clúster, te recomendamos usar eksctl para armar uno con un comando sencillo.

Paso 1 - Preparar AWS CLI y eksctl

AWS CLI

Configurar AWS CLI

Para empezar con AWS CLI, haz lo siguiente:

  • Si no tienes AWS CLI en tu computadora, instálalo. Puedes encontrar cómo hacerlo en la página oficial de instrucciones.
  • Cuando lo tengas, abre la terminal y escribe aws configure. Te pedirá algunos datos:
  • Tu ID de clave de acceso de AWS (algo así como un nombre de usuario)
  • Tu clave secreta de acceso (como una contraseña)
  • La región de AWS que vas a usar (por ejemplo, us-east-1)
  • El formato en que quieres que AWS te muestre la información (puede ser json, texto o tabla)
  • Para asegurarte de que todo está bien configurado, prueba con el comando aws sts get-caller-identity. Si ves información sobre tu cuenta de AWS, significa que todo está correcto.

Con estos pasos, ya podrás usar AWS CLI para manejar los servicios de AWS desde tu computadora.

Instalar eksctl

Para instalar eksctl:

  • Ve a la página donde están las versiones de eksctl y descarga la que corresponda a tu sistema operativo.
  • Saca el archivo que descargaste en una carpeta que tu computadora reconozca para ejecutar programas.
  • Para verificar que se instaló bien, escribe eksctl version en la terminal.

Listo, con eksctl instalado y AWS CLI listo, puedes empezar a trabajar en desplegar tu aplicación en Amazon EKS.

Paso 2 - Crear un clúster EKS

Para crear un clúster en Amazon EKS, vamos a seguir unos pasos sencillos con la ayuda de una herramienta llamada eksctl:

Definir configuración del clúster

Primero, vamos a decidir cómo queremos que sea nuestro clúster EKS. Esto incluye cosas como:

  • Qué versión de Kubernetes queremos usar (es buena idea usar la más reciente)
  • Qué tipo y tamaño de máquinas (instancias EC2) queremos para los nodos
  • Cuántos nodos queremos en total
  • En qué región y zonas de AWS queremos que esté

Por ejemplo:

eksctl create cluster \
  --version 1.21 \
  --node-type t3.medium \
  --nodes 3 \
  --region us-east-1 \
  --zones us-east-1a,us-east-1b 

Con esto le estamos diciendo que queremos un clúster con:

  • Kubernetes versión 1.21
  • Nodos tipo t3.medium (que tienen 2 vCPU y 4GB de RAM)
  • Un total de 3 nodos
  • Que esté en la región us-east-1 de AWS y en las zonas us-east-1a y us-east-1b

Lanzar clúster EKS

Una vez que sabemos cómo queremos nuestro clúster, usamos eksctl para crearlo:

eksctl create cluster -f cluster.yaml

Aquí, cluster.yaml es un archivo donde escribimos los detalles que decidimos antes.

Usando este comando, eksctl automáticamente se encarga de:

  • Crear el clúster
  • Preparar las máquinas EC2
  • Ajustar la red y la seguridad
  • Instalar lo necesario

En unos minutos, nuestro clúster estará listo.

Verificar creación del clúster

Para asegurarnos de que nuestro clúster está funcionando, podemos usar:

kubectl get nodes

Esto nos muestra los nodos que están funcionando y en qué estado están. Deberíamos ver los nodos que pedimos, listos para trabajar.

También podemos ver más detalles del clúster con:

kubectl cluster-info

Con estos comandos podemos confirmar que nuestro clúster de EKS está preparado para nuestras aplicaciones.

sbb-itb-03dc61e

Paso 3 - Cómo Desplegar tu Aplicación de Ejemplo

Definir los archivos de configuración

Para poner tu aplicación a funcionar en nuestro clúster de EKS, necesitamos preparar unos archivos en formato YAML. Estos archivos son como las instrucciones que le dicen a Kubernetes qué hacer, cómo arrancar tu aplicación y cómo hacerla accesible.

Hablando de manera simple, necesitarás dos tipos de archivos:

  • Uno para decir cómo debe correr tu aplicación, cuántas copias quieres que haya y qué recursos necesita. Esto se llama un archivo de implementación.
  • Otro para decir cómo la gente puede acceder a tu aplicación desde fuera. Esto se llama un archivo de servicio.

Aquí te dejo un ejemplo de cómo se ve un archivo de implementación para Nginx:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Y así se ve un archivo de servicio:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

Con estos archivos, básicamente estamos poniendo a correr Nginx en nuestro clúster, con 3 copias y abriendo el puerto 80 para que se pueda acceder.

Aplicar los archivos en el clúster

Una vez que tienes tus archivos listos, es momento de ponerlos a trabajar. Para esto, usamos un comando que se llama kubectl apply:

kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml

Esto le dice a Kubernetes que tome los archivos y cree todo lo que le pedimos: las copias de la aplicación, cómo acceder a ella, etc.

Chequear que todo esté funcionando

Para estar seguros de que todo va bien, podemos usar unos comandos para ver cómo están corriendo las cosas:

kubectl get pods
kubectl get services
kubectl logs <nombre_del_pod>
curl http://<endpoint_del_clúster>

Con esto, podemos ver si nuestra aplicación está corriendo, si el servicio está disponible, qué dicen los registros de la aplicación y probar si podemos acceder a ella desde el navegador.

También podemos usar AWS CLI para revisar que todo esté configurado como debe en la nube.

Así nos aseguramos de que nuestra aplicación está lista y funcionando para los usuarios.

Pasos siguientes

Aquí encontrarás más información sobre cómo sacarle más provecho a Amazon EKS con temas un poco más avanzados.

Escalado automático

El escalado automático es una manera de hacer que tu clúster de EKS se ajuste solo, según cuánto se necesite. Imagina que puedes hacer que tu clúster crezca o se encoja automáticamente si ve que tus aplicaciones necesitan más o menos recursos. Esto ayuda a que tu aplicación siempre funcione bien, sin gastar de más en recursos que no se están usando.

CI/CD

EKS también se puede conectar con sistemas de CI/CD, que son herramientas para automatizar los pasos de construir, probar y desplegar tu aplicación. Esto significa que cada vez que cambies algo en tu código, se puede configurar para que automáticamente se cree una nueva versión de tu aplicación, se pruebe y luego se ponga a funcionar en el clúster. Esto hace que mantener y actualizar tu aplicación sea más rápido y menos propenso a errores.

Limpieza

Eliminar clúster

Para quitar el clúster EKS que armamos, usamos otra vez eksctl:

eksctl delete cluster --name mi-cluster

Este comando hace que eksctl elimine todo lo que se creó para el clúster, como:

  • Los servidores EC2
  • Las protecciones de seguridad
  • Las áreas de red
  • El clúster EKS en sí

Así nos aseguramos de no tener gastos extra por un clúster que ya no vamos a usar.

Verificar eliminación

Luego de borrar el clúster, podemos chequear que realmente se haya ido con algunos comandos:

aws eks list-clusters
aws ec2 describe-instances

El primero debería mostrar que el clúster ya no está en EKS. El segundo no debería mostrar nada si los servidores EC2 asociados fueron eliminados correctamente.

También podemos intentar:

eksctl get cluster --region <region>

Para confirmar en la región específica que nuestro clúster ya no aparece.

Con estos pasos, podemos estar tranquilos de que el clúster se eliminó por completo y que no habrá más cargos en nuestra cuenta de AWS por esos recursos.

Conclusión

Recapitulación

  • Aprendimos lo básico sobre Kubernetes y Amazon EKS, como qué son los clústeres, nodos, pods y servicios.
  • Preparamos las herramientas que necesitamos: AWS CLI, kubectl y eksctl.
  • Creamos un clúster de EKS con la ayuda de eksctl.
  • Pusimos a correr una aplicación de ejemplo usando archivos YAML.
  • Chequeamos que la aplicación estuviera trabajando correctamente.
  • Borramos el clúster de EKS que habíamos creado.

Próximos pasos

Aquí hay algunas ideas de lo que puedes hacer después:

  • Aprender a conectar tu proyecto con herramientas de CI/CD para que los despliegues se hagan solos.
  • Activar el escalado automático para que tu aplicación se ajuste sola según la demanda.
  • Mover aplicaciones que ya tienes a Amazon EKS.
  • Buscar cómo hacer que tu proyecto cueste menos y funcione mejor.
  • Añadir formas de ver qué está pasando con tu aplicación y solucionar problemas.
  • Asegurarte de que solo las personas correctas puedan acceder a tu proyecto.

Con lo que vimos hoy, ya tienes un buen punto de partida para empezar a usar Kubernetes con Amazon EKS.

Preguntas relacionadas

¿Cómo desplegar una aplicación en AWS?

Para desplegar una aplicación que usa contenedores en AWS, puedes seguir estos pasos básicos:

  • Elige la imagen de Docker que quieras usar, como puede ser Nginx o Node.js.
  • Sube esa imagen a un lugar donde se guardan imágenes de contenedores, como Amazon ECR.
  • Crea un archivo llamado Dockerfile donde defines cómo debe correr tu aplicación.
  • Usa un servicio de AWS como Amazon ECS, Amazon EKS o AWS Fargate para ejecutar tu aplicación.
  • Para manejar mejor el tráfico que llega a tu aplicación, puedes usar un balanceador de carga como Application Load Balancer.
  • Si necesitas que tu aplicación crezca o se reduzca según la demanda, configura servicios de auto-scaling.
  • Para mantener todo bajo control, usa CloudWatch para ver los logs y métricas de tu aplicación.

¿Qué es Amazon EKS?

Amazon EKS es un servicio que te permite usar Kubernetes, una herramienta para manejar aplicaciones en contenedores, de manera fácil en AWS. Con EKS, puedes hacer que tus aplicaciones sean más fiables y escalables sin tener que preocuparte por los detalles técnicos de Kubernetes.

¿Qué servicio se utiliza para ejecutar aplicaciones en contenedores en AWS?

Para correr aplicaciones en contenedores en AWS, el servicio principal es Amazon Elastic Container Service (Amazon ECS). ECS te ayuda a manejar tus contenedores, permitiéndote iniciar, detener y escalarlos fácilmente. AWS Fargate es otra opción que permite correr contenedores sin tener que gestionar servidores.

¿Qué es Ingress en AWS?

Ingress es una manera de hacer que las aplicaciones que corren en Kubernetes estén disponibles en internet de forma segura y eficiente. AWS tiene una herramienta llamada AWS Load Balancer Controller que ayuda a manejar los balanceadores de carga para el tráfico de Ingress, asegurando que tu aplicación sea fiable y pueda manejar bien el tráfico.

Related posts

Read more