LINUX

Instalar Jenkins en Kubernetes

instalar jenkins kubernetes

CI / CD (Continuous Integration / Continuous Deployment) es un concepto central del mundo DevOps. Nos ayuda a automatizar los procesos de desarrollo de software: construir, probar e implementar los códigos fuente.

Entre muchas herramientas de CI / CD, Jenkins es una de las herramientas de código abierto más conocidas que ayuda a configurar las canalizaciones para la integración y la implementación continuas.

Este tutorial le mostrará la forma de instalar Jenkins en un clúster de Kubernetes.

Preparando un clúster de Kubernetes

Hay muchas formas de configurar un clúster de Kubernetes. Puede utilizar los servicios de nube pública para aprovisionar su propio clúster en AWS, GCP, Linode, etc. Además, la forma más sencilla es instalar minikube en su máquina local.

Aquí, tengo un clúster de Kubernetes con 5 nodos aprovisionados mediante kubespray.

$ kubectl get node
kubernetes-cluster
Clúster de Kubernetes

Instalación de Jenkins

En primer lugar, crearemos un nuevo espacio de nombres para proporcionar el mecanismo de aislamiento para controlar el entorno de CI:

$ kubectl create namespace jenkins
namespace/jenkins created

Verificando que el espacio de nombres jenkins se creó correctamente ejecutando el siguiente comando:

$ kubectl get namespaces
espacio de nombres-jenkins
Espacio de nombres jenkins

Luego, creemos la implementación de Jenkins. Puede usar el siguiente archivo de manifiesto para crear una implementación de instancia única de Jenkins.

Creando el archivo `jenkins-deployment.yaml`:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
      - name: jenkins
        image: jenkins/jenkins:lts
        ports:
          - name: http-port
            containerPort: 8080
          - name: jnlp-port
            containerPort: 50000
        volumeMounts:
          - name: jenkins-vol
            mountPath: /var/jenkins_vol
      volumes:
        - name: jenkins-vol
          emptyDir: {}

La implementación usa la imagen de Docker `jenkins / jenkins: lts` y expone los puertos` 8080` y `50000`.

Aplicar el manifiesto anterior:

$ kubectl create -f jenkins-deployment.yaml --namespace jenkins

Se necesitan unos minutos para extraer la imagen jenkins / jenkins: lts y hacer que el pod funcione. Verificación de que la implementación de Jenkins se implementó correctamente:

$ kubectl get pod -n jenkins                                                                                                                                                      

NAME                                  READY     STATUS   RESTARTS   AGE
jenkins-deployment-794699f9bc-rln7x   1/1 	Running  0      	  66s

Implementación del servicio Jenkins

Después de crear la implementación de Jenkins y el pod de Jenkins se está ejecutando, debe exponer la conexión al pod en ejecución mediante un servicio. En este tutorial, usaremos los servicios NodePort y ClusterIP.

Creemos el archivo `jenkins-svc.yaml` de la siguiente manera:

apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30000
  selector:
    app: jenkins

---
apiVersion: v1
kind: Service
metadata:
  name: jenkins-jnlp
spec:
  type: ClusterIP
  ports:
    - port: 50000
      targetPort: 50000
  selector:
    app: jenkins

Ahora, aplique el manifiesto anterior y cree el servicio en el espacio de nombres `jenkins`:

$ kubectl create -f jenkins-svc.yaml --namespace jenkins

Verifique que el servicio se esté ejecutando:

$ kubectl get svc --namespace jenkins                                                                                                                                                   	
NAME       	  TYPE    	CLUSTER-IP 	 EXTERNAL-IP   PORT(S)      	  AGE
jenkins    	  NodePort	10.233.2.81	     	   8080:30000/TCP   30s
jenkins-jnlp  ClusterIP 10.233.53.44     	   50000/TCP    	  30s

A partir de ahora, podemos acceder al panel de Jenkins mediante el servicio NodePort.

Acceder al panel de Jenkins

Se puede acceder al servicio NodePort desde el puerto `30000` en cualquier nodo trabajador del clúster de Kubernetes:

`http: // dirección_ip_nodo_trabajador: 30000`

Puede obtener la dirección IP de los nodos trabajadores mediante el siguiente comando:

$ kubectl get node -o wide

NAME	STATUS   ROLES	AGE	VERSION   INTERNAL-IP 	EXTERNAL-IP   OS-IMAGE         	KERNEL-VERSION   	CONTAINER-RUNTIME
node1   Ready	master   149m   v1.19.2   192.168.0.111       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
node2   Ready	master   148m   v1.19.2   192.168.0.112       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
node3   Ready	master   148m   v1.19.2   192.168.0.113       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
node4   Ready	   147m   v1.19.2   192.168.0.114       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13
node5   Ready	   147m   v1.19.2   192.168.0.115       	Ubuntu 18.04.5 LTS   4.15.0-121-generic   docker://19.3.13

Por ejemplo, abramos el navegador web y vayamos a: `http: //192.168.0.111: 30000`

jenkins-setup-administrador-contraseña
Contraseña de administrador de configuración de Jenkins

Para recuperar la contraseña de administrador, puede ejecutar el siguiente comando:

$ kubectl logs jenkins-deployment-794699f9bc-rln7x --namespace jenkins
Obtener la contraseña de administrador de jenkins
Obtener la contraseña de administrador de jenkins

Ingrese la contraseña de administrador, luego siga los siguientes pasos de configuración y accederá exitosamente al panel de Jenkins.

página de bienvenida de Jenkins
Página de bienvenida de Jenkins

Conclusión

Jenkins es una herramienta CI / CD realmente poderosa para cualquier ingeniero de DevOps y también desarrollador de software. Este tutorial ha pasado por todos los pasos para implementar Jenkins en un clúster de Kubernetes. Gracias a Jenkins, seremos más productivos y nos ayuda a reducir el tiempo de creación, prueba e implementación de códigos.

Gracias por leer y deje su sugerencia en la sección de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar