Jenkins deployment on kubernetes

Kubernetes– Jenkins deployment on kubernetes

Kubernetes (K8s) is an open-source tool for automating the deployment, scaling, and management of containerized applications.

Kubernetes clusters add a new automation layer to Jenkins. Kubernetes ensures that resources are used effectively and that your servers and underlying infrastructure are not overloaded. Kubernetes’ ability to orchestrate container deployments ensures that Jenkins always has the right amount of resources available.

Hosting Jenkins on a Kubernetes cluster is beneficial for Kubernetes-based deployments. Here, we go through the step-by-step process to install Jenkins on a Kubernetes cluster.

Read Also – Kubernetes Architecture and core Components

Prerequisites

  • Make sure you have a Kubernetes cluster running (you can refer to a tool like Minikube, GKE, AKS or any other Kubernetes service).
  • Install kubectl for managing Kubernetes resources.
  • Basic understanding of Docker containers and Kubernetes concepts.

Create a Kubernetes Cluster with minikube –

Minikube is a tool that creates a single-node Kubernetes cluster on your machine. If you don’t have a Kubernetes cluster running, follow these steps:

$ Install kubectl
$ Install minikube
  1. You can now start minikube y entering the following command:
$minikube start

$minikube status
Jenkins deployment on kubernetes
$minikube dashboard

Getting Set Up for Jenkins

  • Create a namespace that allows you to segregate Jenkins objects within the Kubernetes cluster.
  • Create a PersistentVolume to store your Jenkins data. This will preserve data across restarts.
  1. Create a file called jenkins-namespace.yaml
$nano jenkins-namespace.yaml
# jenkins-namespace.yaml

apiVersion: v1

kind: Namespace

metadata:

name: jenkins

This YAML defines a Kubernetes namespace named “jenkins.”

  1. Save the changes in nano by pressing Ctrl + O, then press Enter to confirm the file name, and exit by pressing Ctrl + X.
  2. Apply the namespace configuration to create the namespace in your Kubernetes cluster:
$kubectl apply -f jenkins-namespace.yaml
$nano jenkins-deployment.yaml
apiVersion: apps/v1

kind: Deployment

metadata:

name: jenkins-deployment

namespace: jenkins

spec:

replicas: 1 # Adjust the number of replicas as needed

selector:

matchLabels:

app: jenkins

template:

metadata:

labels:

app: jenkins

spec:

containers:

- name: jenkins-container

image: jenkins/jenkins:latest # Use the Jenkins Docker image

ports:

- containerPort: 8080 # Expose the default Jenkins port

- containerPort: 50000 # Expose the port for Jenkins agents
$cat jenkins-deployment.yaml
$kubectl create -f jenkins-deployment.yaml
$nano jenkins-service.yaml
Inside the nano editor, add the following content for the Jenkins Service:

# jenkins-service.yaml

apiVersion: v1

kind: Service

metadata:

name: jenkins-service

namespace: jenkins # Make sure to set the namespace to the one you've created

spec:

selector:

app: jenkins

ports:

- protocol: TCP

port: 8080

targetPort: 8080

type: NodePort

Save the changes in nano by pressing Ctrl + O, then press Enter to confirm the file name, and exit by pressing Ctrl + Xkubectl apply -f jenkins-service.yaml
$kubectl apply -f jenkins-service.yaml
$jenkins configmap.yaml
apiVersion: v1

kind: ConfigMap

metadata:

name: jenkins-configmap

namespace: jenkins

data:

key1: value1

key2: value2

key3: value3
$kubectl create -f jenkins-configmap.yaml
$kubectl get pods -n jenkins
$kubectl logs jenkins-deployment-74bd32df-tmxj4 -n jenkins

Replace jenkins-deployment-74bd32df-tmxj4 with the actual name of your Jenkins pod

copy that password and paste it on Administrator Password.

$kubectl get services -n jenkins

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

jenkins NodePort 10.103.31.217 <none> 8080:30148/TCP 59s

Access Jenkins dashboard

So now we have created a deployment and service, how do we access Jenkins?

From the above output we can see that the service is exposed on port 32664. We also know that since the service is of type NodeType the service will send requests to any node on this port to the Jenkins pod. All that remains for us is to determine the IP address of the Minicube VM. Minikube makes this really easy by including a specific command that outputs the IP address of the current cluster:

$minikube ip

Go to browzer and search

192.168.49.2:30148

You will be redirected to a page offering suggested plugins to install. After that, click on “Install recommended plugins”. Please note that if users want to install only selected essential plugins, it is recommended to select the “Select plugins to install” option.

After clicking on the suggested plugin button, the standard plugin installation will be started automatically

Finally, after installation of all suggested plugins, you will be redirected to the User Account Page

Enter the username, new password that you want to keep. Confirm password, full name, email address and click “Save and Continue” button. You can select the option “Skip and continue as administrator” next to the “Save and continue” button and in this case, you need to keep the password you put in the previous steps. It is recommended that you need to enter a new password of your choice.

After clicking, you will be redirected to a new screen that will display a message like “Jenkins is Ready”. Now click on the “Start using Jenkins” button.

After clicking on the “Start using Jenkins ” button, you will be redirected to the Jenkins Dashboard.

Hope you like this Blog .
Mahesh Wabale
Latest posts by Mahesh Wabale (see all)

Leave a Comment