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
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.mediumeksctl
, consulte Discovering addonseksctl
.
-
Cree un archivo denominado
cluster-config.yaml
y pegue en él el siguiente contenido. Sustituyaregion-code
por una región válida, comous-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
-
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)
Configuración de variables de entorno
-
Establezca la variable de entorno
CLUSTER_REGION
para el clúster de Amazon EKS. Sustituya el valor de muestra porregion-code
.export CLUSTER_REGION=
region-code
-
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.
-
Utilice Helm
para agregar el repositorio de gráficos de Amazon EKS a Helm. helm repo add eks https://aws.github.io/eks-charts
-
Actualice los repositorios para asegurarse de que Helm esté al tanto de las últimas versiones de los gráficos:
helm repo update eks
-
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”
-
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
-
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 degame-2048
dentro del clúster. Incluye la creación de un servicio denominadoservice-2048
que expone la implementación en el puerto80
y un recurso Ingress denominadoingress-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
-
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 31sDeberá esperar varios minutos para que el equilibrador de carga de aplicación (ALB) se aprovisione antes de comenzar con los siguientes pasos.
-
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.rproxy.goskope.comDebería ver el juego 2048 en el navegador. Juegue.
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.
-
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
-
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
-
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
-
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
-
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:
-
La entidad principal de IAM que creó el clúster es la única entidad principal que puede realizar llamadas al servidor de la API de Kubernetes con
kubectl
o laAWS Management Console. Si desea que otras entidades principales de IAM tengan acceso al clúster, debe agregarlas. Para obtener más información, consulte Concesión a los usuarios y roles de IAM de acceso a las API de Kubernetes y Permisos necesarios. -
Antes de implementar un clúster para su uso en producción, le recomendamos que se familiarice con toda la configuración de clústeres y nodos. Algunos ajustes (como habilitar el acceso SSH a los nodos de Amazon EC2) deben establecerse cuando se crea el clúster.
-
Para aumentar la seguridad del clúster, configure el complemento de interfaz de red de contenedores de Amazon VPC a fin de utilizar roles de IAM para cuentas de servicio.
Para explorar formas de crear distintos tipos de clústeres: