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

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

Este tutorial de inicio rápido muestra los pasos para implementar la aplicación de muestra del juego 2048 y persistir sus datos en un clúster de Amazon EKS mediante eksctl. eksctl es una utilidad de infraestructura como código que aprovecha la infraestructura como código de AWS CloudFormation y le permite configurar un clúster completamente funcional con todos los componentes esenciales. Estos componentes incluyen un rol de Amazon VPC y de IAM diseñado para proporcionar permisos a los servicios de AWS que hemos definido. A medida que vayamos avanzando, lo guiaremos por el proceso de configuración del clúster e incorporaremos componentes de Amazon EKS para potenciar su clúster con capacidades operativas. Por último, implementará un ejemplo de carga de trabajo con las anotaciones personalizadas necesarias para una integración completa con los servicios de AWS.

En este tutorial:

Con la plantilla de clúster eksctl que aparece a continuación, creará un clúster de Amazon EKS con grupos de nodos administrados. Configura los siguientes componentes:

Configuración de la VPC

Al utilizar la siguiente plantilla de clúster eksctl, 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.

Tipo de instancia

Utilice el tipo de instancia t3.medium. Este tipo de instancia ofrece una combinación equilibrada de recursos informáticos, de memoria y de red, lo que resulta ideal para aplicaciones con un uso moderado de CPU que pueden experimentar picos ocasionales en la demanda.

Autenticación

Establezca las asignaciones de IRSA para facilitar la comunicación entre los pods de Kubernetes y los servicios de AWS. La plantilla está configurada para configurar un punto de conexión de OpenID Connect (OIDC) para la autenticación y la autorización. También establece una cuenta de servicio para el controlador de equilibrador de carga de AWS(LBC), un controlador responsable de exponer las aplicaciones y administrar el tráfico.

Persistencia de datos

Integre el complemento administrado por el controlador CSI de AWS EBS 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 fallo. La plantilla está configurada para instalar el complemento y establecer una cuenta de servicio

Acceso a aplicaciones externas

Configure e integre con el complemento del controlador del equilibrador de carga (LBC) de AWS para exponer la aplicación del juego 2048 mediante el LBC para aprovisionar dinámicamente un equilibrador de carga de aplicaciones (ALB).

Requisitos previos

Antes de comenzar, asegúrese de contar con los siguientes requisitos previos configurados para usar Amazon EKS.

Paso 1: configuración del clúster

En esta sección, creará un clúster administrado basado en un grupo de nodos mediante instancias t3.medium que contengan dos nodos. La configuración incluye una cuenta de servicio para el complemento Controlador de equilibrador de carga de AWS (LBC) y la instalación de la última versión del controlador CSI de AWS Amazon EBS. Para ver todos los complementos disponibles de eksctl, consulte Discovering addons en la documentación de eksctl.

  1. 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

    A continuación, se muestra un ejemplo de resultado:

    apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region: region-code managedNodeGroups: - name: eks-mng instanceType: t3.medium desiredCapacity: 2 iam: withOIDC: true serviceAccounts: - metadata: name: aws-load-balancer-controller namespace: kube-system wellKnownPolicies: awsLoadBalancerController: true addons: - name: aws-ebs-csi-driver wellKnownPolicies: # Adds an IAM service account ebsCSIController: true cloudWatch: clusterLogging: enableTypes: ["*"] logRetentionInDays: 30

Paso 2: creación del clúster

Ahora, lo tenemos todo listo para crear nuestro clúster de Amazon EKS. Este proceso tarda varios minutos en completarse. Si desea supervisar el estado, consulte la consola de AWS CloudFormation.

  1. Cree el clúster de Amazon EKS y especifique el cluster-config.yaml.

    eksctl create cluster -f cluster-config.yaml
    nota

    Si recibe Error: checking STS access en la respuesta, asegúrese de que utiliza la identidad de usuario correcta para la sesión actual del intérprete de comandos. Es posible que también tenga que especificar un perfil con nombre (por ejemplo, --profile clusteradmin) u obtener un nuevo token de seguridad para la AWS CLI.

    Cuando se haya completado, debería ver la siguiente respuesta de salida:

    2024-07-04 21:47:53 [✔] EKS cluster "web-quickstart" in "region-code" region is ready

Paso 3: configuración del acceso externo a las aplicaciones mediante el AWS Load Balancer Controller (LBC)

Con el clúster operativo, el siguiente paso es hacer que sus aplicaciones en contenedores sean accesibles externamente. Esto se logra mediante la implementación de un equilibrador de carga de aplicaciones (ALB) para dirigir el tráfico fuera del clúster a nuestros servicios, es decir, a nuestras aplicaciones. Cuando creamos nuestro clúster, establecimos unas cuentas de servicio para roles de IAM (IRSA) para el controlador del equilibrador de carga (LBC) con los permisos necesarios para crear ALB de forma dinámica, lo que facilitó el enrutamiento del tráfico externo a nuestros servicios de Kubernetes. En esta sección, configuraremos el LBC de AWS en nuestro clúster.

Configuración de variables de entorno

  1. Establezca la variable de entorno CLUSTER_REGION para el clúster de Amazon EKS. Sustituya el valor de muestra por region-code.

    export CLUSTER_REGION=region-code
  2. Establezca la variable de entorno CLUSTER_VPC para el clúster de Amazon EKS.

    export CLUSTER_VPC=$(aws eks describe-cluster --name web-quickstart --region $CLUSTER_REGION --query "cluster.resourcesVpcConfig.vpcId" --output text)

Instalación del controlador del equilibrador de carga de AWS (LBC)

El controlador del equilibrador de carga de AWS (LBC) aprovecha las definiciones de recursos personalizadas (CRD) de Kubernetes para administrar los equilibradores de carga elásticos de AWS(ELB). Estos CRD definen recursos personalizados, como los equilibradores de carga y los TargetGroupBindings, lo que permite que el clúster de Kubernetes los reconozca y administre.

  1. Utilice Helm para agregar el repositorio de gráficos de Amazon EKS a Helm.

    helm repo add eks https://aws.github.io/eks-charts
  2. Actualice los repositorios para asegurarse de que Helm esté al tanto de las últimas versiones de los gráficos:

    helm repo update eks
  3. Ejecute el siguiente comando de Helm para instalar simultáneamente las definiciones de recursos personalizadas (CRD) y el controlador principal del controlador del equilibrador de carga deAWS (LBC de AWS). Para omitir la instalación de los CRD, pase la marca --skip-crds, lo que puede resultar útil si los CRD ya están instalados, si se requiere una compatibilidad de versiones específica o en entornos con requisitos estrictos de control de acceso y personalización.

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ --namespace kube-system \ --set clusterName=web-quickstart \ --set serviceAccount.create=false \ --set region=${CLUSTER_REGION} \ --set vpcId=${CLUSTER_VPC} \ --set serviceAccount.name=aws-load-balancer-controller

    Debería ver la siguiente respuesta de salida:

    NAME: aws-load-balancer-controller LAST DEPLOYED: Wed July 3 19:43:12 2024 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: AWS Load Balancer controller installed!

Paso 4: implementación de la aplicación de ejemplo del juego 2048

Ahora que el equilibrador de carga está configurado, es el momento de habilitar el acceso externo a las aplicaciones en contenedores del clúster. 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), específicamente la anotación “scheme” y la anotación “target-type”. Estas anotaciones se integran con el controlador del equilibrador de carga (LBC) de AWS y le indican que administre 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”. Para obtener más anotaciones, consulte la sección Anotaciones en la documentación del LBC de AWS.

  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

Paso 5: persistencia de los datos mediante los nodos del controlador CSI de Amazon EBS

Ahora que el juego 2048 está funcionando en su clúster de Amazon EKS, es hora de asegurarse de que los datos del juego persistan de forma segura con el complemento administrado Controlador CSI de Amazon EBS. Este complemento se instaló en nuestro clúster durante el proceso de creación. Esta integración es esencial para preservar el progreso y los datos del juego incluso cuando se reinicien o sustituyan los pods o nodos de Kubernetes.

  1. Cree una clase de almacenamiento para el controlador CSI de EBS:

    kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/dynamic-provisioning/manifests/storageclass.yaml
  2. 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 spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ebs-sc
  3. 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
  4. 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
  5. Aplique la implementación actualizada:

    kubectl apply -f ebs-deployment.yaml

    Debería ver la siguiente respuesta de salida:

    deployment.apps/deployment-2048 configured

Con estos pasos, el juego 2048 en Amazon EKS ya estará configurado para persistir los datos mediante el controlador CSI de Amazon EBS. 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.

Paso 6: eliminar el clúster y los nodos

Cuando haya terminado con el clúster y los nodos que creó para este tutorial, deberá eliminarlos 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

Cuando se haya completado, debería ver la siguiente respuesta de salida:

2024-07-05 17:26:44 [✔] all cluster resources were deleted

Pasos a seguir a continuación

Los siguientes temas de documentación lo ayudarán a ampliar la funcionalidad de su clúster:

Para explorar formas de crear distintos tipos de clústeres: