Aprenda a crear una canalización de CI/CD avanzada con AWS, K8S, Docker, Ansible, Apache Maven, Git, Github y Jenkins con Zufar Sunagatov. Al final de este tutorial, obtendrá una canalización de CI/CD moderna lista para usar que es aplicable a cualquiera de sus proyectos en Github.
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 AWS, Docker, Kubernetes, Ansible, Git, Apache Maven y Jenkins . Entonces, ¡comencemos este viaje!
[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 //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 //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 Imagen de máquina de Amazon (AMI) , seleccione una máquina con la 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 etiqueta elegible para el nivel gratuito en la sección 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 ( Tipo: SSH, Protocolo: TCP, Puerto: 22 ). Si necesita tipos de conexión adicionales, agréguelos agregando reglas de grupo de seguridad entrante adicionales.
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 RSA o ED25519 . Elijo el tipo RSA .
Seleccione Formato de archivo de clave privada. Elección de .pem y .ppk . Elijo el formato .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 "Instancias" haciendo clic en el botón "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 [Módulo 1]: Servidor virtual AWS EC2 de este tutorial para finalizar este paso y crear una instancia de servidor virtual EC2 con el nombre JenkinsServer.
No olvide agregar una configuración de grupo de seguridad. Permite que Jenkins y SSH funcionen en los puertos 8080 y 22 respectivamente.
Utilice el nombre "JenkinsServer" para distinguir su instancia de servidor virtual EC2.
Cree el grupo de seguridad "CI_CD_Pipeline" y "CI_CD_Pipeline_Key_Pair" para una nueva instancia AWS EC2 "JenkinsServer" . Puede reutilizarlos más adelante en el artículo.
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 JenkinsServer y luego hacer 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.
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.
Puede ver las opciones de lanzamientos estables (LTS) y regulares (semanales). Elija la opción LTS.
Verá esta página web.
Copie el comando “sudo get…” 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.
De esta manera, el administrador de paquetes “rpm” 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.
Paso 5: instale Java
Para ejecutar Jenkins, necesitamos instalar Java en nuestra instancia de servidor virtual EC2.
Verifique si Java se instaló correctamente usando este comando:
java -version
Verás algo así.
Paso 6: instale fontconfig
Para ejecutar Jenkins, necesita instalar fontconfig en nuestra instancia de servidor virtual EC2.
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.
//<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.
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 descripción de la tubería.
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].
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 "Administrar Jenkins" y luego haga clic en el botón "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 Github . Y luego haga clic en el botón “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 "Administrar Jenkins" y luego hacer clic en el botón "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 “Aplicar” y “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: .
Simplemente cópielo y péguelo en la entrada " URL del repositorio" . Luego haga clic en los botones "Aplicar" y "Guardar" para finalizar la integración de Git con el pipeline.
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
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.
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" .
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 .
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 .bash_profile usando este comando.
vi .bash_profile
Agregue las variables JAVA_HOME y M2_HOME.
Asigne la ruta a JDK11 para JAVA_HOME y la ruta al directorio maven para la variable M2_HOME .
Para encontrar la ruta JDK, use este comando.
sudo find / -name java
Cómo utilizar VIM
Para editar el archivo presione el botón del teclado “I” para insertar datos.
Para guardar el archivo presione el botón del teclado "esc" e ingrese ":w".
Para salir del archivo presione el botón del teclado “esc” e ingrese “:q” .
Guarde los cambios.
Luego, ejecute este comando para actualizar las variables del sistema.
source .bash_profile
Para verificar $PATH , use este comando.
echo $PATH
Para verificar Apache Maven , utilice este comando.
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 "Maven" . Haga clic en el botón "Agregar Maven" . Desmarque "Instalar automáticamente".
Luego agregue el nombre y la ruta MAVEN_HOME .
Haga clic en los botones "Aplicar" y "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 "Apache-Maven" como "Versión Maven".
Agregue el comando "limpiar paquete" a la entrada "Objetivos" .
Haga clic en el botón "Avanzado" .
Agregue "pom.xml" a la entrada "POM" .
Finalmente, debe hacer clic en los botones "Aplicar" y "Guardar" para finalizar la integración de Apache Maven con la canalización.
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 " Iniciar una instancia de servidor virtual AWS EC2" 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.
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: 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 "ansible-admin" al grupo Docker en el servidor virtual EC2 "AnsibleServer" para otorgar privilegios de administrador a Docker.
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 "Hola" que se ofreció en el módulo " [Módulo 3]: Git y Github" , entonces no necesita crear un nuevo Dockerfile ya que este repositorio de proyectos ya contiene Dockerfile.
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 "AnsibleServer" . Es importante tener en cuenta que esta transferencia se automatizará aún más a lo largo del proceso.
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 Docker y ahora está listo para continuar con las pruebas.
Paso 8: Probar el entorno Docker y Dockerfile
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 [Módulo 1]: Servidor virtual AWS EC2 de este tutorial para finalizar este paso y crear una instancia de servidor virtual EC2 para Ansible.
No olvide agregar una configuración de grupo de seguridad. Permite que Ansible y SSH funcionen en los puertos 8080 y 22 respectivamente.
Utilice el nombre "AnsibleServer" para distinguir su instancia de servidor virtual EC2.
Puede reutilizar el grupo de seguridad "CI_CD_Pipeline" y "CI_CD_Pipeline_Key_Pair" para una nueva instancia EC2 "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 "ansible-server". Luego, reinícialo.
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 ansible-admin a la instancia del servidor virtual AWS EC2.
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 "ansible-admin ALL=(ALL) ALL" a este archivo sudoers .
Además, debe editar el archivo /etc/ssh/sshd_config para habilitar la autenticación de contraseña.
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 “AnsibleServer” , puede configurar Jenkins para integrarlo con Ansible. Debe instalar el complemento "Publicar a través de SSH" 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 Kubernetes .
Vaya a "Panel de control" → " Administrar Jenkins" → "Configurar sistema" → "Complementos disponibles" .
Luego ingrese "Publicar a través de SSH" en el cuadro de búsqueda.
Haga clic en el botón "Instalar sin reiniciar" . Espere a que finalice el proceso de descarga.
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 "Aplicar" y "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 "/opt" en la instancia AnsibleServer EC2.
cd /opt
Cree una nueva carpeta "docker" allí.
sudo mkdir docker
Otorgue privilegios a esta carpeta "docker" .
sudo chown ansible-admin:ansible-admin docker
Ahora, verifique los privilegios de la carpeta "docker" ejecutando este comando.
ll
Puede ver que se puede acceder a la carpeta "docker" con el usuario "ansible-admin" .
Paso 10: Integre el complemento Github “Publicar a través de SSH” en el proceso
Ahora que el complemento Github "Publicar a través de SSH" 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 " JenkinsServer" a “Servidor Ansible” .
Bueno, para integrar el complemento Github "Publicar a través de SSH" en el proceso, debes seguir estos pasos:
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 "AnsibleServer" a la entrada "Nombre" en la sección "Servidor SSH" **.**
Agregue “target/*.jar” a la entrada “Archivos fuente” en la sección “Conjunto de transferencia” **.**
Agregue "destino/" a la entrada "Eliminar prefijo" en la sección "Conjunto de transferencia" **.**
Agregue “//opt/docker/” a la entrada “Directorio remoto” en la sección “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 "Aplicar" y "Guardar" para finalizar la integración del complemento "Publicar a través de SSH" con la canalización.
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 " JenkinsServer" a "AnsibleServer" . 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 “AnsibleServer” . Puedes comprobar que la tubería funciona bien.
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:
Especifique hosts directamente en el libro de estrategias: en su libro de estrategias, puede configurar el parámetro hosts en una lista de direcciones IP o nombres de host.
Utilice un archivo de inventario: 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 /etc/ansible/hosts .
Al editar /etc/ansible/hosts , puede administrar fácilmente grupos de hosts sin tener que escribir sus direcciones IP cada vez que ejecuta un libro de estrategias.
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.
Paso 13: Configurar la autenticación SSH sin contraseña en localhost para Ansible
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}
Ahora puede ver "Número de claves agregadas: 1" . Significa que la instalación de autenticación SSH sin contraseña se completó con éxito.
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 hello-app.yml recién creado. Ábrelo para editarlo con este comando.
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.
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.
Paso 14: Integre las tareas de Ansible Docker en la canalización
Ahora que el complemento Github "Publicar a través de SSH" , 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 " JenkinsServer" a "AnsibleServer" y luego cree una nueva imagen de Docker a partir de su proyecto y luego inserte esta imagen de Docker en Dockerhub.
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 "sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml" a la entrada "Comando ejecutivo" .
Finalmente, haga clic en los botones "Aplicar" y "Guardar" para finalizar las tareas de integración de Ansible Docker con la canalización.
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 " JenkinsServer" a "AnsibleServer", 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 "Construir ahora" . Como resultado, verá un resultado de trabajo exitoso en el historial de compilación.
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 " Iniciar una instancia de servidor virtual AWS EC2" de este tutorial para finalizar este paso.
No olvide agregar una configuración de grupo de seguridad. Permite que todas las herramientas y SSH funcionen en los puertos 8080 y 22 respectivamente.
Utilice el nombre "K8sServer" para distinguir su instancia de servidor virtual EC2.
Puede reutilizar el grupo de seguridad “CI_CD_Pipeline” y “CI_CD_Pipeline_Key_Pair” para una nueva instancia EC2 “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 "kubernetes-server" y luego reinícielo.
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 aws-cli/1.18 , debe descargar la última versión.
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.
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
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.
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 AWS → Documentación → AmazonEKS → Guíadel usuario → Instalación o actualizaciónde kubectl → Linux .
O simplemente haga clic en el enlace .
Primero, ejecute este comando para descargar kubectl.
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.
Ejecute el comando para descargar kubectl.
curl --silent --location "//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 /.
Vaya a Panelde IAM → Roles .
Haga clic en el botón "Crear rol" en la página web de roles de IAM .
Luego elija "servicio AWS", "EC2". Y haga clic en el botón "Siguiente" .
Luego, busque "AmazonEC2FullAccess" , "AmazonEC2FullAccess" , "IAMFullAccess" , "AWSCloudFormationFullAccess" en el cuadro de búsqueda y luego haga clic en el botón "Agregar permisos" .
Y luego haga clic en el botón "Siguiente" .
Luego escriba "Eksctl_Role" en la entrada "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 "Servidor Kuberbetes". Luego haga clic en "Acciones" → "Seguridad" → "Modificar función de IAM".
Elija "Eksctl_Role" y luego haga clic en el botón "Actualizar función de IAM" .
Ahora su rol de IAM está conectado con su “EKS_Server” y su herramienta eksctl.
Paso 10: crear un clúster eksctl
Un clúster de Amazon EKS (Elastic Kubernetes Service) 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.
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.
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 "creando" en la página web de AWS CloudFormation.
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 del clúster EKS en la página web de AWS CloudFormation.
Paso 11: Crear el archivo yaml de implementación de Kubernetes
Un 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.
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.
Ahora hello-app-deployment.yaml está creado y listo para usar.
Paso 12: cree el archivo yaml del servicio Kubernetes
Un 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.
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.
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 eksctl , incluidos los nodos trabajadores, los componentes de red y otros recursos, puede utilizar el siguiente comando.
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 ansible-admin a la instancia del servidor virtual AWS EC2 “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 "ansible-admin ALL=(ALL) ALL" a este archivo sudoers .
Además, debe editar el archivo /etc/ssh/sshd_config para habilitar la autenticación de contraseña.
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 de K8 . 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 16: Configurar la autenticación SSH sin contraseña en localhost para Ansible
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}
Ahora puede ver "Número de claves agregadas: 1" . Significa que la instalación de autenticación SSH sin contraseña se completó con éxito.
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 hello-app.yml recién creado. Ábrelo para editarlo con este comando.
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".
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
Zufar Sunagatov es un experimentado ingeniero de software senior apasionado por el diseño de sistemas de software modernos.
Desarrollé sistemas distribuidos de alto rendimiento utilizando Java, Kotlin, AWS, Docker y Kubernetes para empresas como Citi (Londres), MTS (Moscú) y otras ( ).
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: ).
Estableció la comunidad ZufarExplainedIT para compartir su conocimiento y experiencia con otros (puede seguir la comunidad IT Telegram de Zufar: ).
Fue asesorado durante más de 3000 minutos y realizó 60 sesiones en ADPlist, fomentando talentos aspirantes ( ).
Atrajo al público como orador en conferencias y canales de YouTube de TI, compartiendo ideas invaluables (ejemplos de sus videos de YouTube incluyen: , ).