¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Kubernetes
  3. Factoría de software
Extrait - Kubernetes Administre la plataforma de despliegue de sus aplicaciones en contenedores
Extractos del libro
Kubernetes Administre la plataforma de despliegue de sus aplicaciones en contenedores
3 opiniones
Volver a la página de compra del libro

Factoría de software

Objetivos del capítulo y requisitos previos

En el capítulo anterior, se abordó el principio de compilación de una imagen de Docker. Ahora, la atención se centrará en la automatización de esta tarea. De hecho, las imágenes de Docker rara vez se compilan manualmente.

En el caso de algunos sitios web (GitLab o GitHub), esta automatización se tiene en cuenta utilizando archivos YAML que se añaden en la raíz del repositorio de Git. Se presentará un ejemplo con GitLab para entender el principio de funcionamiento.

Se presentará otro método basado en Jenkins y también se tendrá en cuenta el aspecto de despliegue continuo. Asimismo, se presentará brevemente el sucesor de Jenkins X.

En términos de requisitos previos, deberá tener un conocimiento mínimo del uso de Git, como:

  • añadir un archivo,

  • modificar el contenido de un repositorio,

  • enviar el contenido a un repositorio remoto (GitHub, GitLab, BitBucket, etc.),

  • implementar hooks de eventos.

Compilación mediante GitLab

1. Aplicación para compilar

A continuación, la aplicación Flask del capítulo anterior se integrará en un repositorio GitLab.

Lo único que se añade se centra en el archivo .gitlab-ci.yml, que definirá el lanzamiento de la compilación de los elementos del repositorio Git.

2. Mecanismo de pipeline GitLab

El archivo .gitlab-ci.yml es un archivo de formato YAML, que se encuentra en la raíz del repositorio. Contiene instrucciones que se utilizarán para construir los elementos del repositorio de Git.

Con cada cambio, el pipeline de despliegue se activa y se basa en un administrador de tareas (Runner).

Como el archivo .gitlab-ci.yml se almacena con el código, es posible compilar versiones antiguas del software o mantener diferentes versiones en función de las ramas de Git.

3. Dirección y contenido del repositorio

El repositorio GitLab de ejemplos está disponible en: https://gitlab.com/yannig.perre/flask-healthcheck

La recuperación del contenido de este repositorio se realiza mediante el siguiente comando:

$ git clone https://gitlab.com/yannig.perre/flask-healthcheck.git 

En la raíz de este repositorio, puede encontrar lo siguiente:

  • Los archivos de la aplicación Flask del capítulo anterior.

  • Las instrucciones de compilación en el archivo .gitlab-ci.yml.

4. Estructura del archivo .gitlab-ci.yml

De forma predeterminada, un archivo de construcción GitLab contiene tres fases:

  • La fase build, encargada de la compilación.

  • La fase test, encargada de poner en marcha las pruebas.

  • La fase deploy, encargada del despliegue.

Estas fases se ejecutarán en este orden y la conexión a estas fases se realiza utilizando la palabra clave stage a nivel de una tarea (job).

Una tarea es una declaración YAML que puede contener los siguientes campos: 

  • before_script: para ser ejecutada antes del script.

  • script: comando que se va a ejecutar.

  • after_script: para ser ejecutado al final del script.

A continuación, se muestra un ejemplo de declaración de una tarea my-task ejecutada durante la fase build:

my-task: 
   stage: build 
   after_script: 
     - echo Before 
   script: 
     - echo Now 
   after_script: ...

Despliegue continuo con Jenkins

1. Acerca de Jenkins

A continuación, se implementará el software de Jenkins en Kubernetes.

Se trabajarán ejemplos para crear un pipeline de construcción de imágenes de Docker, así como un mecanismo de actualización automática.

En cuanto a GitLab, este capítulo no pretende presentar completamente cómo funciona Jenkins. Se trata de una guía para alguien que ya ha tenido un primer contacto con este tema.

