En mi artículo anterior, profundicé en el fascinante mundo de los microservicios: . Este fue el comienzo de mi completa serie de artículos sobre microservicios y sus patrones. Patrones de arquitectura de microservicios, Parte 1: Patrones de descomposición Si bien el paso lógico sería continuar con la Parte 2 de esta serie, he decidido que lo siguiente que me gustaría explorar y contarles es el proceso vital de entregar estos microservicios al usuario final sin problemas. Descripción general del contenido Motivación [Módulo 1]: Servidor virtual AWS EC2 [Módulo 2]: Servidor Jenkins [Módulo 3]: Git y Github [Módulo 4]: Apache Maven [Módulo 5]: Docker [Módulo 6]: Ansible [Módulo 7]: Kubernetes Conclusión Sobre el Autor Motivación CI/CD es una técnica para entregar aplicaciones a los clientes, que se logra agregando automatización a diferentes etapas del desarrollo de aplicaciones. Creo que comprender CI/CD (integración continua e implementación continua) puede permitir a los desarrolladores obtener una mejor comprensión de cómo existen los artefactos del proyecto backend más allá de los límites del repositorio del proyecto. Esta comprensión también puede crear un cambio fundamental en la perspectiva del desarrollador. En lugar de simplemente ver su trabajo como líneas de código, pueden empezar a adoptar el contexto más amplio de su proyecto como un producto valioso. En este artículo, nuestro objetivo es desmitificar el proceso de CI/CD a través de una aplicación práctica. Lo guiaremos a través de un tutorial paso a paso, desglosándolo módulo por módulo, donde creará una canalización de CI/CD manualmente. Para hacer esto, aprovecharemos el poder de las herramientas DevOps contemporáneas como y . Entonces, ¡comencemos este viaje! AWS, Docker, Kubernetes, Ansible, Git, Apache Maven Jenkins [Módulo 1]: Servidor virtual AWS EC2 Este módulo está dedicado a la creación de una instancia de servidor virtual AWS EC2. Como parte de este artículo, configurará tres instancias EC2 para Jenkins, Ansible y Kubernetes. Por ahora, puede continuar con los siguientes módulos y volver a visitar este módulo en las secciones "[módulo 2]: Jenkins", "[módulo 6]: Ansible" y "[módulo 7]: Kubernetes". Paso 1: cree una cuenta de AWS Vaya a https://aws.amazon.com. Haga clic en el botón . Crear una cuenta de AWS Siga las instrucciones en la página web para crear una cuenta. Paso 2: inicie sesión en su cuenta de AWS Vaya a https://console.aws.amazon.com/console/home. Haga clic en el botón . Iniciar sesión Ingrese todas las credenciales necesarias en esta página web. Paso 3: busque el servidor virtual EC2 Busque EC2 en el cuadro de búsqueda. Elija Servidor virtual EC2 haciendo clic en . Servicio EC2 Haga clic en el botón . Iniciar instancia Paso 4: Configurar la sección “Nombre y etiquetas” Vaya a la sección . "Nombre y etiquetas" Proporcione un nombre para una nueva instancia del servidor virtual AWS EC2 en la sección . "Nombre" También puede agregar etiquetas adicionales para su servidor virtual haciendo clic en . "Agregar etiquetas adicionales" Paso 5: Configure la sección "Imágenes de aplicaciones y sistemas operativos (imagen de máquina de Amazon)" Vaya a la sección . "Imágenes de aplicaciones y sistema operativo (imagen de máquina de Amazon)" Para jugar con el servidor virtual : GRATIS Seleccione el sistema operativo para su servidor virtual: . Amazon Linux En la sección , seleccione una máquina con la . Imagen de máquina de Amazon (AMI) etiqueta elegible para el nivel gratuito Paso 6: Configurar la sección "Tipo de instancia" Vaya a la sección . "Tipo de instancia" Para jugar con el servidor virtual : GRATIS Seleccione un tipo con la en la sección . etiqueta elegible para el nivel gratuito Tipo de instancia Para mí es . t2.micro (Familia: t2 1cCPU 1 GiB Memoria Generación actual: verdadero) Paso 7: Configurar la sección "Configurar almacenamiento" Vaya a la sección . "Configurar almacenamiento" Para jugar con el servidor virtual : GRATIS No cambie la configuración predeterminada. Los clientes elegibles para el nivel gratuito pueden obtener . 30 GB de almacenamiento magnético o de uso general (SSD) de EBS Paso 8: Configurar la sección "Configuraciones de red" Vaya a la sección . "Configuración de red" Necesita configurar la seguridad de su servidor virtual. Para hacer esto, Haga clic en el botón . "Crear grupo de seguridad" Agregue el nombre de su nuevo grupo de seguridad en la sección . "Nombre del grupo de seguridad" Agregue una descripción de su nuevo grupo de seguridad en la sección . "Descripción" De forma predeterminada, se puede acceder a su servidor virtual a través de ( ). Si necesita tipos de conexión adicionales, agréguelos agregando reglas de grupo de seguridad entrante adicionales. Tipo: SSH, Protocolo: TCP, Puerto: 22 Paso 9: Configurar la sección "Par de claves (iniciar sesión)" Vaya a la sección . "Par de claves (Iniciar sesión)" Cree un nuevo par de claves si aún no lo ha creado. Si aún no ha creado : un "par de claves" Haga clic en el botón . "Crear nuevo par de claves" Asigne un nombre a su nuevo par de claves en la sección . "Nombre del par de claves" Seleccione el tipo de par de claves o . Elijo el tipo . RSA ED25519 RSA Seleccione Formato de archivo de clave privada. Elección de y . Elijo el formato . .pem .ppk .pem Haga clic en el botón . "Crear par de claves" Aparecerá una ventana emergente que le pedirá que descargue el archivo de clave privada. Acepta y descarga el archivo a tu computadora. Paso 10: Inicie la instancia del servidor virtual EC2 Inicie la instancia del servidor virtual EC2 haciendo clic en el botón . "Iniciar instancia" Después de completar el proceso de creación de la instancia del servidor virtual EC2, verá lo siguiente. Luego debe ir a la sección haciendo clic en el botón . "Instancias" "Ver todas las instancias" Ahora puede ver que su instancia del servidor virtual AWS EC2 se está ejecutando. [Módulo 2]: Servidor Jenkins Ahora, configuremos JenkinsServer en la instancia del servidor virtual EC2. Paso 1: crear una instancia de servidor virtual AWS EC2 Necesita un servidor virtual para ejecutar Jenkins. Siga las instrucciones de la sección de este tutorial para finalizar este paso y crear una instancia de servidor virtual EC2 con el nombre JenkinsServer. [Módulo 1]: Servidor virtual AWS EC2 No olvide agregar una configuración de grupo de seguridad. Permite que y funcionen en los puertos y respectivamente. Jenkins SSH 8080 22 Utilice el nombre para distinguir su instancia de servidor virtual EC2. "JenkinsServer" Cree el grupo de seguridad y para una nueva instancia AWS EC2 . Puede reutilizarlos más adelante en el artículo. "CI_CD_Pipeline" "CI_CD_Pipeline_Key_Pair" "JenkinsServer" Paso 2: Conéctese a una instancia del servidor virtual AWS EC2 Vaya a → → la página de inicio de la Consola de AWS Panel de la Consola de administración EC2 Instancias. Luego debes elegir y luego hacer clic en el botón . JenkinsServer "Conectar" Entonces verá esta página web. Debes volver a hacer clic en el botón . "Conectar" Ahora puede ver la terminal en línea de la instancia del servidor virtual EC2. Paso 3: descargue el repositorio de Jenkins Ahora necesita descargar Jenkins en su instancia de servidor virtual EC2. Siga estas instrucciones: Vaya a de descarga de Jenkins. la página web Puede ver las opciones de lanzamientos estables (LTS) y regulares (semanales). Elija la opción LTS. Red Hat/Fedora/Alma/Rocky/CentOS Verá esta página web. Copie el comando y ejecútelo para descargar archivos Jenkins del repositorio de Jenkins en Internet y guárdelos en la ubicación especificada en su instancia de servidor virtual EC2. “sudo get…” sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo Ahora Jenkins está descargado. Paso 4: importar la clave de Jenkins Para finalizar la instalación de Jenkins, necesitamos importar la clave de Jenkins. Para importar la clave de Jenkins necesitamos copiar el comando y ejecutarlo. "sudo rpm..." sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key De esta manera, el administrador de paquetes puede verificar que los paquetes de Jenkins que instala son exactamente los publicados por el proyecto Jenkins y que no han sido manipulados ni dañados. “rpm” Paso 5: instale Java Para ejecutar Jenkins, necesitamos instalar en nuestra instancia de servidor virtual EC2. Java Para instalar , utilice este comando. Java sudo amazon-linux-extras install java-openjdk11 -y Verifique si se instaló correctamente usando este comando: Java java -version Verás algo así. Paso 6: instale fontconfig Para ejecutar Jenkins, necesita instalar en nuestra instancia de servidor virtual EC2. fontconfig Utilice este comando. sudo yum install fontconfig java-11-openjdk -y Fontconfig es una biblioteca diseñada para proporcionar configuración de fuentes, personalización y acceso a aplicaciones en todo el sistema. Jenkins lo requiere porque Jenkins tiene características que representan fuentes. Paso 7: instale Jenkins En pasos anteriores, configuró su instancia de servidor virtual EC2 para usar un repositorio Jenkins específico y luego importó la clave GPG asociada con este repositorio. Ahora, debe ejecutar el comando que buscará en todos los repositorios que conoce, incluido el de Jenkins que agregó, para encontrar el paquete de Jenkins. Una vez que encuentre el paquete Jenkins en el repositorio de Jenkins, lo descargará e instalará. Ejecutemos este comando. sudo yum install jenkins -y Paso 8: inicie Jenkins Puede iniciar Jenkins usando este comando. sudo systemctl start jenkins Para comprobar que Jenkins se está ejecutando, utilice este comando. sudo systemctl status jenkins Verá el resultado tal como está en la siguiente captura de pantalla: Jenkins ahora debería estar en funcionamiento. Paso 9: acceda a Jenkins Para acceder a la aplicación Jenkins, abra cualquier navegador web e ingrese la dirección IP pública o el nombre de dominio de su instancia EC2 seguido del puerto 8080. http://<your-ec2-ip>:8080 La primera vez que acceda a Jenkins, se bloqueará con una contraseña generada automáticamente. Debe mostrar esta contraseña usando el siguiente comando. sudo cat /var/lib/jenkins/secrets/initialAdminPassword Copie esta contraseña, regrese a su navegador, péguela en el campo Contraseña de administrador y haga clic en "Continuar". Entonces podrás ver esta página web. Ahora puede utilizar su servidor Jenkins. Paso 10: crear una nueva canalización de Jenkins Ahora, como Jenkins funciona bien, puede comenzar a crear la canalización de Jenkins. Para crear una canalización de Jenkins, debe crear un nuevo "proyecto de estilo libre". Para crear un nuevo "proyecto de estilo libre", debe ir al panel de Jenkins y hacer clic en el botón . "Nuevo elemento" Ingrese el nombre del “proyecto Freestyle” de Github (el nombre de “pipeline” se usará más adelante) y luego haga clic en el botón . “Aceptar” Luego proporcione la de la tubería. descripción Luego haga clic en el botón “Aplicar” y “Guardar”. Después de eso, significa que creó los fundamentos de la canalización que se construirá en este tutorial. [Módulo 3]: Git y Github Ahora que Jenkins se ejecuta en la instancia del servidor virtual AWS EC2, puede configurar Git con la canalización. Git es un sistema de control de versiones distribuido (VCS) diseñado para ayudar a los equipos de software a realizar un seguimiento de cada modificación del código en un tipo especial de base de datos. Si se comete un error, los desarrolladores pueden retroceder el tiempo y comparar versiones anteriores del código para ayudar a corregir el error y minimizar las interrupciones para todos los miembros del equipo. VCS es especialmente útil para equipos ya que les ayudan a reducir el tiempo de desarrollo y aumentar las implementaciones exitosas [1]. gratuito y de código abierto DevOps Git, como sistema de control de versiones más popular, nos permite extraer el código más reciente del repositorio Github de su proyecto a su instancia de servidor virtual EC2 donde está instalado Jenkins. Paso 1: instalar Git Utilice este comando para instalar Git. sudo yum install git -y Ahora verifique que Git esté funcionando, usando este comando. git --version Ahora Git está funcionando bien en la instancia del servidor virtual EC2. Paso 2: abra el panel de Jenkins Como Git funciona bien en la instancia del servidor virtual EC2, ahora podemos integrar Jenkins con Git. Para iniciar esta integración, instalemos el complemento Jenkins Github. Vaya a la sección del panel de Jenkins. Paso 3: abra el Administrador de complementos de Jenkins Haga clic en el botón y luego haga clic en el botón . "Administrar Jenkins" "Administrar complementos" Paso 4: busque el complemento Github Jenkins Haga clic en el botón . "Complementos disponibles" Busque el cuadro de búsqueda del complemento . Github Seleccione el complemento . Github Paso 5: instale el complemento Github Jenkins Seleccione el complemento . Y luego haga clic en el botón . Github “Instalar sin reiniciar” Espere a que finalice la descarga del complemento Github. ¡Sí! El complemento Jenkins Github está instalado. Paso 6: Configurar el complemento Github Jenkins Ahora que el complemento GitHub Jenkins está instalado, puede configurar este complemento para integrar finalmente Jenkins con Git. Para hacerlo, debe regresar a la página principal haciendo clic en el botón "Volver a la página principal". Luego, en la página principal, debe hacer clic en el botón y luego hacer clic en el botón . "Administrar Jenkins" "Configuración global de herramientas" Luego en la página web de Configuración Global de Herramientas debes ir a la sección Git. En la sección Git, debe configurar Git proporcionando el nombre y la ruta a Git en la computadora. Luego haga clic en los botones y **.** “Aplicar” “Guardar” Aquí ha terminado de configurar el complemento Jenkins Github. Paso 7: integrar Git en el proceso Ahora, una vez instalado y configurado el complemento Jenkins Github, podrá utilizar este complemento dentro de su canalización. Esto permitirá que la canalización que creó en el módulo 2 extraiga el código de su proyecto del repositorio de GitHub especificado. Bueno, para integrar este complemento en su canalización, debe ir a la sección Administración de código fuente y elegir Git en su canalización. Luego debe proporcionar la URL del repositorio de su proyecto. Si el repositorio de su proyecto es público en Github, no necesita proporcionar credenciales. Si el repositorio del proyecto es privado en Github, debes proporcionar credenciales. Puedes usar mi proyecto con la siguiente URL del repositorio: . https://github.com/Sunagatov/Hello.git Simplemente cópielo y péguelo en la entrada " . Luego haga clic en los botones y para finalizar la integración de Git con el pipeline. URL del repositorio" "Aplicar" "Guardar" Paso 8: Pruebe Git integrado en la canalización Ahora puede usar su canalización actualizada para extraer un proyecto de Github. Para hacerlo, debe hacer clic en el botón **“Construir ahora”**. Como resultado, verá una compilación exitosa en el historial de compilación. Abra la primera compilación del historial de compilación. Ahora puede ver el resultado exitoso del trabajo de la primera compilación. Si abre su terminal AWS EC2. Puedes comprobar que la tubería funciona bien. Simplemente use este comando. cd /var/lib/jenkins/workspace/{your pipeline name} De esta manera, puede ver que su proyecto de Github se extrajo a su instancia de servidor virtual AWS EC2. [Módulo 4]: Apache Maven es una herramienta de gestión de proyectos y automatización de compilaciones ampliamente utilizada en el desarrollo de software. Agiliza el proceso de compilación, prueba y empaquetado de código al administrar las dependencias del proyecto y proporcionar un ciclo de vida de compilación consistente. Maven emplea archivos de configuración basados en XML (archivos POM) para definir la estructura, las dependencias y las tareas del proyecto, lo que permite a los desarrolladores gestionar e implementar de manera eficiente proyectos de software complejos. Apache Maven Ahora que ha integrado Git en el proceso, puede mejorarlo aún más incorporando Apache Maven, que le permite compilar, probar y empaquetar su proyecto. Para hacerlo, necesita instalar Apache Maven en su instancia del servidor virtual AWS EC2 donde se instalaron Jenkins y Git. Paso 1: descargue Apache Maven Para descargar Apache Maven, vaya al directorio . "/opt" cd /opt Y luego usa este comando. sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz Este comando descargará el último Apache Maven oficial (consulte la última versión en el sitio web oficial de Apache Maven). Para encontrar la última versión oficial de Apache Maven, utilice el enlace . https://maven.apache.org/download.cgi Paso 2: extraiga Apache Maven del archivo Utilice este comando para extraer Apache Maven del archivo descargado: sudo tar -xvzf apache-maven-*.tar.gz Paso 3: agregue JAVA_HOME y M2_HOME Vaya a la carpeta raíz usando este comando. cd ~ Edite el archivo usando este comando. .bash_profile vi .bash_profile Agregue las variables y M2_HOME. JAVA_HOME Asigne la ruta a JDK11 para y la ruta al directorio maven para la variable . JAVA_HOME M2_HOME Para encontrar la ruta JDK, use este comando. sudo find / -name java Cómo utilizar VIM Para el archivo presione el botón del teclado para insertar datos. editar “I” Para el archivo presione el botón del teclado "esc" e ingrese ":w". guardar Para del archivo presione el botón del teclado e ingrese . salir “esc” “:q” Guarde los cambios. Luego, ejecute este comando para actualizar las variables del sistema. source .bash_profile Para verificar , use este comando. $PATH echo $PATH Para verificar , utilice este comando. Apache Maven mvn -v Si has hecho todo correctamente podrás visualizar la versión de Apache Maven. Paso 4: Instale el complemento Apache Maven Jenkins Dado que Apache Maven se puede utilizar en una instancia EC2, puede instalar el complemento Apache Maven para integrarlo con la canalización. Para lograr esto, siga estos pasos: Vaya a "Panel de control" → "Administrar Jenkins" → "Administrar complementos" → "Disponible". En el cuadro de búsqueda, ingrese . "Maven" Elija el complemento . "Integración de Maven" Espere a que finalice el proceso de descarga. Y luego haga clic en el botón . “Volver a la página principal” Paso 5: configurar el complemento Apache Maven Jenkins Con la instalación exitosa del complemento Apache Maven Jenkins, ahora puede utilizar este complemento dentro del proceso que creó y actualizó en los módulos 2 y 3. Para hacerlo, siga estos pasos: Vaya a "Panel de control" → "Administrar Jenkins" → "Configuración global de herramientas" → "JDK" Haga clic en el botón "Agregar JDK". Desmarque "Instalar automáticamente". Luego vaya a la sección . Haga clic en el botón . Desmarque "Maven" "Agregar Maven" "Instalar automáticamente". Luego agregue y la ruta . el nombre MAVEN_HOME Haga clic en los botones y . "Aplicar" "Guardar" Aquí ha terminado de configurar el complemento Apache Maven Jenkins. Paso 6: integrar Apache Maven en la canalización Ahora que el complemento Apache Maven GitHub está instalado y configurado, ahora puede utilizar Apache Maven dentro de su canalización. Esto permitirá que la canalización que creó en el “[módulo 2]: Servidor Jenkins” construya el código de su proyecto para crear un artefacto jar. Para integrar Apache Maven en la canalización, debe seguir estos pasos: Navegue hasta "Panel de control" → "CI_CD_Pipeline" → "Configurar" → "Pasos de compilación". Haga clic en el botón . "Agregar paso de compilación" Elija la opción . "Invocar objetivos Maven de nivel superior" Elija como "Apache-Maven" "Versión Maven". Agregue el comando a la entrada . "limpiar paquete" "Objetivos" Haga clic en el botón . "Avanzado" Agregue "pom.xml" a la entrada . "POM" Finalmente, debe hacer clic en los botones y para finalizar la integración de Apache Maven con la canalización. "Aplicar" "Guardar" Paso 7: Pruebe Apache Maven integrado en la canalización Ahora puede utilizar su canal actualizado para construir su proyecto Github. Para hacerlo, debe hacer clic en el botón **“Construir ahora”**. Como resultado, verá un resultado de trabajo exitoso en el historial de compilación. Si abre su terminal AWS EC2. Puedes comprobar que la tubería funciona bien. Simplemente use este comando. cd /var/lib/jenkins/workspace/{your pipeline name}/target De esta manera podrá ver el artefacto JAR, que indica la compilación exitosa de su proyecto desde GitHub. [Módulo 5]: Docker Ahora creemos una nueva instancia EC2 con el nombre "Ansible Server" donde instalará Docker y Ansible. Paso 1: lanzar una instancia del servidor virtual AWS EC2 Utilice las instrucciones de la sección " de este tutorial para finalizar este paso. No olvide agregar una configuración de grupo de seguridad. Permite que Docker y SSH funcionen en los puertos 8080 y 22 respectivamente. Iniciar una instancia de servidor virtual AWS EC2" Paso 2: Conéctese a una instancia del servidor virtual AWS EC2 Haga clic en el botón "Conectar". Ahora puede ver la terminal en línea de la instancia del servidor virtual EC2. sudo chown ansible-admin:ansible-admin /opt/docker Paso 3: instale Docker en el servidor virtual Ansible EC2. Ahora necesita instalar Docker en su instancia Ansible EC2. Para hacer eso, necesita crear una nueva carpeta acoplable. sudo mkdir /opt/docker Luego, instale Docker ejecutando el siguiente comando. sudo yum install docker -y Paso 4: Agregar el usuario actual al grupo Docker en el servidor virtual Ansible EC2 Debe agregar el usuario actual al grupo Docker en el servidor virtual EC2 para otorgar privilegios de administrador a Docker. "ansible-admin" "AnsibleServer" sudo usermod -a -G docker ansible-admin Deberá cerrar sesión y volver a iniciarla para que estos cambios surtan efecto. Luego puedes ejecutar el siguiente comando. id ansible-admin para ver que el nuevo usuario de Docker existe. Paso 5: inicie Docker Ahora que Docker está instalado en la instancia Ansible EC2, puede iniciarlo ejecutando el siguiente comando. sudo systemctl start docker Cuando se inicia Docker, puede ejecutar el siguiente comando sudo systemctl status docker para ver que la ventana acoplable está activa y ejecutándose ahora. Paso 6: crear un archivo Docker En la versión final del proceso, el proceso implicará crear una nueva imagen de Docker a partir de su proyecto de GitHub y enviarla a Docker Hub. Para lograr esto, su proyecto GitHub debe contener un Dockerfile. Si utilizó el proyecto que se ofreció en el módulo " , entonces no necesita crear un nuevo Dockerfile ya que este repositorio de proyectos ya contiene Dockerfile. "Hola" [Módulo 3]: Git y Github" FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ] Si utilizó su propio repositorio de proyectos y no contenía un Dockerfile, deberá crear un nuevo Dockerfile. Para crear un nuevo Dockerfile, ejecute el siguiente comando, que creará el nuevo archivo. sudo touch Dockerfile Luego puede completar este archivo con una secuencia de comandos que describan cómo crear un entorno de aplicación en contenedores. Estos comandos incluyen acciones como copiar archivos en la imagen, instalar software, configurar variables de entorno y configurar el contenedor. Para llenar el Dockerfile con estos comandos, ejecute el siguiente comando. vim Dockerfile El Dockerfile está listo para usar. Paso 7: Iniciar sesión en Docker Ahora que su Dockerfile está preparado para su uso, continúe copiando el artefacto JAR de su proyecto de la instancia EC2 **"JenkinsServer"** y péguelo en la instancia EC2 . Es importante tener en cuenta que esta transferencia se automatizará aún más a lo largo del proceso. "AnsibleServer" Al completar este paso, estará listo para probar su Dockerfile junto con el entorno Docker que ha configurado. Antes de comenzar las pruebas, asegúrese de autenticarse en Dockerhub. Ejecute el siguiente comando. docker login Este comando le pedirá que proporcione sus credenciales de inicio de sesión de Dockerhub, incluidos su nombre de usuario y contraseña. Con esto, ha completado el proceso de inicio de sesión en y ahora está listo para continuar con las pruebas. Docker Probar el entorno Docker y Dockerfile Paso 8: Una vez completado el inicio de sesión exitoso en Dockerhub, ahora está listo para comenzar a probar el Dockerfile que ha preparado. Ejecute este comando para crear una imagen acoplable. docker build -t hello:latest . A continuación, ejecuta el siguiente comando para establecer una etiqueta que facilitará la carga de la imagen en Dockerhub: docker tag hello:latest zufarexplainedit/hello:latest Finalmente, proceda a enviar la imagen de Docker a Dockerhub mediante la ejecución de este comando. docker push zufarexplainedit/hello:latest Siguiendo estos pasos, navegue hasta su cuenta Dockerhub para verificar si puede ver una imagen nueva o no. Ahora deberías observar que la imagen se ha agregado efectivamente. Este resultado confirma la instalación exitosa del entorno Docker y que su Dockerfile es correcto. [Módulo 6]: Ansible Ahora configuremos el servidor Ansible en la instancia del servidor virtual EC2. Paso 1: crear una instancia de servidor virtual AWS EC2 Necesita un servidor virtual para ejecutar Ansible. Siga las instrucciones de la sección de este tutorial para finalizar este paso y crear una instancia de servidor virtual EC2 para Ansible. [Módulo 1]: Servidor virtual AWS EC2 No olvide agregar una configuración de grupo de seguridad. Permite que y funcionen en los puertos y respectivamente. Ansible SSH 8080 22 Utilice el nombre para distinguir su instancia de servidor virtual EC2. "AnsibleServer" Puede reutilizar el grupo de seguridad y para una nueva instancia EC2 . "CI_CD_Pipeline" "CI_CD_Pipeline_Key_Pair" "AnsibleServer" Paso 2: Conéctese a una instancia del servidor virtual AWS EC2 Vaya a la página de inicio de la Consola de AWS → Panel de la Consola de administración EC2 → Instancias → AnsibleServer. Luego haga clic en el botón . "Conectar" Entonces verá esta página web. Debes volver a hacer clic en el botón . "Conectar" Ahora puede ver la terminal en línea de la instancia del servidor virtual EC2. Ahora configuremos Ansible Server en la instancia del servidor virtual EC2. Paso 3: cambie el nombre de host de la instancia del servidor virtual AWS EC2 "AnsibleServer" Lo primero que debe hacer cuando desee configurar AnsibleServer en la instancia del servidor virtual EC2 es cambiar su nombre de host. Vamos a hacerlo. Ejecute este comando para abrir el archivo de nombre de host: sudo vi /etc/hostname Debería ver algo como esto: Reemplace este nombre de host con Luego, reinícialo. "ansible-server". sudo init 6 Paso 4: Agregar y configurar un nuevo usuario en la instancia del servidor virtual AWS EC2 "AnsibleServer" Ahora agreguemos un nuevo usuario a la instancia del servidor virtual AWS EC2. ansible-admin Para hacer eso use este comando: sudo useradd ansible-admin Luego, configure la contraseña para el usuario . ansible-admin sudo passwd ansible-admin Además, debe configurar los privilegios de usuario editando el archivo . sudoers sudo visudo Agregue a este archivo . "ansible-admin ALL=(ALL) ALL" sudoers Además, debe editar el archivo para habilitar la autenticación de contraseña. /etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config Luego debes recargar el servicio para confirmar estos cambios. sudo service sshd reload Como resultado de ejecutar este comando, verá: Ahora puede usar este comando para evitar agregar sudo a todos los comandos adicionales. sudo su - ansible-admin Paso 5: Generar clave en una instancia de servidor virtual AWS EC2 Más adelante en este artículo, planea administrar servidores remotos, como instancias de servidor virtual K8s EC2. Por eso es necesario configurar claves SSH. ssh-keygen Como resultado de ejecutar este comando, verá: Ahora las claves SSH están generadas y listas para usar. Paso 6: instalar Ansible Ahora puede instalar Ansible en su instancia de servidor virtual EC2 . “AnsibleServer” Vamos a hacerlo. Ejecute este comando para instalar Ansible. sudo amazon-linux-extras install ansible2 Para verificar Ansible, use este comando: ansible --version Como resultado de ejecutar este comando, verá: Paso 7: Instale el complemento “Publicar a través de SSH” de Jenkins en la instancia EC2 de JenkinsServer Como Ansible está instalado en su instancia de servidor virtual EC2 , puede configurar Jenkins para integrarlo con Ansible. Debe instalar el complemento para integrar Jenkins con la instancia del servidor virtual EC2 donde está instalado Ansible y con otras instancias del servidor virtual EC2 donde está instalado . “AnsibleServer” "Publicar a través de SSH" Kubernetes Vaya a → " → → . "Panel de control" Administrar Jenkins" "Configurar sistema" "Complementos disponibles" Luego ingrese en el cuadro de búsqueda. "Publicar a través de SSH" Haga clic en el botón . Espere a que finalice el proceso de descarga. "Instalar sin reiniciar" Ahora el complemento "Publicar a través de SSH" está instalado en la instancia del servidor virtual Jenkins EC2. Paso 8: Configurar el complemento "Publicar a través de SSH" de Jenkins Con la instalación exitosa del complemento Apache Maven Jenkins, ahora puede utilizar este complemento dentro del proceso que creó y actualizó en los módulos 2 y 3. Para hacerlo, siga estos pasos: Vaya a → → → . "Panel de control" "Administrar Jenkins" "Configurar sistema" "Publicar a través de SSH" Ingrese todos los datos requeridos tal como aparecen en la captura de pantalla, incluido el nombre de host, el nombre de usuario y la clave privada (o contraseña, si corresponde). Luego haga clic en los botones y . "Aplicar" "Guardar" Aquí ha terminado de configurar el complemento Jenkins . "Publicar a través de SSH" A continuación, haga clic en "Probar configuración" para validar que el complemento esté funcionando correctamente. En el lado izquierdo puede ver que el estado de configuración del complemento de prueba es "Éxito". Significa que la configuración del complemento es correcta. Paso 9: cree un nuevo directorio Docker en AnsibleServer Debe crear una nueva carpeta en la instancia AnsibleServer EC2 donde se almacenará el JAR del proyecto. Este jar se utilizará para crear una imagen de Docker más adelante. Empecemos. Vaya a la carpeta en la instancia AnsibleServer EC2. "/opt" cd /opt Cree una nueva carpeta allí. "docker" sudo mkdir docker Otorgue privilegios a esta carpeta . "docker" sudo chown ansible-admin:ansible-admin docker Ahora, verifique los privilegios de la carpeta ejecutando este comando. "docker" ll Puede ver que se puede acceder a la carpeta con el usuario . "docker" "ansible-admin" en Paso 10: Integre el complemento Github “Publicar a través de SSH” el proceso Ahora que el complemento Github está instalado y configurado, ahora puede integrarlo en la canalización que creó en el "[módulo 2]: Servidor Jenkins" para transferir un artefacto jar del proyecto desde " a . "Publicar a través de SSH" JenkinsServer" “Servidor Ansible” Bueno, para integrar el complemento Github en el proceso, debes seguir estos pasos: "Publicar a través de SSH" Navegue hasta "Panel de control" → "CI_CD_Pipeline" → "Configurar" → "Acciones posteriores a la compilación". Haga clic en el botón . "Agregar acción posterior a la compilación" Elija la opción . "Enviar artefactos de compilación a través de SSH" Agregue a la entrada en la sección **.** "AnsibleServer" "Nombre" "Servidor SSH" Agregue a la entrada en la sección **.** “target/*.jar” “Archivos fuente” “Conjunto de transferencia” Agregue a la entrada en la sección **.** "destino/" "Eliminar prefijo" "Conjunto de transferencia" Agregue a la entrada en la sección **.** “//opt/docker/” “Directorio remoto” “Conjunto de transferencia” Por ahora, simplemente coloque una cadena vacía en la entrada 'Comando ejecutivo' en la sección 'Conjunto de transferencia'. Finalmente, debe hacer clic en los botones y para finalizar la integración del complemento con la canalización. "Aplicar" "Guardar" "Publicar a través de SSH" Paso 11: Pruebe el complemento Github "Publicar a través de SSH" integrado en la canalización Ahora puede usar su canalización actualizada para transferir un artefacto jar del proyecto de " a . Para hacerlo, debe hacer clic en el botón . Como resultado, verá un resultado de trabajo exitoso en el historial de compilación. JenkinsServer" "AnsibleServer" "Construir ahora" Si abre su terminal AWS EC2 . Puedes comprobar que la tubería funciona bien. “AnsibleServer” Simplemente use este comando. cd /opt/docker De esta manera podrá ver el artefacto JAR, que indica la compilación exitosa de su proyecto desde GitHub. Paso 12: configurar hosts Ansible Cuando ejecuta un libro de estrategias de Ansible, especifica los hosts en los que debe ejecutarse. Puede hacer esto de dos maneras: en su libro de estrategias, puede configurar el parámetro en una lista de direcciones IP o nombres de host. Especifique hosts directamente en el libro de estrategias: hosts Ansible le permite definir una lista de hosts en un archivo de inventario y hacer referencia a este archivo cuando ejecute su libro de estrategias. El archivo de inventario predeterminado es . Utilice un archivo de inventario: /etc/ansible/hosts Al editar , puede administrar fácilmente grupos de hosts sin tener que escribir sus direcciones IP cada vez que ejecuta un libro de estrategias. /etc/ansible/hosts Averigüemos el host de la instancia AnsibleServer EC2 ejecutando el siguiente comando. sudo ifconfig Después de descubrir el host de la instancia AnsibleServer EC2, puede agregarlo al archivo de hosts de Ansible ejecutando el siguiente comando. sudo vi /etc/ansible/hosts También puedes agregar “[ansible]” como referencia. Si está administrando un grupo de servidores y desea aplicar un libro de estrategias a todos ellos, en lugar de especificar la dirección IP de cada servidor en el libro de estrategias, simplemente puede agregar todos los servidores a un grupo en el archivo de inventario y luego especificar el grupo en el libro de jugadas. la autenticación SSH sin contraseña en localhost para Ansible Paso 13: Configurar Ansible está diseñado para automatizar tareas en servidores remotos. La autenticación SSH sin contraseña permite a Ansible conectarse a esos servidores sin la necesidad de ingresar una contraseña manualmente. Ejecute este comando para crear una conexión segura desde su computadora a otra computadora (como la de la dirección IP 172.31.34.41), usando la clave SSH del usuario ansible-admin. sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address} En mi caso, se ve así. sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub ansible-admin@172.31.34.41 Ahora puede ver . Significa que la instalación de autenticación SSH sin contraseña se completó con éxito. "Número de claves agregadas: 1" Paso 14: cree un nuevo libro de estrategias de Ansible para las tareas de Docker Ahora que Ansible está todo configurado y listo para funcionar, puede crear un nuevo libro de estrategias de Ansible para su canalización. Este manual permitirá a Ansible crear y enviar una nueva imagen de Docker a Dockerhub. Así es como puedes hacerlo: Comience creando un nuevo archivo de libro de estrategias de Ansible. Simplemente use este comando. touch hello-app.yml Luego, edite el archivo recién creado. Ábrelo para editarlo con este comando. hello-app.yml vi hello-app.yml Dentro del archivo, escriba lo siguiente. --- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest El manual de Ansible para tareas de Docker está listo para usar. Paso 13: Pruebe el manual de Ansible con tareas de Docker Con Ansible, el libro de estrategias de Ansible, AnsibleServer y JenkinsServer configurados correctamente, es hora de probar el libro de estrategias de Ansible. Navegue hasta la ubicación de su libro de jugadas de Ansible. cd /opt/docker Luego, ejecute el siguiente comando. sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml Al finalizar, verá el resultado de la ejecución exitosa de su libro de jugadas de Ansible. Además, tómese un momento para visitar su cuenta de Dockerhub y verifique si ahora hay una nueva imagen visible. Deberías ver la imagen recién agregada. Este resultado confirma que su manual de estrategias de Ansible es correcto. en Paso 14: Integre las tareas de Ansible Docker la canalización Ahora que el complemento Github , Ansible y Docker están instalados y configurados, ahora puede integrarlos todos en la canalización que creó en el "[módulo 2]: Servidor Jenkins" para transferir un artefacto jar del proyecto. de " a y luego cree una nueva imagen de Docker a partir de su proyecto y luego inserte esta imagen de Docker en Dockerhub. "Publicar a través de SSH" JenkinsServer" "AnsibleServer" Para lograrlo es necesario seguir estos pasos: Navegue hasta "Panel de control" → "CI_CD_Pipeline" → "Configurar" → "Acciones posteriores a la compilación" → "Enviar artefactos de compilación a través de SSH". Agregue el comando a la entrada . "sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml" "Comando ejecutivo" Finalmente, haga clic en los botones y para finalizar las tareas de integración de Ansible Docker con la canalización. "Aplicar" "Guardar" ” Paso 15: Pruebe el “libro de estrategias de Ansible con tareas de Docker integrado en la canalización Ahora puede probar su canalización actualizada para transferir sin problemas un artefacto jar del proyecto desde " a luego crear una nueva imagen de Docker a partir de su proyecto y luego enviar esta imagen de Docker a Dockerhub. Para hacerlo, debe hacer clic en el botón . Como resultado, verá un resultado de trabajo exitoso en el historial de compilación. JenkinsServer" "AnsibleServer", "Construir ahora" Además, tómese un momento para visitar su cuenta de Dockerhub y verifique si ahora hay una nueva imagen visible. Deberías ver la imagen recién agregada. Este resultado confirma que su manual de estrategias de Ansible con tareas de Docker se integró exitosamente en la canalización. [Módulo 7]: Kubernetes Ahora configuremos K8 en la instancia EC2. Creará una nueva instancia EC2 e instalará su herramienta de línea de comandos kubectl para interactuar más con un clúster . de Kubernetes Paso 1: lanzar una instancia del servidor virtual AWS EC2 Utilice las instrucciones de la sección " de este tutorial para finalizar este paso. Iniciar una instancia de servidor virtual AWS EC2" No olvide agregar una configuración de grupo de seguridad. Permite que y funcionen en los puertos y respectivamente. todas las herramientas SSH 8080 22 Utilice el nombre para distinguir su instancia de servidor virtual EC2. "K8sServer" Puede reutilizar el grupo de seguridad y para una nueva instancia EC2 . “CI_CD_Pipeline” “CI_CD_Pipeline_Key_Pair” “K8sServer” Paso 2: Conéctese a una instancia del servidor virtual AWS EC2 Haga clic en el botón "Conectar". Ahora puede ver la terminal en línea de la instancia del servidor virtual EC2. Paso 3: cambiar el nombre de host de la instancia del servidor virtual AWS EC2 “KubernetesServer” Lo primero que debe hacer cuando desee configurar KuberenetesServer en una instancia de servidor virtual EC2 es cambiar su nombre de host. Vamos a hacerlo. Ejecute este comando para abrir el archivo de nombre de host: sudo vi /etc/hostname Debería ver algo como esto. Reemplace este nombre de host con luego reinícielo. "kubernetes-server" y sudo init 6 Su nombre de host fue cambiado. Paso 4: verifique la versión de AWS CLI Utilice este comando para comprobar la versión . de AWS aws --version De esta manera podrá ver su versión actual de aws-cli. Si puede ver la versión , debe descargar la última versión. aws-cli/1.18 Paso 5: actualice la CLI de AWS Ahora que descubrió que tiene una versión antigua de aws-cli en su instancia EC2, debe actualizarla. Para eso, vaya a AWS → Documentación → Interfaz de línea de comandos de AWS → Guía del usuario para la versión 2. Copie y pegue . el comando curl Primero, ejecute este comando para descargar la versión 2 de awscli. curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" Espere a que comience el proceso de descarga. Debería ver algo como esto. En segundo lugar, debe ejecutar este comando para descomprimir el archivo awscli versión 2. unzip awscliv2.zip En tercer lugar, debe ejecutar este comando para instalar awscli versión 2. sudo ./aws/install Luego, vuelva a cargar el terminal en línea de la instancia del servidor virtual Kubernetes EC2. A continuación, utilice este comando para comprobar la versión de AWS. aws --version Puede ver que aws cli tiene aws-cli/2. Paso 6: instalar kubectl es una herramienta de línea de comandos fundamental para interactuar con cualquier clúster de Kubernetes, independientemente de la infraestructura subyacente. Le permite administrar recursos, implementar aplicaciones, configurar redes, acceder a registros y realizar otras tareas dentro de un clúster de Kubernetes. Kubectl Ahora necesita instalar la herramienta de línea de comandos kubectl para interactuar más con un clúster de Kubernetes. Para eso, debe ir a → → → → o → . AWS Documentación Amazon EKS Guía del usuario Instalación actualización de kubectl Linux O simplemente haga clic en el enlace . https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html Primero, ejecute este comando para descargar kubectl. curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl Espere el proceso de descarga. Verás algo como esto. Dar permiso a kubectl. chmod +x kubectl Mueva kubectl a la carpeta /usr/local/bin. sudo mv kubectl /usr/local/bin Verifique la versión de kubectl. kubectl version --output=yaml Paso 7: instale eksctl es otra herramienta de línea de comandos diseñada específicamente para el servicio Amazon EKS. Eksctl se puede utilizar para crear clústeres de AWS EKS, administrar grupos de nodos y realizar tareas específicas de EKS, como la integración con roles de IAM y otros servicios de AWS, abstrayendo gran parte de la configuración y administración de la infraestructura de AWS. Eksctl Ejecute el comando para descargar kubectl. curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp Mueva eksctl a la carpeta /usr/local/bin. sudo mv /tmp/eksctl /usr/local/bin Verifique la versión de eksctl. eksctl version Deberías ver la versión. Paso 8: Crear función de IAM para eksctl Debe crear una función de IAM y adjuntarla a su instancia EC2 . "KubernetesServer" Para hacer eso, necesita encontrar EC2 en el cuadro de búsqueda. Elija EC2 Virtual Server haciendo clic en el enlace /. https://us-east-1.console.aws.amazon.com/ec2 Vaya a → . Panel de IAM Roles Haga clic en el botón en la página web de roles . "Crear rol" de IAM Luego elija Y haga clic en el botón . "servicio AWS", "EC2". "Siguiente" Luego, busque , , , en el cuadro de búsqueda y luego haga clic en el botón . "AmazonEC2FullAccess" "AmazonEC2FullAccess" "IAMFullAccess" "AWSCloudFormationFullAccess" "Agregar permisos" Y luego haga clic en el botón . "Siguiente" Luego escriba en la entrada . "Eksctl_Role" "Nombre de rol" Y haga clic en el botón . "Crear rol" El rol finalmente se crea. Paso 9: conecte el rol de IAM con eksctl Vaya a la página web de la instancia AWS EC2. Elija Luego haga clic en → → "Servidor Kuberbetes". "Acciones" "Seguridad" "Modificar función de IAM". Elija y luego haga clic en el botón . "Eksctl_Role" "Actualizar función de IAM" Ahora su rol de IAM está conectado con su y su herramienta eksctl. “EKS_Server” Paso 10: crear un clúster eksctl es un entorno de Kubernetes administrado en AWS que automatiza tareas complejas de infraestructura como configuración, escalado y mantenimiento. Es esencial ya que proporciona una plataforma eficiente, segura y optimizada para AWS para implementar, administrar y escalar aplicaciones en contenedores, agilizar las operaciones y liberar a los desarrolladores para que se concentren en la codificación en lugar de administrar la infraestructura subyacente. Un clúster de Amazon EKS (Elastic Kubernetes Service) Ahora es el momento de configurar su clúster EKS. Para lograr esto, siga estos pasos: Modifique el siguiente comando con su información específica. eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2> Por ejemplo, en mi caso, se ve así. eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro Ejecute el comando modificado y espere pacientemente hasta que se complete el proceso de creación del clúster. Notará que el estado del clúster EKS se indica como en la página web de AWS CloudFormation. "creando" El procedimiento de creación del clúster suele tardar unos 20 minutos. Una vez completado, el terminal mostrará el resultado del proceso. Además, puede verificar el estado de creación exitosa en la página web de AWS CloudFormation. del clúster EKS Paso 11: Crear el archivo yaml de implementación de Kubernetes es un script de configuración escrito en formato YAML que define cómo administrar y mantener una aplicación o servicio específico dentro de un clúster de Kubernetes. Encapsula instrucciones para orquestar la implementación, escalado, actualización y monitoreo de contenedores que ejecutan la aplicación. Este archivo incluye detalles como la imagen del contenedor, la cantidad deseada de réplicas, límites de recursos, variables de entorno, configuración de red y más. Cuando se aplica a un clúster de Kubernetes, el archivo YAML de implementación garantiza el estado deseado de la aplicación, gestionando automáticamente la creación, el escalado y la recuperación de contenedores para mantener el nivel deseado de disponibilidad y confiabilidad. Un archivo YAML de implementación de Kubernetes Ahora, como el clúster de Kubernetes, eksctl y kubectl están instalados y configurados, puede crear un archivo yaml de implementación de Kubernetes. Puede hacerlo ejecutando el siguiente comando. touch hello-app-deployment.yaml Luego, edite este archivo ejecutando el siguiente comando. vi hello-app-deployment.yaml Agregue este contenido a hello-app-deployment.yaml. apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 Ahora hello-app-deployment.yaml está creado y listo para usar. Paso 12: cree el archivo yaml del servicio Kubernetes es un script de configuración escrito en formato YAML que define una abstracción de red para un conjunto de pods, lo que permite acceder a ellos de manera consistente dentro de un clúster de Kubernetes. Este archivo describe cómo otros servicios o clientes externos deben descubrir, acceder y equilibrar la carga del servicio. Incluye especificaciones como el tipo de servicio (ClusterIP, NodePort, LoadBalancer), números de puerto, selectores para identificar pods y más. Cuando se aplica a un clúster de Kubernetes, el archivo YAML del servicio crea una IP virtual y un puerto que enruta el tráfico a los pods apropiados, abstrayendo los cambios subyacentes del pod y proporcionando un punto final estable para la comunicación, lo que permite una conectividad perfecta y un escalado dinámico. Un archivo YAML del servicio Kubernetes Como el clúster de Kubernetes, eksctl y kubectl están instalados y configurados, puede crear un archivo yaml del servicio Kubernetes. Para hacer eso, necesita crear un archivo yaml del servicio Kubernetes ejecutando el siguiente comando. touch hello-app-service.yaml Luego, edite este archivo ejecutando el siguiente comando. vi hello-app-service.yaml Agregue este contenido a hello-app-deployment.yaml. apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer Ahora hello-app-service.yaml está creado y listo para usar. Paso 13: Pruebe el clúster de Kubernetes usando kubectl Con su clúster de Kubernetes EKS instalado y configurado correctamente, y sus archivos de implementación y servicio de Kubernetes listos, es hora de poner las cosas a prueba utilizando los comandos de kubectl. Aplicar implementación. Utilice el siguiente comando para aplicar la configuración de implementación. kubectl apply -f hello-app-deployment.yaml Esto creará una implementación con la cantidad especificada de réplicas y una estrategia de actualización continua, lo que garantizará la disponibilidad y capacidad de administración de su aplicación. 2. Aplicar Servicio. A continuación, aplique la configuración del servicio. kubectl apply -f hello-app-service.yaml Esto configurará un servicio tipo LoadBalancer, exponiendo su aplicación a Internet. Tenga en cuenta que es posible que el LoadBalancer tarde un poco en aprovisionarse y adquirir una dirección IP externa. Verifique el estado del LoadBalancer. Supervise el estado de su servicio utilizando. kubectl get service zufarexplainedit-hello-app-service Cuando se asigna una IP externa, ya casi está listo para acceder a su aplicación. Accede a tu aplicación. Usando un navegador web, ingrese la dirección IP externa asignada seguida de :8080. Después de un breve momento, la página se cargará y mostrará el mensaje "HelloWorld". Tenga en cuenta que la carga inicial puede tardar unos segundos. Limpiar con comandos kubectl Cuando necesite ordenar recursos dentro de su entorno de Kubernetes, puede usar los siguientes comandos de kubectl para eliminar implementaciones, pods y servicios de manera efectiva. . 1. Eliminar todas las implementaciones Para eliminar todas las implementaciones, puede utilizar el siguiente comando. kubectl delete deployments --all Esta acción garantiza que no queden instancias de implementación activas en su clúster. . 2. Eliminar todos los pods Si necesita eliminar todos los pods, ya sea que estén administrados por una implementación o no, puede usar el siguiente comando. kubectl delete pods --all Borrar pods puede ayudar a restablecer el estado de su clúster o prepararse para nuevas implementaciones. . 3. Eliminar todos los servicios Para limpiar servicios que exponen sus aplicaciones a la red, puede usar el siguiente comando. kubectl delete services --all La eliminación de servicios puede implicar tiempo de inactividad, así que considere las implicaciones antes de continuar. Eliminación de un clúster de Amazon EKS Para eliminar todos los recursos asociados con el clúster de Amazon EKS especificado creado con , incluidos los nodos trabajadores, los componentes de red y otros recursos, puede utilizar el siguiente comando. eksctl eksctl delete cluster --name {your cluster name} --region {your region name} Para mí lo es. eksctl delete cluster --name zufarexplainedit --region eu-north-1 Asegúrese de estar seguro de detener el clúster, ya que esta acción es irreversible y provocará la pérdida de datos. Paso 14: Agregar y configurar un nuevo usuario en la instancia del servidor virtual AWS EC2 “KubernetesServer” Ahora agreguemos un nuevo usuario a la instancia del servidor virtual AWS EC2 . ansible-admin “KubernetesServer” Para hacer eso use este comando. sudo useradd ansible-admin Luego, configure la contraseña para el usuario . ansible-admin sudo passwd ansible-admin Además, debe configurar los privilegios de usuario editando el archivo . sudoers sudo visudo Agregue a este archivo . "ansible-admin ALL=(ALL) ALL" sudoers Además, debe editar el archivo para habilitar la autenticación de contraseña. /etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config Luego deberá recargar el servicio para realizar estos cambios. sudo service sshd reload Como resultado de ejecutar este comando, verá: Ahora puede usar este comando para evitar agregar sudo a todos los comandos adicionales. sudo su - ansible-admin Paso 15: Generar clave en una instancia de servidor virtual AWS EC2 Más adelante en este artículo, planea administrar servidores remotos, como la instancia del servidor virtual EC2 . Por eso es necesario configurar claves SSH. de K8 ssh-keygen Como resultado de ejecutar este comando, verá: Ahora las claves SSH están generadas y listas para usar. la autenticación SSH sin contraseña en localhost para Ansible Paso 16: Configurar Ansible está diseñado para automatizar tareas en servidores remotos. La autenticación SSH sin contraseña permite a Ansible conectarse a esos servidores sin la necesidad de ingresar una contraseña manualmente. Ejecute este comando para crear una conexión segura desde su computadora a otra computadora (como la de la dirección IP 172.31.34.41), usando la clave SSH del usuario ansible-admin. sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address} En mi caso, se ve así. sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub ansible-admin@172.31.34.41 Ahora puede ver . Significa que la instalación de autenticación SSH sin contraseña se completó con éxito. "Número de claves agregadas: 1" Paso 17: Configurar hosts Ansible en la instancia AnsibleServer EC2 Cuando ejecuta un libro de estrategias de Ansible, especifica los hosts en los que debe ejecutarse. En este paso, debe especificar el host de la instancia EC2 de KubernetesServer. Para hacerlo, debe repetir los mismos pasos que pasó en " [Módulo 6]: Ansible". Averigüemos el host de la instancia EC2 de KubernetesServer ejecutando el siguiente comando. sudo ifconfig Después de encontrar el host de la instancia EC2 de KubernetesServer, puede agregarlo al archivo de hosts de Ansible ejecutando el siguiente comando. sudo vi /etc/ansible/hosts También puedes agregar “[kubernetes]” como referencia. Paso 18: cree un nuevo manual de Ansible para las tareas de Kubernetes Ahora que Kubernetes está configurado y listo para funcionar, puede crear un nuevo libro de estrategias de Ansible con tareas de Kubernetes para su canalización. Este manual permitirá a Ansible ejecutar su aplicación en el clúster de Kubernetes con comandos kubectl. Así es como puedes hacerlo: Comience creando un nuevo archivo de libro de estrategias de Ansible. Simplemente use este comando. touch kubernetes-hello-app.yml Luego, edite el archivo recién creado. Ábrelo para editarlo con este comando. hello-app.yml vi kubernetes-hello-app.yml Dentro del archivo, escriba lo siguiente: --- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app El manual de Ansible para tareas de Kubernetes está listo para usar. Paso 19: Integre un nuevo manual de Ansible para tareas de Kubernetes con Jenkins Ahora que Kubernetes, Ansible y el manual de estrategias de Ansible para las tareas de Kubernetes están configurados y listos para funcionar, puede integrarlo con Jenkins. Vaya a JenkinsServer → Panel de Jenkins → Nuevo elemento. Cree un nuevo proyecto Jenkins Freestyle con el nombre "CD-Job". Haga clic en el botón "Aceptar". Vaya a la sección "Acciones posteriores a la compilación". Haga clic en el botón "Agregar acción posterior a la compilación". Elija la opción "Enviar artefactos de compilación a través de SSH". Elija "AnsibleServer" como servidor SSH. Agregue este comando a la entrada "comando ejecutivo". sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml Haga clic en los botones "Aplicar" y "Guardar". Vaya al panel de Jenkins → “CI_CD_Pipeline” → Configurar → sección “Acciones posteriores a la compilación”. Haga clic en el botón "Agregar acción posterior a la compilación". Elija la opción "Crear otros proyectos". Vaya a la sección "Crear otros proyectos". Elija la opción "Activar solo si la compilación es estable". Agregue "CD-Job" a la entrada "Proyecto para construir". Haga clic en los botones "Aplicar" y "Guardar". Ahora puedes considerar que la tubería está completamente terminada y lista para usar. Paso 20: Probar la versión final del canal Ahora es el momento de poner a prueba la versión final del pipeline. Navegue a Jenkins → Panel de Jenkins → "CI_CD_Pipeline". Haga clic en el botón "Construir ahora". Para ver los resultados, revise los registros de la consola de compilación. Notará que el "CD-Job" se activó en los registros de la consola de compilación y el estado final está marcado como ÉXITO. 4 Además, puede dirigirse a Dockerhub para confirmar la adición de la nueva imagen de Docker. Y finalmente, puede acceder a su aplicación mediante un navegador web. Ingrese la dirección IP externa asignada seguida de ":8080". Después de un breve momento, la página se cargará y mostrará el mensaje "HelloWorld". Conclusión ¡Enhorabuena por configurar este moderno canal de CI/CD! ¡Has hecho un trabajo increíble y eres un verdadero héroe! ¡Gracias por todo tu esfuerzo! Sobre el Autor es un experimentado ingeniero de software senior apasionado por el diseño de sistemas de software modernos. Zufar Sunagatov Desarrollé sistemas distribuidos de alto rendimiento utilizando Java, Kotlin, AWS, Docker y Kubernetes para empresas como Citi (Londres), MTS (Moscú) y otras ( ). puede seguir el perfil de LinkedIn de Zufar para obtener más información Fundó Ice Latte, un mercado en línea de código abierto desde cero (puede unirse al equipo de Zufar y contribuir a su proyecto en GitHub: ). https://github.com/Sunagatov/Online-Store Estableció la comunidad ZufarExplainedIT para compartir su conocimiento y experiencia con otros (puede seguir la comunidad IT Telegram de Zufar: ). https://t.me/zufarexplained Fue asesorado durante más de 3000 minutos y realizó 60 sesiones en ADPlist, fomentando talentos aspirantes ( ). puede recibir asesoramiento de Zufar en ADPlist Atrajo al público como orador en conferencias y canales de YouTube de TI, compartiendo ideas invaluables (ejemplos de sus videos de YouTube incluyen: , ). “Тестовое собеседование Java разработчика #27 - Зуфар Сунагатов” “Aspiring Speakers Lunchtime Lightning Talks 28 de mayo” Es autor de artículos de TI muy populares con más de 7000 visitas cada uno (ejemplos de sus artículos son: , ). “Patrones de arquitectura de microservicios Parte 1: Patrones de descomposición” “Что значит «вариативный»? Объясняем простыми словами”