Soy Oscar Mas y hoy os quiero explicar como implemetar Kuberntes dentro de nuestra infraestructura de Kubernetes. Esto es útil, ya que de esta forma podremos desplegar dinámicamente los agentes de Jenkins en un cluster de Kubernetes.
Primero actualizaremos nuestro repositorio y posteriormente instalaremos el demonio de NFS. Esto lo haremos para que los datos almacenados en nuestro sistema de Jenkins persistan ante los posibles reinicios o caídas de servicios:
rootdevel@ub-nodo0-mad:~$ apt-get update && apt-get install -y nfs-common nfs-kernel-server
Crearemos un directorio donde posteriormente se guardaran las configuraciones de Jenkins y configuraremos nuestro sistema de NFS para que sea accesible desde cualquier equipo:
root@ub-nodo0-mad:~# mkdir /home/jenkins-nfs root@ub-nodo0-mad:~# cat /etc/exports /home/jenkins-nfs *(rw,no_root_squash) root@ub-nodo0-mad:~# systemctl restart nfs-kernel-server
Instalaremos el cliente de NFS en nuestros dos servidores de Kubernetes
root@ub-nodo1-mad:~# apt-get update && apt-get install -y nfs-common root@ub-nodo2-mad:~# apt-get update && apt-get install -y nfs-common
Una vez instalado el agente de NFS en nuestros servidores, verificaremos que tenemos acceso a los datos del servidor de NFS:
root@ub-nodo1-mad:~# showmount -e 172.21.21.190 root@ub-nodo2-mad:~# showmount -e 172.21.21.190
Crearemos nuestro PV y PVC para el sistema de Jenkins y aplicaremos nuestra confiuguración:
rootdevel@ub-nodo0-mad:~$ cat nfs-jenkins.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-nfs-pv
spec:
storageClassName: jenkins-nfs
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: 172.21.21.190
path: "/home/jenkins-nfs"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: jenkins-nfs-pvc
spec:
storageClassName: jenkins-nfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
rootdevel@ub-nodo0-mad:~$ kubectl apply -f nfs-jenkins.yaml
Le asignaremos los permisos correspondfientes a la carpeta para que el usuario de Jenkins que se creará en el pod pueda tener acceso a grabar los datos:
rootdevel@ub-nodo0-mad:~$ sudo chmod -R g=u /home/jenkins-nfs/ rootdevel@ub-nodo0-mad:~$ sudo chown 1000:1000 /home/jenkins-nfs
Crearemos el deployment del Jenkins:
rootdevel@ub-nodo0-mad:~$ cat jenkins-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins
ports:
- name: http
containerPort: 8080
- name : jnlp
containerPort: 50000
volumeMounts:
- name: jenkins-nfs-pvc
mountPath: "/var/jenkins_home"
securityContext:
fsGroup: 1000
volumes:
- name: jenkins-nfs-pvc
persistentVolumeClaim:
claimName: jenkins-nfs-pvc
rootdevel@ub-nodo0-mad:~$ kubectl apply -f jenkins-deployment.yaml
Una vez creado el deployment de nuestro sistema de Jenkins, podremos ver de dos maneras el password que nos ha generado, para posteriormente poder realizar la configuración de nuestro Jenkins:
- Accediendo al pod de Jenkins y desde allí ver el password:
rootdevel@ub-nodo0-mad:~$ kubectl get pods rootdevel@ub-nodo0-mad:~$ kubectl exec -it jenkins-6fcbb977d4-kc6rk -- /bin/bash jenkins@jenkins-6fcbb977d4-kc6rk:/$ df -h jenkins@jenkins-6fcbb977d4-kc6rk:/$ cat /var/jenkins_home/secrets/initialAdminPassword
- Accediendo a nuestro servidor NFS y desde allí ver el password:
rootdevel@ub-nodo0-mad:~$ cat /home/jenkins-nfs/secrets/initialAdminPassword
Ahora ya solamente nos queda crear el Service y nuestro Ingress para poder acceder a nuestro Sistema de Jenkins:
rootdevel@ub-nodo0-mad:~$ cat jenkins-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
name: jenkins-service
name: jenkins-service
spec:
ports:
- name: jnlp
port: 50000
targetPort: 50000
- name: http
port: 8080
targetPort: 8080
selector:
app: jenkins
type: ClusterIP
rootdevel@ub-nodo0-mad:~$ kubectl apply -f jenkins-service.yaml
rootdevel@ub-nodo0-mad:~$ cat jenkins-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: jenkins-ingress
spec:
rules:
- host: jenkins.ilba.cat
http:
paths:
- path: /
backend:
serviceName: jenkins-service
servicePort: 8080
rootdevel@ub-nodo0-mad:~$ kubectl apply -f jenkins-ingress.yaml
Configuraremos nuestro Traefik y nuestro Sistema de proxy tal como hemos indicado en otros posts y de esta forma ya podremos acceder a nuestro Jenkins:



Acordaros de ponerlo en English 😉
Espero que os sirva de ayuda. Os dejamos la serie completa sobre Jenkins:

Leave a Reply