Inicio rápido: implementación de una aplicación web y almacenamiento de datos - Amazon EKS

Ayude a mejorar esta página

¿Quiere contribuir a esta guía del usuario? Elija el enlace Editar esta página en GitHub que se encuentra en el panel derecho de cada página. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.

Inicio rápido: implementación de una aplicación web y almacenamiento de datos

Implementación de una aplicación de juego y persistencia de sus datos en Amazon EKS

Este tutorial de inicio rápido muestra los pasos que se deben seguir para implementar la aplicación de muestra del videojuego 2048 y conservar sus datos en un clúster del modo automático de Amazon EKS mediante eksctl. El modo automático de Amazon EKS automatiza las tareas rutinarias para el almacenamiento en bloques de clústeres, las redes, el equilibrio de carga y el escalado automático de computación.

A medida que avancemos, explicaremos el proceso de configuración del clúster. El modo automático de Amazon EKS automatizará las tareas que se deben realizar para la creación de un nodo mediante una instancia administrada por EC2, así como para la creación de un equilibrador de carga de aplicaciones y de un volumen de EBS.

En términos generales, implementará una carga de trabajo de muestra con las anotaciones personalizadas necesarias para una integración completa con los servicios de AWS.

En este tutorial:

Utilizará la plantilla del clúster de eksctl que aparece a continuación para crear un clúster con el modo automático de EKS para el aprovisionamiento automatizado de nodos.

Configuración de la VPC: al utilizar la plantilla del clúster de eksctl que aparece a continuación, eksctl crea automáticamente una nube privada virtual (VPC) IPv4 para el clúster. De forma predeterminada, eksctl configura una VPC que aborda todos los requisitos de red, además de crear puntos de conexión públicos y privados.

Administración de instancias: el modo automático de EKS agrega o elimina nodos dinámicamente en el clúster de EKS en función de la demanda de las aplicaciones de Kubernetes.

Persistencia de los datos: utilice la capacidad de almacenamiento en bloques del modo automático de EKS para garantizar la persistencia de los datos de la aplicación, incluso en situaciones en las que el pod se reinicie o se produzca un error.

Acceso a aplicaciones externas: utilice la capacidad de equilibrio de carga del modo automático de EKS para aprovisionar dinámicamente un equilibrador de carga de aplicación (ALB).

Requisitos previos

Antes de comenzar, asegúrese de cumplir los siguientes requisitos previos para utilizar Amazon EKS.

  • Configure AWS CLI y las credenciales de configuración

  • Instalación de eksctl

  • Instale kubectl

Para obtener más información, consulte Configuración para usar Amazon EKS.

Configure el clúster

En esta sección, creará un clúster mediante el modo automático de EKS para el aprovisionamiento dinámico de nodos.

Cree un archivo denominado cluster-config.yaml y pegue en él el siguiente contenido. Sustituya region-code por una región válida, como us-east-1:

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region: <region-code> autoModeConfig: enabled: true

Ahora, estamos listos para crear el clúster.

Cree el clúster de Amazon EKS:

eksctl create cluster -f cluster-config.yaml
importante

Si no usa eksctl para crear el clúster, debe etiquetar manualmente las subredes de la VPC.

Cree la IngressClass

Cree una IngressClass de Kubernetes para el modo automático de EKS. La IngressClass define cómo el modo automático de EKS gestiona los recursos de ingreso. En este paso se configura la capacidad de equilibrio de carga del modo automático de EKS. Al crear recursos de ingreso para las aplicaciones, el modo automático de EKS utiliza esta IngressClass para aprovisionar y administrar automáticamente los equilibradores de carga, con lo que integra las aplicaciones de Kubernetes con los servicios de equilibrio de carga de AWS.

Guarde el siguiente archivo yaml como ingressclass.yaml:

apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb annotations: ingressclass.kubernetes.io/is-default-class: "true" spec: controller: eks.amazonaws.com/alb

Aplique la IngressClass al clúster:

kubectl apply -f ingressclass.yaml

Implemente la aplicación de muestra del videojuego 2048