Para más detalles, no dude en consultar el sitio web de Jenkins en la siguiente dirección: https://jenkins.io

2. Instalar Jenkins

a. Configurar el chart

La instalación de Jenkins se realizará utilizando el chart Helm jenkins/jenkins. Para hacerlo accesible desde el exterior, el master se expondrá mediante el mecanismo Ingress.

En primer lugar, añada la fuente del paquete Jenkins:

$ helm repo add jenkins https://charts.jenkins.io 

A continuación, se muestra la configuración que se debe usar para exponer el master en Internet en https://jenkins.eni.yannig.ovh, creando un certificado SSL/TLS:

controller: 
 ingress: 
   enabled: true 
   apiVersion: "networking.k8s.io/v1" 
   annotations: 
     kubernetes.io/tls-acme: "true" 
     cert-manager.io/cluster-issuer: "letsencrypt-prod" 
   tls: 
     - secretName: jenkins.eni.yannig.ovh ...

Pipeline de despliegue continuo con Jenkins

1. Requisitos previos

Para los siguientes ejemplos, se utilizará el repositorio de Git https://github.com/Yannig/eni-kubernetes.git. Depende de usted cambiar la dirección para que apunte a un repositorio de Git suyo.

2. Presentación del mecanismo de despliegue continuo

En Jenkins, un pipeline de despliegue continuo es un programa escrito en Groovy que va a controlar el progreso de un despliegue. Normalmente, un despliegue se desarrolla siguiendo estas acciones:

  • recuperar el código fuente,

  • compilar el programa,

  • guardar el resultado de la compilación,

  • actualizar la aplicación en el entorno de despliegue continuo.

El pipeline de ejemplo retomará estas fases principales.

images/22EP03.png

Esquema principal del pipeline de despliegue continuo

La aplicación que se va a crear se almacena en el subdirectorio flass-healthCheck. Esta es una aplicación Flask que dispone de un archivo Dockerfile

Esta imagen se almacenará en el registro público de Docker con el nombre yannig/flask-healthcheck.

3. Almacenar los identificadores Docker

Para poder enviar la imagen compilada a Docker Hub, se creará un secreto en el espacio de nombres de Jenkins.

 Cree este secreto con el siguiente comando:

$ kubectl create secret docker-registry docker-hub-cred \ 
  --docker-server=docker.io \ 
  --namespace=jenkins \ 
  --docker-username=yannig \ 
  --docker-password=xxx 

4. Crear el entorno desarrollo

Para actualizar continuamente una versión de la aplicación, se creará el espacio de nombres desarrollo con una implementación de prueba.

 En primer lugar, cree el espacio de nombres:

$ kubectl create ns desarrollo¡ 

 En este espacio de nombres, cree un despliegue de prueba de la imagen yannig/flask-healthcheck en la versión latest:

$ kubectl -n desarrollo create deployment \ 
              --image yannig/flask-healthcheck:latest test 

5. Crear el pipeline

a. Crear el pod de compilación

Lo primero que hará el pipeline es crear un nodo de trabajo en forma de pod. Esta operación se realiza con la instrucción podTemplate y varios parámetros.

A continuación, se muestran algunos parámetros de uso común:

  • Un campo containers, con la lista...

Algunas palabras sobre Jenkins X

La configuración de un proceso de implementación y despliegue continuo usando Jenkins en Kubernetes requiere algunos conocimientos:

  • Seleccionar las extensiones de Jenkins.

  • Gestionar la ejecución de los permisos.

  • Orquestar operaciones usando el pipeline.

Jenkins X ofrece una respuesta más sencilla de implementar para un desarrollador, al ocuparse de los aspectos de comunicación/creación del clúster de Kubernetes. De esta manera, el usuario se puede concentrar en su tarea principal: el desarrollo.

No dude en consultar las siguientes direcciones para obtener más información sobre este software: