Implementación de una aplicación SpringBoot en Amazon EKS mediante GitHub, Jenkins, Maven y Docker

Paso 1: Crear una instancia Ubuntu
Creamos una instancia de tipo t2.medium y habilitamos el trafico HTTP, HTTPS.

Paso 2: Instalar JDK 11
sudo apt update -y
wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /etc/apt/keyrings/adoptium.asc
echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
sudo apt update -y
sudo apt install temurin-17-jdk -y
java --version
Paso 3: Instalar y configurar Jenkins
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update -y
sudo apt-get install jenkins -y
sudo systemctl start jenkins
sudo systemctl status jenkins
Necesitamos ir a nuestro grupo de seguridad de nuestra instancia y agregar el puerto 8080 en las reglas de seguridad de entrada.

Luego acceder a Jenkins mediante la ip publica de la instancia.

http://{IP-INSTANCIA}:8080

Para obtener el password ejecutar en siguiente comando en el terminal de la instancia , para luego proseguir con la instalación.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword


Creamos un usuario para poder ingresar a la herramienta.



Paso 4—Actualizar visudo y asignar privilegios administrativos al usuario jenkins
Abre el archivo /etc/sudoers
en modo vi
sudo vi /etc/sudoers
Agregue la siguiente línea al final del archivo
jenkins ALL=(ALL) NOPASSWD: ALL
Después de agregar la línea, guarde y cierre el archivo con :wq!
Ahora podemos usar Jenkins como usuario root y para eso ejecutar el siguiente comando
sudo su - jenkins
Paso 5— Instalar Docker con el usuario jenkins
Ejecutar los siguientes comandos con el usuario Jenkins
sudo apt-get update
sudo apt-get install docker.io -y
sudo usermod -aG docker jenkins
newgrp docker
sudo chmod 777 /var/run/docker.sock
Paso 6: Instalar y configurar AWS y EKS CLI
sudo apt install awscli
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip
unzip awscliv2.zip
sudo ./aws/install --update
aws --version
Luego de instalar AWS CLI lo siguiente es configurar nuestro AWS CLI para que pueda autenticarse y poder comunicarse con el entorno AWS.
aws configure

Paso 7: Instalar y configurar kubectl
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
kubectl version
Paso 8: Crear Cluster en EKS utilizando eksctl
Primero debemos de instalar eksctl para luego empezar a crear nuestro cluster en AWS EKS.
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
eksctl version
eksctl create cluster --name new-eks-cluster --version 1.25 --region us-east-2 --nodegroup-name worker-nodes --node-type t2.micro --nodes 2
La creación del cluster y nodos demora aproximadamente 15 a 20 minutos.
Step 9: Agregar el rol IAM de EKS a la instancia.
Crear un rol con permisos de administrador.




Luego de haber creado el rol , se tiene que asociar a la instancia creada.


Step 10: Añadir las credenciales de Docker Hub y GitHub en Jenkins.
En Docker Hub crearemos un token de acceso para poder realizar la comunicación entre Docker Hub con Jenkins.





De igual forma se registrara las credenciales de GitHub



Step 11: Añadir Maven en Global Tool Configuration
Ir a la siguiente ruta Dashboard -> Manage Jenkins -> Tools

Step 12 : Build, Deploy and Test Jenkins Pipeline
Lo siguiente sera crear una nueva canalización:



Step 13: Añadir Webhook para el despliegue automático
Nos dirigimos a nuestro repositorio hacemos click en la sección Settings y luego en la opción Webhooks y le dan click en añadir webhook.

En Payload poner la ip de nuestro Jenkins seguido de github-webhook/

Step 14 : Eliminar nuestro cluster de EKS
eksctl delete cluster --name new-eks-cluster
Espero que te pueda ser útil este tutorial , si es posible compártelo para que otros desarrolladores puedan realizarlo.
Si tienes algún duda ,comentario, puedes escribirme a mi LinkedIn.
Cristhian Caldas Mendoza.