En esta sección, explicamos los pasos para implementar el popular “juego 2048” como una aplicación de muestra dentro del clúster. El manifiesto proporcionado incluye anotaciones personalizadas para el equilibrador de carga de aplicación (ALB). Estas anotaciones se integran con EKS y le indican que gestione el tráfico HTTP entrante como “orientado a Internet” y lo dirija al servicio correspondiente en el espacio de nombres “game-2048” mediante el tipo de destino “ip”.

  1. Cree un espacio de nombres de Kubernetes llamado game-2048 con la marca --save-config.

    kubectl create namespace game-2048 --save-config

    Debería ver la siguiente respuesta de salida:

    namespace/game-2048 created
  2. Implemente la aplicación de ejemplo del juego 2048.

    kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml

    Este manifiesto configura una implementación, un servicio y una entrada de Kubernetes para el espacio de nombres game-2048, lo que crea los recursos necesarios para implementar y exponer la aplicación de game-2048 dentro del clúster. Incluye la creación de un servicio denominado service-2048 que expone la implementación en el puerto 80 y un recurso Ingress denominado ingress-2048 que define las reglas de enrutamiento para el tráfico HTTP entrante y las anotaciones para un equilibrador de carga de aplicaciones (ALB) con acceso a Internet. Debería ver la siguiente respuesta de salida:

    namespace/game-2048 configured deployment.apps/deployment-2048 created service/service-2048 created ingress.networking.k8s.io/ingress-2048 created
  3. Ejecute el siguiente comando para obtener el recurso Ingress para el espacio de nombres game-2048.

    kubectl get ingress -n game-2048

    Debería ver la siguiente respuesta de salida:

    NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 alb * k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com 80 31s

    Deberá esperar varios minutos para que el equilibrador de carga de aplicación (ALB) se aprovisione antes de comenzar con los siguientes pasos.

  4. Abra un navegador web y escriba la ADDRESS del paso anterior para acceder a la aplicación web. Por ejemplo:

    k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com

    Debería ver el juego 2048 en el navegador. Juegue.

    Jugar a 2048

Conserve los datos con el modo automático de Amazon EKS

Ahora que el videojuego 2048 se encuentra en funcionamiento en el clúster de Amazon EKS, es hora de asegurarse de que los datos del videojuego se conservan de forma segura mediante la capacidad de almacenamiento en bloque del modo automático de Amazon EKS.

  1. Cree un archivo denominado storage-class.yaml:

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
  2. Aplique la StorageClass:

    kubectl apply -f storage-class.yaml
  3. Cree una reclamación de volumen persistente (PVC) para solicitar el almacenamiento de los datos de su juego. Cree un archivo llamado ebs-pvc.yaml y agregue el siguiente contenido:

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc namespace: game-2048 spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: auto-ebs-sc
  4. Aplique el PVC en su clúster:

    kubectl apply -f ebs-pvc.yaml

    Debería ver la siguiente respuesta de salida:

    persistentvolumeclaim/game-data-pvc created
  5. Ahora, tiene que actualizar la implementación del juego 2048 para usar este PVC para almacenar datos. La siguiente implementación está configurada para usar el PVC para almacenar los datos del juego. Cree un archivo llamado ebs-deployment.yaml que contenga lo siguiente:

    apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: replicas: 3 # Adjust the number of replicas as needed selector: matchLabels: app.kubernetes.io/name: app-2048 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - name: app-2048 image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: game-data mountPath: /var/lib/2048 volumes: - name: game-data persistentVolumeClaim: claimName: game-data-pvc
  6. Aplique la implementación actualizada:

    kubectl apply -f ebs-deployment.yaml

    Debería ver la siguiente respuesta de salida:

    deployment.apps/deployment-2048 configured

Tras seguir estos pasos, el videojuego 2048 deberá estar configurado en el clúster para conservar los datos mediante la capacidad de almacenamiento en bloque del modo automático de Amazon EKS. Esto garantiza que el progreso y los datos del juego estén seguros incluso en caso de que se produzca un fallo en el pod o en el nodo.

Si le ha gustado este tutorial, envíenos sus comentarios para que podamos ofrecerle más tutoriales de inicio rápido específicos para cada caso práctico, como este.

Elimine el clúster y los nodos

Cuando haya terminado de utilizar el clúster que creó para este tutorial, deberá eliminarlo con el siguiente comando. Si quiere hacer más con este clúster antes de eliminarlo, consulte Siguientes pasos.

eksctl delete cluster -f ./cluster-config.yaml

EKS limpiará automáticamente todos los nodos que haya aprovisionado cuando se elimine el clúster.