A continuación se presenta una guía paso a paso para implementar Kubernetes en Amazon EKS (Elastic Kubernetes Service), la solución administrada de Kubernetes de AWS. Esta guía abarca desde la configuración de los requisitos previos hasta la verificación de la implementación y el despliegue de aplicaciones en el clúster.
🔧 Requisitos Previos
Antes de comenzar, asegúrate de contar con:
- Cuenta de AWS: Con permisos administrativos o los permisos necesarios para crear recursos como VPCs, roles IAM, clústeres EKS y grupos de nodos.
- AWS CLI: Configurada y autenticada con tus credenciales.
- eksctl: Una herramienta de línea de comandos que simplifica la creación y gestión de clústeres EKS. Se recomienda eksctl, ya que automatiza muchos de los pasos necesarios.
- kubectl: La herramienta de línea de comandos para interactuar con Kubernetes.
- IAM Roles y Políticas: Permisos adecuados para crear y asociar roles a los recursos EKS.
- (Opcional) Terraform o CloudFormation: Si prefieres gestionar la infraestructura como código.
🪜 Pasos para Implementar Kubernetes en Amazon EKS
1. Instalar y Configurar Herramientas
a. Instalar AWS CLI
Verifica que tienes instalada la última versión de AWS CLI:
aws --version
Si no la tienes, sigue la guía oficial de instalación.
b. Instalar eksctl
Instala eksctl siguiendo las instrucciones de su documentación oficial. Por ejemplo, en sistemas basados en Unix:
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl\_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
c. Instalar kubectl
Asegúrate de tener kubectl instalado y actualizado. Puedes instalarlo con:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
2. Crear el Clúster EKS
Utilizando eksctl, crear un clúster es muy sencillo. Puedes personalizar opciones como la región, versión de Kubernetes, y la cantidad/tamaño de nodos en el grupo de trabajadores.
Ejemplo de comando para crear un clúster:
eksctl create cluster \
--name mi-cluster-eks \
--version 1.24 \
--region us-east-1 \
--nodegroup-name workers \
--node-type t3.medium \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--managed
Este comando:
- Crea un clúster llamado
mi-cluster-eks en la región us-east-1.
- Utiliza la versión especificada de Kubernetes.
- Configura un grupo de nodos gestionados con instancias
t3.medium y escalabilidad entre 1 y 4 nodos.
Nota: El proceso puede tardar unos 10–20 minutos. Durante la creación, eksctl se encargará de crear la VPC, subredes, roles IAM y demás recursos necesarios.
3. Configurar kubectl para Conectarse al Clúster
Una vez completada la creación del clúster, eksctl actualiza automáticamente el archivo kubeconfig. Verifica la conexión con:
kubectl get svc
Deberías ver la lista de servicios del namespace default del clúster.
4. Verificar el Estado del Clúster y Grupos de Nodos
Para ver el estado de los nodos, ejecuta:
kubectl get nodes
La salida deberá listar los nodos que se encuentran en estado Ready.
Si deseas más detalles sobre los componentes del clúster:
kubectl get pods -A
Esto muestra los pods que se están ejecutando en todos los namespaces, lo cual es útil para revisar los add-ons que EKS instala (por ejemplo, kube-system).
5. Desplegar Aplicaciones en el Clúster
Con el clúster operativo, puedes desplegar aplicaciones utilizando archivos YAML de Kubernetes.
Ejemplo de despliegue de una aplicación NGINX:
-
Crear un archivo YAML llamado nginx-deployment.yaml**:**apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
-
**Aplicar la definición:**kubectl apply -f nginx-deployment.yaml
-
**Verificar el despliegue:**kubectl get deployments
kubectl get pods
Exponer la aplicación (opcional)
Para exponer el despliegue a través de un LoadBalancer de AWS:
-
**Crear un servicio tipo LoadBalancer:**apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
-
**Aplicar el servicio:**kubectl apply -f nginx-service.yaml
-
**Obtener la IP o DNS del LoadBalancer:**kubectl get svc nginx-service
Una vez asignada la dirección, podrás acceder a NGINX desde el navegador.
6. Administrar y Escalar el Clúster
Escalado de nodos:
Si necesitas ajustar el tamaño del grupo de nodos, puedes usar eksctl nuevamente. Por ejemplo, para escalar a 5 nodos:
eksctl scale nodegroup --cluster mi-cluster-eks --name workers --nodes 5 --region us-east-1
Escalado de aplicaciones:
Modifica el número de réplicas en el despliegue y aplica los cambios:
kubectl scale deployment/nginx-deployment --replicas=4
Actualizaciones:
- Actualizar
kubectl, eksctl y versiones de Kubernetes: Revisa periódicamente las versiones y las notas de lanzamiento de EKS para mantenerte actualizado.
- Monitoreo y Logging: EKS se integra con servicios de AWS como CloudWatch para logs y monitoreo, lo cual es útil para la administración del clúster en producción.
7. Limpieza de Recursos (Opcional)
Si deseas eliminar el clúster para evitar costos innecesarios, usa:
eksctl delete cluster --name mi-cluster-eks --region us-east-1
Esto eliminará el clúster, los grupos de nodos y los recursos asociados creados por eksctl.
Conclusión
La implementación de Kubernetes en Amazon EKS con la ayuda de eksctl y kubectl simplifica la creación y gestión del clúster. Al seguir estos pasos podrás:
- Configurar el entorno de EKS de forma automatizada.
- Administrar y escalar tanto el clúster como las aplicaciones desplegadas.
- Aprovechar la integración con otros servicios de AWS para monitoreo y seguridad.